Skip to content

Instantly share code, notes, and snippets.

@natevw
Created March 5, 2012 20:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save natevw/a059c4db5bce19f1df7f to your computer and use it in GitHub Desktop.
Save natevw/a059c4db5bce19f1df7f to your computer and use it in GitHub Desktop.
CouchDB crash under load
This file has been truncated, but you can view the full file.
[Tue, 28 Feb 2012 23:22:02 GMT] [info] [<0.1299.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:02 GMT] [info] [<0.1300.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:02 GMT] [info] [<0.1302.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:02 GMT] [info] [<0.1303.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:02 GMT] [info] [<0.1304.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:03 GMT] [info] [<0.1305.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:03 GMT] [info] [<0.1306.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1307.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1308.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1309.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1310.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1311.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1313.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1312.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1314.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1315.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1316.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1317.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1318.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1319.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1324.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1325.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1326.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1327.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1328.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1331.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1330.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1332.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1333.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1334.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1336.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:04 GMT] [info] [<0.1337.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1338.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1339.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1340.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1342.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1343.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1344.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1345.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1346.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1349.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1350.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1351.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1352.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1353.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1356.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1357.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1358.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1359.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1360.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1364.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1365.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1366.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1367.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1368.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1371.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:06 GMT] [info] [<0.1372.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1373.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1374.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1375.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1377.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1378.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1379.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1380.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1381.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1384.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1385.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:07 GMT] [info] [<0.1386.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1387.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1388.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1391.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1392.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1393.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1394.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1395.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1396.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1397.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1398.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1399.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1400.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1401.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:08 GMT] [info] [<0.1402.0>] 107.20.107.65 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:22:10 GMT] [error] [<0.1403.0>] Uncaught error in HTTP request: {exit,
{timeout,
{gen_server,call,
[couch_query_servers,
{get_proc,
{doc,
<<"_design/glob">>,
{65,
[<<240,163,201,227,
183,207,175,159,
111,240,111,167,
222,218,198,155>>,
<<251,128,168,40,
119,96,24,88,
127,9,91,222,
218,221,221,53>>,
<<25,78,35,249,
234,136,43,44,
84,94,240,80,
208,133,143,239>>,
<<151,52,194,5,98,
125,31,190,135,
113,62,78,84,37,
167,234>>,
<<85,249,92,93,
157,233,16,203,
110,194,228,83,
205,139,216,7>>,
<<164,179,80,41,
233,21,46,119,
43,95,183,194,
12,78,12,221>>,
<<71,182,66,131,
204,89,74,48,4,
39,157,173,73,
241,173,80>>,
<<42,24,37,171,
240,44,25,122,
56,33,108,40,
203,186,113,29>>,
<<206,112,225,167,
19,107,135,127,
172,42,101,158,
26,127,151,242>>,
<<170,77,84,186,
236,32,135,8,
156,107,220,213,
214,210,193,113>>,
<<158,251,180,216,
77,52,208,144,
229,114,102,83,
249,0,135,141>>,
<<58,89,113,180,
129,152,2,151,
51,252,36,165,
229,22,203,221>>,
<<85,121,95,87,
126,65,108,215,
96,231,70,11,
217,131,59,100>>,
<<129,54,33,54,
210,171,232,125,
223,117,68,92,
29,218,172,166>>,
<<132,50,230,172,
127,90,29,102,
172,208,190,158,
156,60,198,236>>,
<<3,35,192,226,
105,177,225,253,
94,64,199,131,
242,240,26,81>>,
<<208,245,167,189,
33,114,152,203,
158,17,171,28,
199,40,186,117>>,
<<"?c®B?6?b?Z??j%?">>,
<<131,228,19,216,
99,92,56,186,
125,100,141,79,
255,30,231,91>>,
<<32,214,93,222,
20,90,19,107,
252,132,83,40,
222,228,73,95>>,
<<122,54,115,160,
174,193,11,120,
21,220,60,192,
86,14,233,32>>,
<<91,66,87,47,58,
104,58,57,137,
199,173,178,56,
150,19,99>>,
<<106,212,106,94,
211,20,54,163,
192,122,92,161,
13,40,168,170>>,
<<15,19,174,145,
210,96,205,95,
149,110,79,98,
191,200,45,11>>,
<<76,47,14,42,28,
170,175,122,20,
166,152,217,70,
46,48,244>>,
<<232,166,90,253,
193,195,118,2,
38,49,225,55,
109,85,143,104>>,
<<153,158,101,153,
35,94,203,68,
241,126,153,76,
255,97,90,104>>,
<<160,215,165,30,
245,154,153,58,
232,138,48,163,
82,7,143,223>>,
<<11,73,198,27,47,
156,174,134,93,
114,75,16,226,
190,95,99>>,
<<96,221,47,80,
116,133,84,156,
208,144,189,82,
184,133,58,151>>,
<<51,116,212,13,
157,56,17,117,
166,245,83,211,
22,30,122,24>>,
<<185,216,50,147,
119,17,198,139,
116,125,195,146,
121,199,135,89>>,
<<125,147,12,15,
63,71,73,227,16,
126,124,203,4,
40,39,205>>,
<<159,191,234,48,
7,167,30,132,
220,84,117,28,
70,15,18,167>>,
<<13,67,44,20,40,
168,172,89,57,
232,244,250,27,
167,25,175>>,
<<160,133,198,236,
94,207,78,211,
152,69,44,102,
232,130,86,31>>,
<<57,180,26,202,
42,91,57,195,28,
243,181,84,30,
162,10,95>>,
<<69,186,224,152,
99,90,20,96,124,
75,195,172,46,
59,132,72>>,
<<103,227,253,14,
65,122,221,227,
72,250,154,67,
84,22,108,37>>,
<<249,255,133,60,
60,129,163,189,
30,236,147,8,
101,143,69,36>>,
<<147,13,231,206,
175,70,60,70,
162,171,223,234,
74,107,172,220>>,
<<162,218,179,102,
237,152,137,56,
21,85,10,162,81,
83,252,205>>,
<<42,19,103,54,1,
20,141,119,192,
3,195,231,2,14,
238,141>>,
<<74,51,189,14,87,
112,149,67,228,
151,144,211,224,
65,114,176>>,
<<233,27,102,211,
69,10,0,40,130,
119,184,59,214,
119,177,60>>,
<<199,224,145,89,
164,113,176,115,
211,203,232,23,
18,132,251,215>>,
<<227,104,125,137,
157,75,70,217,
55,109,186,95,
223,255,200,30>>,
<<"\\hZ???I.8??#???\f">>,
<<159,232,209,128,
30,177,16,209,
174,246,55,0,10,
137,65,27>>,
<<24,235,143,200,
169,205,9,211,
44,250,147,29,
241,227,227,197>>,
<<192,167,96,80,
239,205,154,20,
126,194,68,231,
98,91,177,8>>,
<<98,171,183,186,
239,224,146,37,
78,15,107,105,
205,115,238,82>>,
<<200,96,19,194,
71,77,83,218,
102,101,222,161,
5,128,111,190>>,
<<75,246,251,178,
160,161,174,57,
20,190,111,96,
57,195,44,219>>,
<<208,180,240,212,
61,157,10,98,49,
10,143,255,43,
24,49,128>>,
<<98,47,36,155,
242,241,182,194,
8,85,199,8,19,
130,51,18>>,
<<110,0,193,234,
116,169,150,163,
186,132,41,80,
148,141,215,120>>,
<<137,140,52,83,
11,29,216,35,
236,45,219,194,
126,130,207,216>>,
<<113,170,126,69,
187,52,105,155,
247,167,148,26,
60,230,210,149>>,
<<133,6,115,126,
246,188,175,58,
247,148,131,113,
149,83,57,15>>,
<<141,160,59,220,
15,65,100,52,40,
218,175,242,119,
2,52,106>>,
<<242,44,70,159,
134,23,28,104,
126,52,143,45,
53,78,250,130>>,
<<28,73,80,231,
246,43,64,172,
247,232,43,24,
13,135,200,89>>,
<<190,159,8,169,
231,180,201,217,
216,83,190,209,
108,28,228,140>>,
<<7,189,31,241,
179,245,215,
219,163,224,
147,6,126,79,
192,212>>]},
{[{<<"templates">>,
{[{<<"theme">>,
<<"<!doctype html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>{{#single}}{{#post}}{{ title }}{{/post}} - {{/single}}a glob of nerdishness</title>\n\n<link rel=\"index\" title=\"a glob of nerdishness\" href=\"{{ base_url }}\">\n<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Feed\" href=\"{{ atom_url }}\">\n\n<style>\n /* http://html5doctor.com/html-5-reset-stylesheet/#comment-454 */\n body { margin:0; padding:0; }\n p { margin: 1em 0; }\n \n /* http://doctype.com/html5-reset-css#answer_43 */\n img { border: none; }\n a { outline-style: none; }\n</style>\n<style>\n body { min-width: 475px; }\n body { font-family: Palatino; }\n header { font-family: Monaco, monospace; }\n footer { margin: 0.5em; font-family: Monaco, monospace; }\n \n body > header { padding-top: 0em; }\n body > header img { float: left; height: 200px; }\n body > header.single img { height: 100px; }\n body > header p { font-size: 80%; font-style: italic; margin: 0em; padding-top: 2em; }\n body > header h1 { font-size: 250%; margin: 0em; }\n body > header h2 { font-size: 90%; font-weight: normal; margin: 0em; }\n \n body > p { clear: both; padding: 2em; }\n article { clear: both; padding: 2em 5em; max-width: 635px; }\n article { text-align: justify; line-height: 1.5em; }\n article > header { margin-bottom: 1em; }\n article > header h1 { font-size: 105%; margin: 0; }\n article > header p { font-size: 75%; margin: 0; padding: 0; text-indent: 0; }\n article .content { margin: 0 -1.5em; }\n article .content p { text-indent: 1.5em; margin: 0; }\n article .content li > p { text-indent: 0; }\n #disqus_thread { margin-top: 5em; }\n \n a:link { color: #008; }\n a:visited { color: #559; }\n a:hover { color: #900; }\n \n a:link.subtle { color: inherit; text-decoration: none; }\n a:visited.subtle { color: inherit; text-decoration: none; }\n a:hover.subtle { color: #008; text-decoration: underline; }\n \n a:link.expected { color: inherit; }\n a:visited.expected { color: inherit; }\n a:hover.expected { color: #008; }\n</style>\n</head>\n<body>\n\n<header{{#single}} class=\"single\"{{/single}}>\n<img src=\"{{ base_url}}/resource/_design/glob/logo.png\" alt>\n{{#single}}\n<h1><a href=\"{{ base_url }}\" rel=\"archives\" class=\"subtle\">a glob of nerd­ish­ness</a></h1>\n{{/single}}{{^single}}\n<p>\n<a href=\"http://exts.ch\" class=\"subtle\">natevw</a> proudly presents:\n<h1>a glob of nerd­ish­ness</h1>\n<h2>powered by work over time.</h2>\n{{/single}}\n</header>\n\n{{# post }}\n<article>\n<header>\n{{#single}}\n<h1>{{ title }}</h1>\n<p>\npublished by <a href=\"http://exts.ch\" class=\"subtle\">natevw</a> on <a href=\"{{ url }}\" rel=\"bookmark\" class=\"subtle\"><time datetime=\"{{ published }}\" pubdate>{{ published_human }}</time></a>\n{{/single}}{{^single}}\n<time datetime=\"{{ published }}\" pubdate>{{ published_human }}</time>\n<h1><a href=\"{{ url }}\" rel=\"bookmark\" class=\"expected\">{{ title }}</a></h1>\n{{/single}}\n</header>\n\n<section class=\"content\">\n{{{ html_content }}}\n</section>\n\n{{^summary}}\n{{#single}}<div id=\"disqus_thread\"></div><script>var disqus_identifier = '{{ _id }}';</script>{{/single}}\n{{^single}}<a href=\"{{ url }}#disqus_thread\" data-disqus-identifier=\"{{ _id }}\">comments</a>{{/single}}\n{{/summary}}\n</article>\n{{/ post }}\n\n{{^single}}{{^summary}}{{#lastRow}}\n<p>\n<a href=\"{{ base_url }}?startkey={{ key }}&amp;startkey_docid={{ id }}&amp;skip=1\" rel=\"next\">Older posts</a><br>\n<a href=\"{{ base_url }}/all\" rel=\"archives\">All posts</a>\n{{/lastRow}}{{/summary}}{{/single}}\n\n{{#summary}}{{#lastRow}}\n<p>\n<a href=\"{{ base_url }}\">Recent posts</a>\n{{/lastRow}}{{/summary}}\n\n{{^lastRow}}\n<!-- this really should be an actual lower-level 404 instead -->\n<p style=\"font-size: 125%;\">\nNo matching post{{^single}}s{{/single}} found.\n<p>\n<a href=\"{{ base_url }}\">Recent posts</a><br>\n<a href=\"http://www.extinguishedscholar.com/wpglob/\">Archive of old blog</a>\n{{/lastRow}}\n\n<footer>\n\n<small>Copyright © 2012 Nathan Vander Wilt. All rights reserved. Limit one offer per coupon.</small>\n</footer>\n\n<script type=\"text/javascript\">\n var disqus_shortname = 'nerdglob'; // required: replace example with your forum shortname\n //var disqus_developer = 1;\n</script>\n{{#single}}\n<script type=\"text/javascript\">\n /* * * DON'T EDIT BELOW THIS LINE * * */\n (function() {\n var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;\n dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';\n (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);\n })();\n</script>\n<noscript>Please enable JavaScript to view the <a href=\"http://disqus.com/?ref_noscript\">comments powered by Disqus.</a></noscript>\n<a href=\"http://disqus.com\" class=\"dsq-brlink\">blog comments powered by <span class=\"logo-disqus\">Disqus</span></a>\n{{/single}}\n{{^single}}\n<script type=\"text/javascript\">\n /* * * DON'T EDIT BELOW THIS LINE * * */\n (function () {\n var s = document.createElement('script'); s.async = true;\n s.type = 'text/javascript';\n s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';\n (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);\n }());\n</script>\n{{/single}}\n</body>\n</html>">>}]}},
{<<"rewrites">>,
[{[{<<"to">>,
<<"_list/posts/by_date">>},
{<<"from">>,
<<"/">>},
{<<"query">>,
{[{<<"descending">>,
<<"true">>},
{<<"reduce">>,
<<"false">>},
{<<"limit">>,
<<"5">>},
{<<"include_docs">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"_list/posts/by_date">>},
{<<"from">>,
<<"/all">>},
{<<"query">>,
{[{<<"descending">>,
<<"true">>},
{<<"reduce">>,
<<"false">>},
{<<"include_docs">>,
<<"true">>},
{<<"summary">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"../../:doc_id/*">>},
{<<"from">>,
<<"/resource/:doc_id/*">>}]},
{[{<<"to">>,
<<"_list/posts/by_path">>},
{<<"from">>,
<<"/:path1">>},
{<<"query">>,
{[{<<"key">>,
[<<":path1">>]},
{<<"include_docs">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"_list/posts/by_path">>},
{<<"from">>,
<<"/:path1/:path2">>},
{<<"query">>,
{[{<<"key">>,
[<<":path1">>,
<<":path2">>]},
{<<"include_docs">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"_list/posts/by_path">>},
{<<"from">>,
<<"/:path1/:path2/:path3">>},
{<<"query">>,
{[{<<"key">>,
[<<":path1">>,
<<":path2">>,
<<":path3">>]},
{<<"include_docs">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"_list/posts/by_path">>},
{<<"from">>,
<<"/:path1/:path2/:path3/:path4">>},
{<<"query">>,
{[{<<"key">>,
[<<":path1">>,
<<":path2">>,
<<":path3">>,
<<":path4">>]},
{<<"include_docs">>,
<<"true">>}]}}]}]},
{<<"lib">>,
{[{<<"markdown">>,
<<"// Released under MIT license\n// Copyright (c) 2009-2010 Dominic Baggott\n// Copyright (c) 2009-2010 Ash Berlin\n// Copyright (c) 2011 Christoph Dorn <christoph@christophdorn.com> (http://www.christophdorn.com)\n\n(function( expose ) {\n\n/**\n * class Markdown\n *\n * Markdown processing in Javascript done right. We have very particular views\n * on what constitutes 'right' which include:\n *\n * - produces well-formed HTML (this means that em and strong nesting is\n * important)\n *\n * - has an intermediate representation to allow processing of parsed data (We\n * in fact have two, both as [JsonML]: a markdown tree and an HTML tree).\n *\n * - is easily extensible to add new dialects without having to rewrite the\n * entire parsing mechanics\n *\n * - has a good test suite\n *\n * This implementation fulfills all of these (except that the test suite could\n * do with expanding to automatically run all the fixtures from other Markdown\n * implementations.)\n *\n * ##### Intermediate Representation\n *\n * *TODO* Talk about this :) Its JsonML, but document the node names we use.\n *\n * [JsonML]: http://jsonml.org/ \"JSON Markup Language\"\n **/\nvar Markdown = expose.Markdown = function Markdown(dialect) {\n switch (typeof dialect) {\n case \"undefined\":\n this.dialect = Markdown.dialects.Gruber;\n break;\n case \"object\":\n this.dialect = dialect;\n break;\n default:\n if (dialect in Markdown.dialects) {\n this.dialect = Markdown.dialects[dialect];\n }\n else {\n throw new Error(\"Unknown Markdown dialect '\" + String(dialect) + \"'\");\n }\n break;\n }\n this.em_state = [];\n this.strong_state = [];\n this.debug_indent = \"\";\n}\n\n/**\n * parse( markdown, [dialect] ) -> JsonML\n * - markdown (String): markdown string to parse\n * - dialect (String | Dialect): the dialect to use, defaults to gruber\n *\n * Parse `markdown` and return a markdown document as a Markdown.JsonML tree.\n **/\nexpose.parse = function( source, dialect ) {\n // dialect will default if undefined\n var md = new Markdown( dialect );\n return md.toTree( source );\n}\n\n/**\n * toHTML( markdown, [dialect] ) -> String\n * toHTML( md_tree ) -> String\n * - markdown (String): markdown string to parse\n * - md_tree (Markdown.JsonML): parsed markdown tree\n *\n * Take markdown (either as a string or as a JsonML tree) and run it through\n * [[toHTMLTree]] then turn it into a well-formated HTML fragment.\n **/\nexpose.toHTML = function toHTML( source , dialect , options ) {\n var input = expose.toHTMLTree( source , dialect , options );\n\n return expose.renderJsonML( input );\n}\n\n/**\n * toHTMLTree( markdown, [dialect] ) -> JsonML\n * toHTMLTree( md_tree ) -> JsonML\n * - markdown (String): markdown string to parse\n * - dialect (String | Dialect): the dialect to use, defaults to gruber\n * - md_tree (Markdown.JsonML): parsed markdown tree\n *\n * Turn markdown into HTML, represented as a JsonML tree. If a string is given\n * to this function, it is first parsed into a markdown tree by calling\n * [[parse]].\n **/\nexpose.toHTMLTree = function toHTMLTree( input, dialect , options ) {\n // convert string input to an MD tree\n if ( typeof input ===\"string\" ) input = this.parse( input, dialect );\n\n // Now convert the MD tree to an HTML tree\n\n // remove references from the tree\n var attrs = extract_attr( input ),\n refs = {};\n\n if ( attrs && attrs.references ) {\n refs = attrs.references;\n }\n\n var html = convert_tree_to_html( input, refs , options );\n merge_text_nodes( html );\n return html;\n}\n\nvar mk_block = Markdown.mk_block = function(block, trail, line) {\n // Be helpful for default case in tests.\n if ( arguments.length == 1 ) trail = \"\\n\\n\";\n\n var s = new String(block);\n s.trailing = trail;\n // To make it clear its not just a string\n s.toSource = function() {\n return \"Markdown.mk_block( \" +\n uneval(block) +\n \", \" +\n uneval(trail) +\n \", \" +\n uneval(line) +\n \" )\"\n }\n\n if (line != undefined)\n s.lineNumber = line;\n\n return s;\n}\n\nfunction count_lines( str ) {\n var n = 0, i = -1;;\n while ( ( i = str.indexOf('\\n', i+1) ) != -1) n++;\n return n;\n}\n\n\n// workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n// see also: https://github.com/andrewplummer/Sugar/issues/27\nfunction _exec(re, s) {\n return RegExp.prototype.exec.call(re, s);\n}\nfunction _test(re, s) {\n return RegExp.prototype.test.call(re, s);\n}\nfunction _source(re) {\n return (typeof re == 'string') ? re : RegExp.prototype.toString.call(re);\n}\n\n// Internal - split source into rough blocks\nMarkdown.prototype.split_blocks = function splitBlocks( input, startLine ) {\n // [\\s\\S] matches _anything_ (newline or space)\n var re = /([\\s\\S]+?)($|\\n(?:\\s*\\n|$)+)/g,\n blocks = [],\n m;\n\n var line_no = 1;\n\n if ( ( m = _exec(/^(\\s*\\n)/, input) ) != null ) {\n // skip (but count) leading blank lines\n line_no += count_lines( m[0] );\n re.lastIndex = m[0].length;\n }\n\n while ( ( m = _exec(re, input) ) != null ) {\n blocks.push( mk_block( m[1], m[2], line_no ) );\n line_no += count_lines( m[0] );\n }\n\n return blocks;\n}\n\n/**\n * Markdown#processBlock( block, next ) -> undefined | [ JsonML, ... ]\n * - block (String): the block to process\n * - next (Array): the following blocks\n *\n * Process `block` and return an array of JsonML nodes representing `block`.\n *\n * It does this by asking each block level function in the dialect to process\n * the block until one can. Succesful handling is indicated by returning an\n * array (with zero or more JsonML nodes), failure by a false value.\n *\n * Blocks handlers are responsible for calling [[Markdown#processInline]]\n * themselves as appropriate.\n *\n * If the blocks were split incorrectly or adjacent blocks need collapsing you\n * can adjust `next` in place using shift/splice etc.\n *\n * If any of this default behaviour is not right for the dialect, you can\n * define a `__call__` method on the dialect that will get invoked to handle\n * the block processing.\n */\nMarkdown.prototype.processBlock = function processBlock( block, next ) {\n var cbs = this.dialect.block,\n ord = cbs.__order__;\n\n if ( \"__call__\" in cbs ) {\n return cbs.__call__.call(this, block, next);\n }\n\n for ( var i = 0; i < ord.length; i++ ) {\n //D:this.debug( \"Testing\", ord[i] );\n var res = cbs[ ord[i] ].call( this, block, next );\n if ( res ) {\n //D:this.debug(\" matched\");\n if ( !isArray(res) || ( res.length > 0 && !( isArray(res[0]) ) ) )\n this.debug(ord[i], \"didn't return a proper array\");\n //D:this.debug( \"\" );\n return res;\n }\n }\n\n // Uhoh! no match! Should we throw an error?\n return [];\n}\n\nMarkdown.prototype.processInline = function processInline( block ) {\n return this.dialect.inline.__call__.call( this, String( block ) );\n}\n\n/**\n * Markdown#toTree( source ) -> JsonML\n * - source (String): markdown source to parse\n *\n * Parse `source` into a JsonML tree representing the markdown document.\n **/\n// custom_tree means set this.tree to `custom_tree` and restore old value on return\nMarkdown.prototype.toTree = function toTree( source, custom_root ) {\n var blocks = source instanceof Array\n ? source\n : this.split_blocks( source );\n\n // Make tree a member variable so its easier to mess with in extensions\n var old_tree = this.tree;\n try {\n this.tree = custom_root || this.tree || [ \"markdown\" ];\n\n blocks:\n while ( blocks.length ) {\n var b = this.processBlock( blocks.shift(), blocks );\n\n // Reference blocks and the like won't return any content\n if ( !b.length ) continue blocks;\n\n this.tree.push.apply( this.tree, b );\n }\n return this.tree;\n }\n finally {\n if ( custom_root )\n this.tree = old_tree;\n }\n\n}\n\n// Noop by default\nMarkdown.prototype.debug = function () {\n var args = Array.prototype.slice.call( arguments);\n args.unshift(this.debug_indent);\n if (typeof print !== \"undefined\")\n print.apply( print, args );\n if (typeof console !== \"undefined\" && typeof console.log !== \"undefined\")\n console.log.apply( null, args );\n}\n\nMarkdown.prototype.loop_re_over_block = function( re, block, cb ) {\n // Dont use /g regexps with this\n var m,\n b = block.valueOf();\n\n while ( b.length && (m = _exec(re, b) ) != null) {\n b = b.substr( m[0].length );\n cb.call(this, m);\n }\n return b;\n}\n\n/**\n * Markdown.dialects\n *\n * Namespace of built-in dialects.\n **/\nMarkdown.dialects = {};\n\n/**\n * Markdown.dialects.Gruber\n *\n * The default dialect that follows the rules set out by John Gruber's\n * markdown.pl as closely as possible. Well actually we follow the behaviour of\n * that script which in some places is not exactly what the syntax web page\n * says.\n **/\nMarkdown.dialects.Gruber = {\n block: {\n atxHeader: function atxHeader( block, next ) {\n var m = block.match( /^(#{1,6})\\s*(.*?)\\s*#*\\s*(?:\\n|$)/ );\n\n if ( !m ) return undefined;\n\n var header = [ \"header\", { level: m[ 1 ].length } ];\n Array.prototype.push.apply(header, this.processInline(m[ 2 ]));\n\n if ( m[0].length < block.length )\n next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );\n\n return [ header ];\n },\n\n setextHeader: function setextHeader( block, next ) {\n var m = block.match( /^(.*)\\n([-=])\\2\\2+(?:\\n|$)/ );\n\n if ( !m ) return undefined;\n\n var level = ( m[ 2 ] === \"=\" ) ? 1 : 2;\n var header = [ \"header\", { level : level }, m[ 1 ] ];\n\n if ( m[0].length < block.length )\n next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );\n\n return [ header ];\n },\n\n code: function code( block, next ) {\n // | Foo\n // |bar\n // should be a code block followed by a paragraph. Fun\n //\n // There might also be adjacent code block to merge.\n\n var ret = [],\n re = /^(?: {0,3}\\t| {4})(.*)\\n?/,\n lines;\n\n // 4 spaces + content\n var m = block.match( re );\n\n if ( !m ) return undefined;\n\n block_search:\n do {\n // Now pull out the rest of the lines\n var b = this.loop_re_over_block(\n re, block.valueOf(), function( m ) { ret.push( m[1] ) } );\n\n if (b.length) {\n // Case alluded to in first comment. push it back on as a new block\n next.unshift( mk_block(b, block.trailing) );\n break block_search;\n }\n else if (next.length) {\n // Check the next block - it might be code too\n var m = next[0].match( re );\n\n if ( !m ) break block_search;\n\n // Pull how how many blanks lines follow - minus two to account for .join\n ret.push ( block.trailing.replace(/[^\\n]/g, '').substring(2) );\n\n block = next.shift();\n }\n else\n break block_search;\n } while (true);\n\n return [ [ \"code_block\", ret.join(\"\\n\") ] ];\n },\n\n horizRule: function horizRule( block, next ) {\n // this needs to find any hr in the block to handle abutting blocks\n var m = block.match( /^(?:([\\s\\S]*?)\\n)?[ \\t]*([-_*])(?:[ \\t]*\\2){2,}[ \\t]*(?:\\n([\\s\\S]*))?$/ );\n\n if ( !m ) {\n return undefined;\n }\n\n var jsonml = [ [ \"hr\" ] ];\n\n // if there's a leading abutting block, process it\n if ( m[ 1 ] ) {\n jsonml.unshift.apply( jsonml, this.processBlock( m[ 1 ], [] ) );\n }\n\n // if there's a trailing abutting block, stick it into next\n if ( m[ 3 ] ) {\n next.unshift( mk_block( m[ 3 ] ) );\n }\n\n return jsonml;\n },\n\n // There are two types of lists. Tight and loose. Tight lists have no whitespace\n // between the items (and result in text just in the <li>) and loose lists,\n // which have an empty line between list items, resulting in (one or more)\n // paragraphs inside the <li>.\n //\n // There are all sorts weird edge cases about the original markdown.pl's\n // handling of lists:\n //\n // * Nested lists are supposed to be indented by four chars per level. But\n // if they aren't, you can get a nested list by indenting by less than\n // four so long as the indent doesn't match an indent of an existing list\n // item in the 'nest stack'.\n //\n // * The type of the list (bullet or number) is controlled just by the\n // first item at the indent. Subsequent changes are ignored unless they\n // are for nested lists\n //\n lists: (function( ) {\n // Use a closure to hide a few variables.\n var any_list = \"[*+-]|\\\\d\\\\.\",\n bullet_list = /[*+-]/,\n number_list = /\\d+\\./,\n // Capture leading indent as it matters for determining nested lists.\n is_list_re = new RegExp( \"^( {0,3})(\" + any_list + \")[ \\t]+\" ),\n indent_re = \"(?: {0,3}\\\\t| {4})\";\n\n // TODO: Cache this regexp for certain depths.\n // Create a regexp suitable for matching an li for a given stack depth\n function regex_for_depth( depth ) {\n\n return new RegExp(\n // m[1] = indent, m[2] = list_type\n \"(?:^(\" + indent_re + \"{0,\" + depth + \"} {0,3})(\" + any_list + \")\\\\s+)|\" +\n // m[3] = cont\n \"(^\" + indent_re + \"{0,\" + (depth-1) + \"}[ ]{0,4})\"\n );\n }\n function expand_tab( input ) {\n return input.replace( / {0,3}\\t/g, \" \" );\n }\n\n // Add inline content `inline` to `li`. inline comes from processInline\n // so is an array of content\n function add(li, loose, inline, nl) {\n if (loose) {\n li.push( [ \"para\" ].concat(inline) );\n return;\n }\n // Hmmm, should this be any block level element or just paras?\n var add_to = li[li.length -1] instanceof Array && li[li.length - 1][0] == \"para\"\n ? li[li.length -1]\n : li;\n\n // If there is already some content in this list, add the new line in\n if (nl && li.length > 1) inline.unshift(nl);\n\n for (var i=0; i < inline.length; i++) {\n var what = inline[i],\n is_str = typeof what == \"string\";\n if (is_str && add_to.length > 1 && typeof add_to[add_to.length-1] == \"string\" )\n {\n add_to[ add_to.length-1 ] += what;\n }\n else {\n add_to.push( what );\n }\n }\n }\n\n // contained means have an indent greater than the current one. On\n // *every* line in the block\n function get_contained_blocks( depth, blocks ) {\n\n var re = new RegExp( \"^(\" + indent_re + \"{\" + depth + \"}.*?\\\\n?)*$\" ),\n replace = new RegExp(\"^\" + indent_re + \"{\" + depth + \"}\", \"gm\"),\n ret = [];\n\n while ( blocks.length > 0 ) {\n if ( _exec(re, blocks[0] ) ) {\n var b = blocks.shift(),\n // Now remove that indent\n x = b.replace( replace, \"\");\n\n ret.push( mk_block( x, b.trailing, b.lineNumber ) );\n }\n break;\n }\n return ret;\n }\n\n // passed to stack.forEach to turn list items up the stack into paras\n function paragraphify(s, i, stack) {\n var list = s.list;\n var last_li = list[list.length-1];\n\n if (last_li[1] instanceof Array && last_li[1][0] == \"para\") {\n return;\n }\n if (i+1 == stack.length) {\n // Last stack frame\n // Keep the same array, but replace the contents\n last_li.push( [\"para\"].concat( last_li.splice(1) ) );\n }\n else {\n var sublist = last_li.pop();\n last_li.push( [\"para\"].concat( last_li.splice(1) ), sublist );\n }\n }\n\n // The matcher function\n return function( block, next ) {\n var m = block.match( is_list_re );\n if ( !m ) return undefined;\n\n function make_list( m ) {\n var list = _exec(bullet_list, m[2] )\n ? [\"bulletlist\"]\n : [\"numberlist\"];\n\n stack.push( { list: list, indent: m[1] } );\n return list;\n }\n\n\n var stack = [], // Stack of lists for nesting.\n list = make_list( m ),\n last_li,\n loose = false,\n ret = [ stack[0].list ];\n\n // Loop to search over block looking for inner block elements and loose lists\n loose_search:\n while( true ) {\n // Split into lines preserving new lines at end of line\n var lines = block.split( /(?=\\n)/ );\n\n // We have to grab all lines for a li and call processInline on them\n // once as there are some inline things that can span lines.\n var li_accumulate = \"\";\n\n // Loop over the lines in this block looking for tight lists.\n tight_search:\n for (var line_no=0; line_no < lines.length; line_no++) {\n var nl = \"\",\n l = lines[line_no].replace(/^\\n/, function(n) { nl = n; return \"\" });\n\n // TODO: really should cache this\n var line_re = regex_for_depth( stack.length );\n\n m = l.match( line_re );\n //print( \"line:\", uneval(l), \"\\nline match:\", uneval(m) );\n\n // We have a list item\n if ( m[1] !== undefined ) {\n // Process the previous list item, if any\n if ( li_accumulate.length ) {\n add( last_li, loose, this.processInline( li_accumulate ), nl );\n // Loose mode will have been dealt with. Reset it\n loose = false;\n li_accumulate = \"\";\n }\n\n m[1] = expand_tab( m[1] );\n var wanted_depth = Math.floor(m[1].length/4)+1;\n //print( \"want:\", wanted_depth, \"stack:\", stack.length);\n if ( wanted_depth > stack.length ) {\n // Deep enough for a nested list outright\n //print ( \"new nested list\" );\n list = make_list( m );\n last_li.push( list );\n last_li = list[1] = [ \"listitem\" ];\n }\n else {\n // We aren't deep enough to be strictly a new level. This is\n // where Md.pl goes nuts. If the indent matches a level in the\n // stack, put it there, else put it one deeper then the\n // wanted_depth deserves.\n var found = stack.some(function(s, i) {\n if ( s.indent != m[1] ) return false;\n list = s.list; // Found the level we want\n stack.splice(i+1); // Remove the others\n //print(\"found\");\n return true; // And stop looping\n });\n\n if (!found) {\n //print(\"not found. l:\", uneval(l));\n wanted_depth++;\n if (wanted_depth <= stack.length) {\n stack.splice(wanted_depth);\n //print(\"Desired depth now\", wanted_depth, \"stack:\", stack.length);\n list = stack[wanted_depth-1].list;\n //print(\"list:\", uneval(list) );\n }\n else {\n //print (\"made new stack for messy indent\");\n list = make_list(m);\n last_li.push(list);\n }\n }\n\n //print( uneval(list), \"last\", list === stack[stack.length-1].list );\n last_li = [ \"listitem\" ];\n list.push(last_li);\n } // end depth of shenegains\n nl = \"\";\n }\n\n // Add content\n if (l.length > m[0].length) {\n li_accumulate += nl + l.substr( m[0].length );\n }\n } // tight_search\n\n if ( li_accumulate.length ) {\n add( last_li, loose, this.processInline( li_accumulate ), nl );\n // Loose mode will have been dealt with. Reset it\n loose = false;\n li_accumulate = \"\";\n }\n\n // Look at the next block - we might have a loose list. Or an extra\n // paragraph for the current li\n var contained = get_contained_blocks( stack.length, next );\n\n // Deal with code blocks or properly nested lists\n if (contained.length > 0) {\n // Make sure all listitems up the stack are paragraphs\n stack.forEach( paragraphify, this );\n\n last_li.push.apply( last_li, this.toTree( contained, [] ) );\n }\n\n var next_block = next[0] && next[0].valueOf() || \"\";\n\n if ( next_block.match(is_list_re) || next_block.match( /^ / ) ) {\n block = next.shift();\n\n // Check for an HR following a list: features/lists/hr_abutting\n var hr = this.dialect.block.horizRule( block, next );\n\n if (hr) {\n ret.push.apply(ret, hr);\n break;\n }\n\n // Make sure all listitems up the stack are paragraphs\n stack.forEach( paragraphify , this );\n\n loose = true;\n continue loose_search;\n }\n break;\n } // loose_search\n\n return ret;\n }\n })(),\n\n blockquote: function blockquote( block, next ) {\n if ( !block.match( /^>/m ) )\n return undefined;\n\n var jsonml = [];\n\n // separate out the leading abutting block, if any\n if ( block[ 0 ] != \">\" ) {\n var lines = block.split( /\\n/ ),\n prev = [];\n\n // keep shifting lines until you find a crotchet\n while ( lines.length && lines[ 0 ][ 0 ] != \">\" ) {\n prev.push( lines.shift() );\n }\n\n // reassemble!\n block = lines.join( \"\\n\" );\n jsonml.push.apply( jsonml, this.processBlock( prev.join( \"\\n\" ), [] ) );\n }\n\n // if the next block is also a blockquote merge it in\n while ( next.length && next[ 0 ][ 0 ] == \">\" ) {\n var b = next.shift();\n block += block.trailing + b;\n block.trailing = b.trailing;\n }\n\n // Strip off the leading \"> \" and re-process as a block.\n var input = block.replace( /^> ?/gm, '' ),\n old_tree = this.tree;\n jsonml.push( this.toTree( input, [ \"blockquote\" ] ) );\n\n return jsonml;\n },\n\n referenceDefn: function referenceDefn( block, next) {\n var re = /^\\s*\\[(.*?)\\]:\\s*(\\S+)(?:\\s+(?:(['\"])(.*?)\\3|\\((.*?)\\)))?\\n?/;\n // interesting matches are [ , ref_id, url, , title, title ]\n\n if ( !block.match(re) )\n return undefined;\n\n // make an attribute node if it doesn't exist\n if ( !extract_attr( this.tree ) ) {\n this.tree.splice( 1, 0, {} );\n }\n\n var attrs = extract_attr( this.tree );\n\n // make a references hash if it doesn't exist\n if ( attrs.references === undefined ) {\n attrs.references = {};\n }\n\n var b = this.loop_re_over_block(re, block, function( m ) {\n\n if ( m[2] && m[2][0] == '<' && m[2][m[2].length-1] == '>' )\n m[2] = m[2].substring( 1, m[2].length - 1 );\n\n var ref = attrs.references[ m[1].toLowerCase() ] = {\n href: m[2]\n };\n\n if (m[4] !== undefined)\n ref.title = m[4];\n else if (m[5] !== undefined)\n ref.title = m[5];\n\n } );\n\n if (b.length)\n next.unshift( mk_block( b, block.trailing ) );\n\n return [];\n },\n\n para: function para( block, next ) {\n // everything's a para!\n return [ [\"para\"].concat( this.processInline( block ) ) ];\n }\n }\n}\n\nMarkdown.dialects.Gruber.inline = {\n __call__: function inline( text, patterns ) {\n // Hmmm - should this function be directly in Md#processInline, or\n // conversely, should Md#processBlock be moved into block.__call__ too\n var out = [ ],\n m,\n // Look for the next occurange of a special character/pattern\n re = new RegExp( \"([\\\\s\\\\S]*?)(\" + _source(patterns) + \")\", \"g\" ),\n lastIndex = 0;\n\n //D:var self = this;\n //D:self.debug(\"processInline:\", uneval(text) );\n function add(x) {\n //D:self.debug(\" adding output\", uneval(x));\n if (typeof x == \"string\" && typeof out[out.length-1] == \"string\")\n out[ out.length-1 ] += x;\n else\n out.push(x);\n }\n\n while ( ( m = _exec(re, text) ) != null) {\n if ( m[1] ) add( m[1] ); // Some un-interesting text matched\n else m[1] = { length: 0 }; // Or there was none, but make m[1].length == 0\n\n var res;\n if ( m[2] in this.dialect.inline ) {\n res = this.dialect.inline[ m[2] ].call(\n this,\n text.substr( m.index + m[1].length ), m, out );\n }\n // Default for now to make dev easier. just slurp special and output it.\n res = res || [ m[2].length, m[2] ];\n\n var len = res.shift();\n // Update how much input was consumed\n re.lastIndex += ( len - m[2].length );\n\n // Add children\n res.forEach(add);\n\n lastIndex = re.lastIndex;\n }\n\n // Add last 'boring' chunk\n if ( text.length > lastIndex )\n add( text.substr( lastIndex ) );\n\n return out;\n },\n\n \"\\\\\": function escaped( text ) {\n // [ length of input processed, node/children to add... ]\n // Only esacape: \\ ` * _ { } [ ] ( ) # * + - . !\n if ( text.match( /^\\\\[\\\\`\\*_{}\\[\\]()#\\+.!\\-]/ ) )\n return [ 2, text[1] ];\n else\n // Not an esacpe\n return [ 1, \"\\\\\" ];\n },\n\n \"![\": function image( text ) {\n // ![Alt text](/path/to/img.jpg \"Optional title\")\n // 1 2 3 4 <--- captures\n var m = text.match( /^!\\[(.*?)\\][ \\t]*\\([ \\t]*(\\S*)(?:[ \\t]+([\"'])(.*?)\\3)?[ \\t]*\\)/ );\n\n if ( m ) {\n if ( m[2] && m[2][0] == '<' && m[2][m[2].length-1] == '>' )\n m[2] = m[2].substring( 1, m[2].length - 1 );\n\n m[2] == this.dialect.inline.__call__.call( this, m[2], /\\\\/ )[0];\n\n var attrs = { alt: m[1], href: m[2] || \"\" };\n if ( m[4] !== undefined)\n attrs.title = m[4];\n\n return [ m[0].length, [ \"img\", attrs ] ];\n }\n\n // ![Alt text][id]\n m = text.match( /^!\\[(.*?)\\][ \\t]*\\[(.*?)\\]/ );\n\n if ( m ) {\n // We can't check if the reference is known here as it likely wont be\n // found till after. Check it in md tree->hmtl tree conversion\n return [ m[0].length, [ \"img_ref\", { alt: m[1], ref: m[2].toLowerCase(), text: m[0] } ] ];\n }\n\n // Just consume the '!['\n return [ 2, \"![\" ];\n },\n\n \"[\": function link( text ) {\n // [link text](/path/to/img.jpg \"Optional title\")\n // 1 2 3 4 <--- captures\n var m = text.match( /^\\[([\\s\\S]*?)\\][ \\t]*\\([ \\t]*(\\S+)(?:[ \\t]+([\"'])(.*?)\\3)?[ \\t]*\\)/ );\n\n if ( m ) {\n if ( m[2] && m[2][0] == '<' && m[2][m[2].length-1] == '>' )\n m[2] = m[2].substring( 1, m[2].length - 1 );\n\n // Process escapes only\n m[2] = this.dialect.inline.__call__.call( this, m[2], /\\\\/ )[0];\n\n var attrs = { href: m[2] || \"\" };\n if ( m[4] !== undefined)\n attrs.title = m[4];\n\n var link = [ \"link\", attrs ];\n Array.prototype.push.apply( link, this.processInline( m[1] ) );\n return [ m[0].length, link ];\n }\n\n // [Alt text][id]\n // [Alt text] [id]\n // [id]\n m = text.match( /^\\[([\\s\\S]*?)\\](?: ?\\[(.*?)\\])?/ );\n\n if ( m ) {\n // [id] case, text == id\n if ( m[2] === undefined || m[2] === \"\" ) m[2] = m[1];\n\n attrs = { ref: m[ 2 ].toLowerCase(), original: m[ 0 ] };\n link = [ \"link_ref\", attrs ];\n Array.prototype.push.apply( link, this.processInline( m[1] ) );\n\n // We can't check if the reference is known here as it likely wont be\n // found till after. Check it in md tree->hmtl tree conversion.\n // Store the original so that conversion can revert if the ref isn't found.\n return [\n m[ 0 ].length,\n link\n ];\n }\n\n // Just consume the '['\n return [ 1, \"[\" ];\n },\n\n\n \"<\": function autoLink( text ) {\n var m;\n\n if ( ( m = text.match( /^<(?:((https?|ftp|mailto):[^>]+)|(.*?@.*?\\.[a-zA-Z]+))>/ ) ) != null ) {\n if ( m[3] ) {\n return [ m[0].length, [ \"link\", { href: \"mailto:\" + m[3] }, m[3] ] ];\n\n }\n else if ( m[2] == \"mailto\" ) {\n return [ m[0].length, [ \"link\", { href: m[1] }, m[1].substr(\"mailto:\".length ) ] ];\n }\n else\n return [ m[0].length, [ \"link\", { href: m[1] }, m[1] ] ];\n }\n\n return [ 1, \"<\" ];\n },\n\n \"`\": function inlineCode( text ) {\n // Inline code block. as many backticks as you like to start it\n // Always skip over the opening ticks.\n var m = text.match( /(`+)(([\\s\\S]*?)\\1)/ );\n\n if ( m && m[2] )\n return [ m[1].length + m[2].length, [ \"inlinecode\", m[3] ] ];\n else {\n // TODO: No matching end code found - warn!\n return [ 1, \"`\" ];\n }\n },\n\n \" \\n\": function lineBreak( text ) {\n return [ 3, [ \"linebreak\" ] ];\n }\n\n}\n\n// Meta Helper/generator method for em and strong handling\nfunction strong_em( tag, md ) {\n\n var state_slot = tag + \"_state\",\n other_slot = tag == \"strong\" ? \"em_state\" : \"strong_state\";\n\n function CloseTag(len) {\n this.len_after = len;\n this.name = \"close_\" + md;\n }\n\n return function ( text, orig_match ) {\n\n if (this[state_slot][0] == md) {\n // Most recent em is of this type\n //D:this.debug(\"closing\", md);\n this[state_slot].shift();\n\n // \"Consume\" everything to go back to the recrusion in the else-block below\n return[ text.length, new CloseTag(text.length-md.length) ];\n }\n else {\n // Store a clone of the em/strong states\n var other = this[other_slot].slice(),\n state = this[state_slot].slice();\n\n this[state_slot].unshift(md);\n\n //D:this.debug_indent += \" \";\n\n // Recurse\n var res = this.processInline( text.substr( md.length ) );\n //D:this.debug_indent = this.debug_indent.substr(2);\n\n var last = res[res.length - 1];\n\n //D:this.debug(\"processInline from\", tag + \": \", uneval( res ) );\n\n var check = this[state_slot].shift();\n if (last instanceof CloseTag) {\n res.pop();\n // We matched! Huzzah.\n var consumed = text.length - last.len_after;\n return [ consumed, [ tag ].concat(res) ];\n }\n else {\n // Restore the state of the other kind. We might have mistakenly closed it.\n this[other_slot] = other;\n this[state_slot] = state;\n\n // We can't reuse the processed result as it could have wrong parsing contexts in it.\n return [ md.length, md ];\n }\n }\n } // End returned function\n}\n\nMarkdown.dialects.Gruber.inline[\"**\"] = strong_em(\"strong\", \"**\");\nMarkdown.dialects.Gruber.inline[\"__\"] = strong_em(\"strong\", \"__\");\nMarkdown.dialects.Gruber.inline[\"*\"] = strong_em(\"em\", \"*\");\nMarkdown.dialects.Gruber.inline[\"_\"] = strong_em(\"em\", \"_\");\n\n\n// Build default order from insertion order.\nMarkdown.buildBlockOrder = function(d) {\n var ord = [];\n for ( var i in d ) {\n if ( i == \"__order__\" || i == \"__call__\" ) continue;\n ord.push( i );\n }\n d.__order__ = ord;\n}\n\n// Build patterns for inline matcher\nMarkdown.buildInlinePatterns = function(d) {\n var patterns = [];\n\n for ( var i in d ) {\n if (i == \"__call__\") continue;\n var l = i.replace( /([\\\\.*+?|()\\[\\]{}])/g, \"\\\\$1\" )\n .replace( /\\n/, \"\\\\n\" );\n patterns.push( i.length == 1 ? l : \"(?:\" + l + \")\" );\n }\n\n patterns = patterns.join(\"|\");\n //print(\"patterns:\", uneval( patterns ) );\n\n var fn = d.__call__;\n d.__call__ = function(text, pattern) {\n if (pattern != undefined)\n return fn.call(this, text, pattern);\n else\n return fn.call(this, text, patterns);\n }\n}\n\n// Helper function to make sub-classing a dialect easier\nMarkdown.subclassDialect = function( d ) {\n function Block() {};\n Block.prototype = d.block;\n function Inline() {};\n Inline.prototype = d.inline;\n\n return { block: new Block(), inline: new Inline() };\n}\n\nMarkdown.buildBlockOrder ( Markdown.dialects.Gruber.block );\nMarkdown.buildInlinePatterns( Markdown.dialects.Gruber.inline );\n\nMarkdown.dialects.Maruku = Markdown.subclassDialect( Markdown.dialects.Gruber );\n\nMarkdown.dialects.Maruku.block.document_meta = function document_meta( block, next ) {\n // we're only interested in the first block\n if ( block.lineNumber > 1 ) return undefined;\n\n // document_meta blocks consist of one or more lines of `Key: Value\\n`\n if ( ! block.match( /^(?:\\w+:.*\\n)*\\w+:.*$/ ) ) return undefined;\n\n // make an attribute node if it doesn't exist\n if ( !extract_attr( this.tree ) ) {\n this.tree.splice( 1, 0, {} );\n }\n\n var pairs = block.split( /\\n/ );\n for ( p in pairs ) {\n var m = pairs[ p ].match( /(\\w+):\\s*(.*)$/ ),\n key = m[ 1 ].toLowerCase(),\n value = m[ 2 ];\n\n this.tree[ 1 ][ key ] = value;\n }\n\n // document_meta produces no content!\n return [];\n}\n\nMarkdown.dialects.Maruku.block.block_meta = function block_meta( block, next ) {\n // check if the last line of the block is an meta hash\n var m = block.match( /(^|\\n) {0,3}\\{:\\s*((?:\\\\\\}|[^\\}])*)\\s*\\}$/ );\n if ( !m ) return undefined;\n\n // process the meta hash\n var attr = process_meta_hash( m[ 2 ] );\n\n // if we matched ^ then we need to apply meta to the previous block\n if ( m[ 1 ] === \"\" ) {\n var node = this.tree[ this.tree.length - 1 ],\n hash = extract_attr( node );\n\n // if the node is a string (rather than JsonML), bail\n if ( typeof node === \"string\" ) return undefined;\n\n // create the attribute hash if it doesn't exist\n if ( !hash ) {\n hash = {};\n node.splice( 1, 0, hash );\n }\n\n // add the attributes in\n for ( a in attr ) {\n hash[ a ] = attr[ a ];\n }\n\n // return nothing so the meta hash is removed\n return [];\n }\n\n // pull the meta hash off the block and process what's left\n var b = block.replace( /\\n.*$/, \"\" ),\n result = this.processBlock( b, [] );\n\n // get or make the attributes hash\n var hash = extract_attr( result[ 0 ] );\n if ( !hash ) {\n hash = {};\n result[ 0 ].splice( 1, 0, hash );\n }\n\n // attach the attributes to the block\n for ( a in attr ) {\n hash[ a ] = attr[ a ];\n }\n\n return result;\n}\n\nMarkdown.dialects.Maruku.block.definition_list = function definition_list( block, next ) {\n // one or more terms followed by one or more definitions, in a single block\n var tight = /^((?:[^\\s:].*\\n)+):\\s+([^]+)$/,\n list = [ \"dl\" ];\n\n // see if we're dealing with a tight or loose block\n if ( ( m = block.match( tight ) ) ) {\n // pull subsequent tight DL blocks out of `next`\n var blocks = [ block ];\n while ( next.length && _exec(tight, next[ 0 ] ) ) {\n blocks.push( next.shift() );\n }\n\n for ( var b = 0; b < blocks.length; ++b ) {\n var m = blocks[ b ].match( tight ),\n terms = m[ 1 ].replace( /\\n$/, \"\" ).split( /\\n/ ),\n defns = m[ 2 ].split( /\\n:\\s+/ );\n\n // print( uneval( m ) );\n\n for ( var i = 0; i < terms.length; ++i ) {\n list.push( [ \"dt\", terms[ i ] ] );\n }\n\n for ( var i = 0; i < defns.length; ++i ) {\n // run inline processing over the definition\n list.push( [ \"dd\" ].concat( this.processInline( defns[ i ].replace( /(\\n)\\s+/, \"$1\" ) ) ) );\n }\n }\n }\n else {\n return undefined;\n }\n\n return [ list ];\n}\n\nMarkdown.dialects.Maruku.inline[ \"{:\" ] = function inline_meta( text, matches, out ) {\n if ( !out.length ) {\n return [ 2, \"{:\" ];\n }\n\n // get the preceeding element\n var before = out[ out.length - 1 ];\n\n if ( typeof before === \"string\" ) {\n return [ 2, \"{:\" ];\n }\n\n // match a meta hash\n var m = text.match( /^\\{:\\s*((?:\\\\\\}|[^\\}])*)\\s*\\}/ );\n\n // no match, false alarm\n if ( !m ) {\n return [ 2, \"{:\" ];\n }\n\n // attach the attributes to the preceeding element\n var meta = process_meta_hash( m[ 1 ] ),\n attr = extract_attr( before );\n\n if ( !attr ) {\n attr = {};\n before.splice( 1, 0, attr );\n }\n\n for ( var k in meta ) {\n attr[ k ] = meta[ k ];\n }\n\n // cut out the string and replace it with nothing\n return [ m[ 0 ].length, \"\" ];\n}\n\nMarkdown.buildBlockOrder ( Markdown.dialects.Maruku.block );\nMarkdown.buildInlinePatterns( Markdown.dialects.Maruku.inline );\n\nvar isArray = expose.isArray = function(obj) {\n return (obj instanceof Array || typeof obj === \"array\" || Array.isArray(obj));\n}\n\nfunction extract_attr( jsonml ) {\n return isArray(jsonml)\n && jsonml.length > 1\n && typeof jsonml[ 1 ] === \"object\"\n && !( isArray(jsonml[ 1 ]) )\n ? jsonml[ 1 ]\n : undefined;\n}\n\nfunction process_meta_hash( meta_string ) {\n var meta = split_meta_hash( meta_string ),\n attr = {};\n\n for ( var i = 0; i < meta.length; ++i ) {\n // id: #foo\n if ( _test(/^#/, meta[ i ] ) ) {\n attr.id = meta[ i ].substring( 1 );\n }\n // class: .foo\n else if ( _test(/^\\./, meta[ i ] ) ) {\n // if class already exists, append the new one\n if ( attr['class'] ) {\n attr['class'] = attr['class'] + meta[ i ].replace( /./, \" \" );\n }\n else {\n attr['class'] = meta[ i ].substring( 1 );\n }\n }\n // attribute: foo=bar\n else if ( _test(/=/, meta[ i ] ) ) {\n var s = meta[ i ].split( /=/ );\n attr[ s[ 0 ] ] = s[ 1 ];\n }\n }\n\n return attr;\n}\n\nfunction split_meta_hash( meta_string ) {\n var meta = meta_string.split( \"\" ),\n parts = [ \"\" ],\n in_quotes = false;\n\n while ( meta.length ) {\n var letter = meta.shift();\n switch ( letter ) {\n case \" \" :\n // if we're in a quoted section, keep it\n if ( in_quotes ) {\n parts[ parts.length - 1 ] += letter;\n }\n // otherwise make a new part\n else {\n parts.push( \"\" );\n }\n break;\n case \"'\" :\n case '\"' :\n // reverse the quotes and move straight on\n in_quotes = !in_quotes;\n break;\n case \"\\\\\" :\n // shift off the next letter to be used straight away.\n // it was escaped so we'll keep it whatever it is\n letter = meta.shift();\n default :\n parts[ parts.length - 1 ] += letter;\n break;\n }\n }\n\n return parts;\n}\n\n/**\n * renderJsonML( jsonml[, options] ) -> String\n * - jsonml (Array): JsonML array to render to XML\n * - options (Object): options\n *\n * Converts the given JsonML into well-formed XML.\n *\n * The options currently understood are:\n *\n * - root (Boolean): wether or not the root node should be included in the\n * output, or just its children. The default `false` is to not include the\n * root itself.\n */\nexpose.renderJsonML = function( jsonml, options ) {\n options = options || {};\n // include the root element in the rendered output?\n options.root = options.root || false;\n\n var content = [];\n\n if ( options.root ) {\n content.push( render_tree( jsonml ) );\n }\n else {\n jsonml.shift(); // get rid of the tag\n if ( jsonml.length && typeof jsonml[ 0 ] === \"object\" && !( jsonml[ 0 ] instanceof Array ) ) {\n jsonml.shift(); // get rid of the attributes\n }\n\n while ( jsonml.length ) {\n content.push( render_tree( jsonml.shift() ) );\n }\n }\n\n return content.join( \"\\n\\n\" );\n}\n\nfunction escapeHTML( text ) {\n return text.replace( /&/g, \"&amp;\" )\n .replace( /</g, \"&lt;\" )\n .replace( />/g, \"&gt;\" )\n .replace( /\"/g, \"&quot;\" )\n .replace( /'/g, \"&#39;\" );\n}\n\nfunction render_tree( jsonml ) {\n // basic case\n if ( typeof jsonml === \"string\" ) {\n return escapeHTML( jsonml );\n }\n\n var tag = jsonml.shift(),\n attributes = {},\n content = [];\n\n if ( jsonml.length && typeof jsonml[ 0 ] === \"object\" && !( jsonml[ 0 ] instanceof Array ) ) {\n attributes = jsonml.shift();\n }\n\n while ( jsonml.length ) {\n content.push( arguments.callee( jsonml.shift() ) );\n }\n\n var tag_attrs = \"\";\n for ( var a in attributes ) {\n tag_attrs += \" \" + a + '=\"' + escapeHTML( attributes[ a ] ) + '\"';\n }\n\n // be careful about adding whitespace here for inline elements\n return \"<\"+ tag + tag_attrs + \">\" + content.join( \"\" ) + \"</\" + tag + \">\";\n}\n\nfunction convert_tree_to_html( tree, references, options ) {\n options = options || {};\n\n // shallow clone\n var jsonml = tree.slice( 0 );\n\n if (typeof options.preprocessTreeNode === \"function\") {\n jsonml = options.preprocessTreeNode(jsonml, references);\n }\n\n // Clone attributes if they exist\n var attrs = extract_attr( jsonml );\n if ( attrs ) {\n jsonml[ 1 ] = {};\n for ( var i in attrs ) {\n jsonml[ 1 ][ i ] = attrs[ i ];\n }\n attrs = jsonml[ 1 ];\n }\n\n // basic case\n if ( typeof jsonml === \"string\" ) {\n return jsonml;\n }\n\n // convert this node\n switch ( jsonml[ 0 ] ) {\n case \"header\":\n jsonml[ 0 ] = \"h\" + jsonml[ 1 ].level;\n delete jsonml[ 1 ].level;\n break;\n case \"bulletlist\":\n jsonml[ 0 ] = \"ul\";\n break;\n case \"numberlist\":\n jsonml[ 0 ] = \"ol\";\n break;\n case \"listitem\":\n jsonml[ 0 ] = \"li\";\n break;\n case \"para\":\n jsonml[ 0 ] = \"p\";\n break;\n case \"markdown\":\n jsonml[ 0 ] = \"html\";\n if ( attrs ) delete attrs.references;\n break;\n case \"code_block\":\n jsonml[ 0 ] = \"pre\";\n var i = attrs ? 2 : 1;\n var code = [ \"code\" ];\n code.push.apply( code, jsonml.splice( i ) );\n jsonml[ i ] = code;\n break;\n case \"inlinecode\":\n jsonml[ 0 ] = \"code\";\n break;\n case \"img\":\n jsonml[ 1 ].src = jsonml[ 1 ].href;\n delete jsonml[ 1 ].href;\n break;\n case \"linebreak\":\n jsonml[0] = \"br\";\n break;\n case \"link\":\n jsonml[ 0 ] = \"a\";\n break;\n case \"link_ref\":\n jsonml[ 0 ] = \"a\";\n\n // grab this ref and clean up the attribute node\n var ref = references[ attrs.ref ];\n\n // if the reference exists, make the link\n if ( ref ) {\n delete attrs.ref;\n\n // add in the href and title, if present\n attrs.href = ref.href;\n if ( ref.title ) {\n attrs.title = ref.title;\n }\n\n // get rid of the unneeded original text\n delete attrs.original;\n }\n // the reference doesn't exist, so revert to plain text\n else {\n return attrs.original;\n }\n break;\n }\n\n // convert all the children\n var i = 1;\n\n // deal with the attribute node, if it exists\n if ( attrs ) {\n // if there are keys, skip over it\n for ( var key in jsonml[ 1 ] ) {\n i = 2;\n }\n // if there aren't, remove it\n if ( i === 1 ) {\n jsonml.splice( i, 1 );\n }\n }\n\n for ( ; i < jsonml.length; ++i ) {\n jsonml[ i ] = arguments.callee( jsonml[ i ], references, options );\n }\n\n return jsonml;\n}\n\n\n// merges adjacent text nodes into a single node\nfunction merge_text_nodes( jsonml ) {\n // skip the tag name and attribute hash\n var i = extract_attr( jsonml ) ? 2 : 1;\n\n while ( i < jsonml.length ) {\n // if it's a string check the next item too\n if ( typeof jsonml[ i ] === \"string\" ) {\n if ( i + 1 < jsonml.length && typeof jsonml[ i + 1 ] === \"string\" ) {\n // merge the second string into the first and remove it\n jsonml[ i ] += jsonml.splice( i + 1, 1 )[ 0 ];\n }\n else {\n ++i;\n }\n }\n // if it's not a string recurse\n else {\n arguments.callee( jsonml[ i ] );\n ++i;\n }\n }\n}\n\n} )( (function() {\n if ( typeof exports === \"undefined\" ) {\n window.markdown = {};\n return window.markdown;\n }\n else {\n return exports;\n }\n} )() );">>},
{<<"glob">>,
<<"// glob-specific helper functions\n\nvar published_re = new RegExp(\"^(\\\\d+)-(\\\\d+)-(\\\\d+)T(\\\\d+):(\\\\d+)\");\nvar months = {\n '01': \"January\",\n '02': \"February\",\n '03': \"March\",\n '04': \"April\",\n '05': \"May\",\n '06': \"June\",\n '07': \"July\",\n '08': \"August\",\n '09': \"September\",\n '10': \"October\",\n '11': \"November\",\n '12': \"December\",\n};\nvar am_pm = function (hour) {\n hour = parseInt(hour);\n return (hour < 12) ? \"am\" : \"pm\";\n};\n\nexports.postToTheme = function (doc, base_url) {\n var d = doc.published.match(published_re);\n doc.published_human = d[1] + \" \" + months[d[2]] + \" \" + parseInt(d[3]) + \", \" + (parseInt(d[4]) % 12 || 12) + \":\" + d[5] + am_pm(d[4]);\n doc.url = base_url + '/' + doc.path;\n doc.html_content || (doc.html_content = \"\");\n return doc;\n};">>},
{<<"atom">>,
<<"// modified from https://github.com/couchapp/couchapp/blob/master/vendor/lib/atom.js\n// atom feed generator\n// requries E4X support.\n\nexports.header = function(data) {\n var f = <feed xmlns=\"http://www.w3.org/2005/Atom\"/>;\n f.title = data.title;\n f.id = data.uri;\n f.link.@href = data.self;\n f.link.@rel = \"self\";\n f.generator = \"CouchApp on CouchDB (https://github.com/natevw/glob)\";\n f.updated = data.updated;\n f.author = <author><name>{data.author}</name></author>;\n return f.toXMLString().replace(/\\<\\/feed\\>/,'');\n};\n\nexports.entry = function(data) {\n //var entry = <entry xml:base={data.alternate-lastcomponent}/>;\n var entry = <entry/>;\n entry.id = data.uri;\n entry.title = data.title;\n if (data.updated) {\n entry.updated = data.updated;\n entry.published = data.published;\n } else {\n entry.updated = data.published;\n }\n if (data.html_content) {\n entry.content = data.html_content;\n entry.content.@type = 'html';\n }\n entry.link.@href = data.alternate;\n entry.link.@rel = \"alternate\";\n return entry;\n}\n\nexports.footer = function () {\n return \"</feed>\\n\";\n}">>},
{<<"date">>,
<<"/* Simple workaround for older JavaScript engines that\n * do not understand the One True Date Format.\n * This doesn't totally mimic new Date(), just string parsing.\n */\nexports.newDate = function (rfc3339) {\n var temp = Date.parse(rfc3339);\n if (isNaN(temp)) {\n // this technique is borrowed from jquery.couch.app.util's $.prettyDate\n temp = rfc3339.replace(/-/g,\"/\").replace(\"T\", \" \").replace(\"Z\", \" +0000\").replace(/(\\d*\\:\\d*:\\d*)\\.\\d*/g,\"$1\");\n }\n return new Date(temp);\n};\n\nexports.toUTCComponents = function (date) {\n\treturn [\n\t\tdate.getUTCFullYear(), // 0\n\t\tdate.getUTCMonth() + 1, // 1\n\t\tdate.getUTCDate(), // 2\n\t\tdate.getUTCHours(), // 3\n\t\tdate.getUTCMinutes(), // 4\n\t\tdate.getUTCSeconds() + (date.getUTCMilliseconds() / 1000)\n ];\n};\n\nexports.toRFC3339 = function (date) {\n // after https://github.com/couchapp/couchapp/blob/master/vendor/lib/atom.js\n \n function f(n) { // Format integers to have at least two digits.\n return n < 10 ? '0' + n : '' + n;\n }\n var d = exports.toUTCComponents(date);\n return d[0] + '-' + f(d[1]) + '-' + f(d[2]) + 'T' + f(d[3]) + ':' + f(d[4]) + ':' + f(d[5]) + 'Z'\n};">>},
{<<"path">>,
<<"// modified from https://github.com/couchapp/couchapp/blob/master/vendor/lib/path.js\n// from couch.js\nfunction encodeOptions(options) {\n var buf = [];\n if (typeof(options) == \"object\" && options !== null) {\n for (var name in options) {\n if (!options.hasOwnProperty(name)) {continue;}\n var value = options[name];\n if (name == \"key\" || name == \"startkey\" || name == \"endkey\") {\n value = JSON.stringify(value);\n }\n buf.push(encodeURIComponent(name) + \"=\" + encodeURIComponent(value));\n }\n }\n if (!buf.length) {\n return \"\";\n }\n return \"?\" + buf.join(\"&\");\n}\n\nfunction concatArgs(array, args) {\n for (var i=0; i < args.length; i++) {\n array.push(args[i]);\n };\n return array;\n};\n\nfunction makePath(array) {\n var options, path;\n \n if (typeof array[array.length - 1] != \"string\") {\n // it's a params hash\n options = array.pop();\n }\n path = array.map(function(item) {return encodeURIComponent(item)}).join('/');\n if (options) {\n return path + encodeOptions(options);\n } else {\n return path; \n }\n};\n\nexports.init = function(req) {\n return {\n asset : function() {\n var p = req.path, parts = ['', p[0], p[1] , p[2]];\n return makePath(concatArgs(parts, arguments));\n },\n show : function() {\n var p = req.path, parts = ['', p[0], p[1] , p[2], '_show'];\n return makePath(concatArgs(parts, arguments));\n },\n list : function() {\n var p = req.path, parts = ['', p[0], p[1] , p[2], '_list'];\n return makePath(concatArgs(parts, arguments));\n },\n update : function() {\n var p = req.path, parts = ['', p[0], p[1] , p[2], '_update'];\n return makePath(concatArgs(parts, arguments));\n },\n limit : function(limit) {\n var query = req.query;\n var l = query.limit;\n query.limit = limit;\n var view = req.path[req.path.length - 1];\n var list = req.path[req.path.length - 2];\n var link = this.list(list, view, query);\n query.limit = l;\n return link;\n },\n older : function(key) {\n if (!typeof key == \"undefined\") return null;\n var query = req.query;\n query.startkey = key;\n query.skip=1;\n var view = req.path[req.path.length - 1];\n var list = req.path[req.path.length - 2];\n return this.list(list, view, query);\n },\n absolute : function(path) {\n return 'http://' + req.headers.Host + path;\n }\n }\n};">>},
{<<"mustache">>,
<<47,47,
32,98,
117,105,
108,116,
32,119,
105,116,
104,32,
39,114,
97,107,
101,32,
99,111,
109,109,
111,110,
106,115,
39,32,
111,102,
32,91,
112,97,
114,115,
101,114,
45,114,
101,119,
114,105,
116,101,
32,49,
55,53,
57,51,
101,54,
93,10,
47,42,
10,32,
42,32,
67,111,
109,109,
111,110,
74,83,
45,99,
111,109,
112,97,
116,105,
98,108,
101,32,
109,117,
115,116,
97,99,
104,101,
46,106,
115,32,
109,111,
100,117,
108,101,
10,32,
42,10,
32,42,
32,83,
101,101,
32,104,
116,116,
112,58,
47,47,
103,105,
116,104,
117,98,
46,99,
111,109,
47,106,
97,110,
108,47,
109,117,
115,116,
97,99,
104,101,
46,106,
115,32,
102,111,
114,32,
109,111,
114,101,
32,105,
110,102,
111,46,
10,32,
42,47,
10,10,
47,42,
10,32,
32,109,
117,115,
116,97,
99,104,
101,46,
106,115,
32,226,
128,148,
32,76,
111,103,
105,99,
45,108,
101,115,
115,32,
116,101,
109,112,
108,97,
116,101,
115,32,
105,110,
32,74,
97,118,
97,83,
99,114,
105,112,
116,10,
10,32,
32,83,
101,101,
32,104,
116,116,
112,58,
47,47,
109,117,
115,116,
97,99,
104,101,
46,103,
105,116,
104,117,
98,46,
99,111,
109,47,
32,102,
111,114,
32,109,
111,114,
101,32,
105,110,
102,111,
46,10,
32,32,
10,32,
32,82,
101,119,
114,105,
116,101,
32,97,
115,32,
112,97,
114,115,
101,114,
32,98,
121,32,
78,97,
116,104,
97,110,
32,86,
97,110,
100,101,
114,32,
87,105,
108,116,
44,32,
50,48,
49,48,
32,77,
97,121,
32,50,
50,10,
42,47,
10,10,
118,97,
114,32,
77,117,
115,116,
97,99,
104,101,
32,61,
32,102,
117,110,
99,116,
105,111,
110,40,
41,32,
123,10,
32,32,
47,47,
32,96,
115,101,
110,100,
101,114,
96,32,
105,115,
32,97,
32,102,
117,110,
99,116,
105,111,
110,32,
116,111,
32,98,
117,102,
102,101,
114,32,
111,114,
32,115,
116,114,
101,97,
109,32,
112,97,
114,115,
101,100,
32,99,
104,117,
110,107,
115,10,
32,32,
118,97,
114,32,
82,101,
110,100,
101,114,
101,114,
32,61,
32,102,
117,110,
99,116,
105,111,
110,40,
115,101,
110,100,
101,114,
41,32,
123,10,
32,32,
32,32,
116,104,
105,115,
46,115,
101,110,
100,32,
61,32,
115,101,
110,100,
101,114,
59,10,
32,32,
125,59,
10,32,
32,10,
32,32,
82,101,
110,100,
101,114,
101,114,
46,112,
114,111,
116,111,
116,121,
112,101,
32,61,
32,123,
10,32,
32,32,
32,111,
116,97,
103,58,
32,34,
123,123,
34,44,
10,32,
32,32,
32,99,
116,97,
103,58,
32,34,
125,125,
34,44,
10,32,
32,32,
32,112,
114,97,
103,109,
97,115,
95,105,
109,112,
108,101,
109,101,
110,116,
101,100,
58,32,
123,10,
32,32,
32,32,
32,32,
34,73,
77,80,
76,73,
67,73,
84,45,
73,84,
69,82,
65,84,
79,82,
34,58,
32,116,
114,117,
101,10,
32,32,
32,32,
125,44,
10,32,
32,32,
32,10,
32,32,
32,32,
47,47,
32,116,
104,101,
32,109,
97,105,
110,32,
101,110,
116,114,
121,32,
105,110,
116,111,
32,112,
97,114,
115,105,
110,103,
10,32,
32,32,
32,114,
101,110,
100,101,
114,58,
32,102,
117,110,
99,116,
105,111,
110,40,
116,101,
109,112,
108,97,
116,101,
44,32,
99,111,
110,116,
101,120,
116,44,
32,112,
97,114,
116,105,
97,108,
115,41,
32,123,
10,32,
32,32,
32,32,
32,47,
47,99,
111,110,
115,111,
108,101,
46,108,
111,103,
40,34,
67,111,
110,116,
101,120,
116,34,
44,32,
99,111,
110,116,
101,120,
116,41,
59,10,
32,32,
32,32,
32,32,
118,97,
114,32,
112,114,
97,103,
109,97,
115,32,
61,32,
123,39,
73,77,
80,76,
73,67,
73,84,
45,73,
84,69,
82,65,
84,79,
82,39,
58,123,
125,125,
59,10,
32,32,
32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,115,
32,61,
32,116,
104,105,
115,46,
115,112,
108,105,
116,84,
101,109,
112,108,
97,116,
101,40,
116,101,
109,112,
108,97,
116,101,
44,32,
112,114,
97,103,
109,97,
115,41,
59,10,
32,32,
32,32,
32,32,
47,47,
99,111,
110,115,
111,108,
101,46,
108,111,
103,40,
34,84,
111,107,
101,110,
115,34,
44,32,
116,111,
107,101,
110,115,
41,59,
10,32,
32,32,
32,32,
32,118,
97,114,
32,116,
114,101,
101,32,
61,32,
116,104,
105,115,
46,102,
111,114,
109,84,
114,101,
101,40,
116,111,
107,101,
110,115,
44,32,
112,114,
97,103,
109,97,
115,41,
59,10,
32,32,
32,32,
32,32,
47,47,
99,111,
110,115,
111,108,
101,46,
108,111,
103,40,
34,84,
114,101,
101,34,
44,32,
116,114,
101,101,
41,59,
10,32,
32,32,
32,32,
32,116,
104,105,
115,46,
114,101,
110,100,
101,114,
84,114,
101,101,
40,116,
114,101,
101,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
44,32,
116,101,
109,112,
108,97,
116,101,
44,32,
112,114,
97,103,
109,97,
115,41,
59,10,
32,32,
32,32,
125,44,
10,32,
32,32,
32,10,
32,32,
32,32,
47,47,
32,114,
101,116,
117,114,
110,115,
32,123,
116,97,
103,44,
32,115,
116,97,
114,116,
44,32,
101,110,
100,125,
32,111,
114,32,
110,111,
116,104,
105,110,
103,10,
32,32,
32,32,
102,105,
110,100,
84,111,
107,101,
110,58,
32,102,
117,110,
99,116,
105,111,
110,40,
116,101,
109,112,
108,97,
116,101,
44,32,
115,116,
97,114,
116,80,
111,115,
41,32,
123,10,
32,32,
32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,83,
116,97,
114,116,
32,61,
32,116,
101,109,
112,108,
97,116,
101,46,
105,110,
100,101,
120,79,
102,40,
116,104,
105,115,
46,111,
116,97,
103,44,
32,115,
116,97,
114,116,
80,111,
115,41,
59,10,
32,32,
32,32,
32,32,
105,102,
32,40,
116,111,
107,101,
110,83,
116,97,
114,116,
32,61,
61,32,
45,49,
41,32,
114,101,
116,117,
114,110,
59,10,
32,32,
32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,69,
110,100,
32,61,
32,116,
101,109,
112,108,
97,116,
101,46,
105,110,
100,101,
120,79,
102,40,
116,104,
105,115,
46,99,
116,97,
103,44,
32,116,
111,107,
101,110,
83,116,
97,114,
116,32,
43,32,
116,104,
105,115,
46,111,
116,97,
103,46,
108,101,
110,103,
116,104,
41,59,
10,32,
32,32,
32,32,
32,105,
102,32,
40,116,
111,107,
101,110,
69,110,
100,32,
61,61,
32,45,
49,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,99,
111,110,
116,101,
120,116,
32,61,
32,116,
101,109,
112,108,
97,116,
101,46,
115,117,
98,115,
116,114,
40,116,
111,107,
101,110,
83,116,
97,114,
116,44,
32,49,
53,41,
59,10,
32,32,
32,32,
32,32,
32,32,
116,104,
114,111,
119,32,
110,101,
119,32,
69,114,
114,111,
114,40,
34,85,
110,99,
108,111,
115,101,
100,32,
116,111,
107,101,
110,32,
39,34,
32,43,
32,99,
111,110,
116,101,
120,116,
32,43,
32,34,
46,46,
46,39,
46,34,
41,59,
10,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,10,
32,32,
32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,73,
110,110,
97,114,
100,115,
32,61,
32,116,
101,109,
112,108,
97,116,
101,46,
115,108,
105,99,
101,40,
116,111,
107,101,
110,83,
116,97,
114,116,
32,43,
32,116,
104,105,
115,46,
111,116,
97,103,
46,108,
101,110,
103,116,
104,44,
32,116,
111,107,
101,110,
69,110,
100,41,
59,10,
32,32,
32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,80,
97,114,
116,115,
32,61,
32,116,
111,107,
101,110,
73,110,
110,97,
114,100,
115,46,
109,97,
116,99,
104,40,
47,40,
91,61,
37,33,
123,38,
62,35,
94,92,
47,93,
41,63,
92,115,
42,40,
46,43,
63,41,
92,115,
42,92,
49,63,
36,47,
41,59,
10,32,
32,32,
32,32,
32,118,
97,114,
32,116,
111,107,
101,110,
32,61,
32,123,
10,32,
32,32,
32,32,
32,32,
32,34,
111,112,
101,114,
97,116,
111,114,
34,58,
32,116,
111,107,
101,110,
80,97,
114,116,
115,91,
49,93,
44,10,
32,32,
32,32,
32,32,
32,32,
34,116,
97,103,
34,58,
32,116,
111,107,
101,110,
80,97,
114,116,
115,91,
50,93,
44,10,
32,32,
32,32,
32,32,
32,32,
34,116,
101,120,
116,34,
58,32,
116,104,
105,115,
46,111,
116,97,
103,32,
43,32,
116,111,
107,101,
110,73,
110,110,
97,114,
100,115,
32,43,
32,116,
104,105,
115,46,
99,116,
97,103,
44,10,
32,32,
32,32,
32,32,
32,32,
34,115,
116,97,
114,116,
34,58,
32,116,
111,107,
101,110,
83,116,
97,114,
116,44,
10,32,
32,32,
32,32,
32,32,
32,34,
101,110,
100,34,
58,32,
116,111,
107,101,
110,69,
110,100,
32,43,
32,116,
104,105,
115,46,
99,116,
97,103,
46,108,
101,110,
103,116,
104,10,
32,32,
32,32,
32,32,
125,59,
10,32,
32,32,
32,32,
32,105,
102,32,
40,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,
32,34,
123,34,
32,38,
38,32,
116,101,
109,112,
108,97,
116,101,
91,116,
111,107,
101,110,
46,101,
110,100,
93,32,
61,61,
32,34,
125,34,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
47,47,
32,97,
100,106,
117,115,
116,32,
102,111,
114,32,
115,121,
109,109,
101,116,
114,105,
99,97,
108,32,
117,110,
101,115,
99,97,
112,101,
100,32,
116,97,
103,32,
119,105,
116,104,
32,100,
101,102,
97,117,
108,116,
32,100,
101,108,
105,109,
105,116,
101,114,
115,10,
32,32,
32,32,
32,32,
32,32,
116,111,
107,101,
110,46,
101,110,
100,32,
43,61,
32,49,
59,10,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,116,
111,107,
101,110,
59,10,
32,32,
32,32,
125,44,
10,32,
32,32,
32,10,
32,32,
32,32,
115,112,
108,105,
116,84,
101,109,
112,108,
97,116,
101,58,
32,102,
117,110,
99,116,
105,111,
110,40,
116,101,
109,112,
108,97,
116,101,
44,32,
112,114,
97,103,
109,97,
115,41,
32,123,
10,32,
32,32,
32,32,
32,118,
97,114,
32,116,
111,107,
101,110,
115,32,
61,32,
91,93,
59,10,
32,32,
32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,59,
10,32,
32,32,
32,32,
32,118,
97,114,
32,112,
97,114,
115,101,
80,111,
115,105,
116,105,
111,110,
32,61,
32,48,
59,10,
32,32,
32,32,
32,32,
119,104,
105,108,
101,32,
40,116,
111,107,
101,110,
32,61,
32,116,
104,105,
115,46,
102,105,
110,100,
84,111,
107,101,
110,40,
116,101,
109,112,
108,97,
116,101,
44,32,
112,97,
114,115,
101,80,
111,115,
105,116,
105,111,
110,41,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
116,101,
120,116,
32,61,
32,116,
101,109,
112,108,
97,116,
101,46,
115,108,
105,99,
101,40,
112,97,
114,115,
101,80,
111,115,
105,116,
105,111,
110,44,
32,116,
111,107,
101,110,
46,115,
116,97,
114,116,
41,59,
10,32,
32,32,
32,32,
32,32,
32,116,
111,107,
101,110,
115,46,
112,117,
115,104,
40,123,
34,116,
101,120,
116,34,
58,32,
116,101,
120,116,
44,32,
34,115,
116,97,
114,116,
34,58,
32,112,
97,114,
115,101,
80,111,
115,105,
116,105,
111,110,
44,32,
34,101,
110,100,
34,58,
32,116,
111,107,
101,110,
46,115,
116,97,
114,116,
125,41,
59,10,
32,32,
32,32,
32,32,
32,32,
116,111,
107,101,
110,115,
46,112,
117,115,
104,40,
116,111,
107,101,
110,41,
59,10,
32,32,
32,32,
32,32,
32,32,
112,97,
114,115,
101,80,
111,115,
105,116,
105,111,
110,32,
61,32,
116,111,
107,101,
110,46,
101,110,
100,59,
10,32,
32,32,
32,32,
32,32,
32,10,
32,32,
32,32,
32,32,
32,32,
105,102,
32,40,
116,111,
107,101,
110,46,
111,112,
101,114,
97,116,
111,114,
32,61,
61,32,
34,61,
34,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,47,
47,32,
115,101,
116,32,
110,101,
119,32,
100,101,
108,105,
109,105,
116,101,
114,115,
10,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,100,
101,108,
105,109,
105,116,
101,114,
115,32,
61,32,
116,111,
107,101,
110,46,
116,97,
103,46,
115,112,
108,105,
116,40,
34,32,
34,41,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
116,104,
105,115,
46,111,
116,97,
103,32,
61,32,
100,101,
108,105,
109,105,
116,101,
114,115,
91,48,
93,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,116,
104,105,
115,46,
99,116,
97,103,
32,61,
32,100,
101,108,
105,109,
105,116,
101,114,
115,91,
49,93,
59,10,
32,32,
32,32,
32,32,
32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,
32,34,
37,34,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
47,47,
32,115,
116,111,
114,101,
32,112,
114,97,
103,109,
97,10,
32,32,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
112,114,
97,103,
109,97,
73,110,
102,111,
32,61,
32,116,
111,107,
101,110,
46,116,
97,103,
46,109,
97,116,
99,104,
40,47,
40,91,
92,119,
95,45,
93,43,
41,32,
63,40,
91,92,
119,93,
43,61,
91,92,
119,93,
43,41,
63,47,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,112,
114,97,
103,109,
97,32,
61,32,
112,114,
97,103,
109,97,
73,110,
102,111,
91,49,
93,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,105,
102,32,
40,33,
116,104,
105,115,
46,112,
114,97,
103,109,
97,115,
95,105,
109,112,
108,101,
109,101,
110,116,
101,100,
91,112,
114,97,
103,109,
97,93,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
116,104,
114,111,
119,32,
110,101,
119,32,
69,114,
114,111,
114,40,
34,84,
104,105,
115,32,
105,109,
112,108,
101,109,
101,110,
116,97,
116,105,
111,110,
32,111,
102,32,
109,117,
115,116,
97,99,
104,101,
32,100,
111,101,
115,110,
39,116,
32,117,
110,100,
101,114,
115,116,
97,110,
100,32,
116,104,
101,32,
39,34,
32,43,
32,112,
114,97,
103,109,
97,32,
43,32,
34,39,
32,112,
114,97,
103,109,
97,34,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,111,
112,116,
105,111,
110,115,
32,61,
32,123,
125,10,
32,32,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
111,112,
116,105,
111,110,
83,116,
114,32,
61,32,
112,114,
97,103,
109,97,
73,110,
102,111,
91,50,
93,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,105,
102,32,
40,111,
112,116,
105,111,
110,83,
116,114,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
111,112,
116,115,
32,61,
32,111,
112,116,
105,111,
110,83,
116,114,
46,115,
112,108,
105,116,
40,34,
61,34,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,111,
112,116,
105,111,
110,115,
91,111,
112,116,
115,91,
48,93,
93,32,
61,32,
111,112,
116,115,
91,49,
93,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,32,
32,112,
114,97,
103,109,
97,115,
91,112,
114,97,
103,109,
97,93,
32,61,
32,111,
112,116,
105,111,
110,115,
59,10,
32,32,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
118,97,
114,32,
102,105,
110,97,
108,84,
101,120,
116,32,
61,32,
116,101,
109,112,
108,97,
116,101,
46,115,
108,105,
99,101,
40,112,
97,114,
115,101,
80,111,
115,105,
116,105,
111,110,
44,32,
116,101,
109,112,
108,97,
116,101,
46,108,
101,110,
103,116,
104,41,
59,10,
32,32,
32,32,
32,32,
116,111,
107,101,
110,115,
46,112,
117,115,
104,40,
123,34,
116,101,
120,116,
34,58,
32,102,
105,110,
97,108,
84,101,
120,116,
44,32,
34,115,
116,97,
114,116,
34,58,
32,112,
97,114,
115,101,
80,111,
115,105,
116,105,
111,110,
44,32,
34,101,
110,100,
34,58,
32,116,
101,109,
112,108,
97,116,
101,46,
108,101,
110,103,
116,104,
125,41,
59,10,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,116,
111,107,
101,110,
115,59,
10,32,
32,32,
32,125,
44,10,
32,32,
32,32,
10,32,
32,32,
32,47,
47,32,
78,79,
84,69,
58,32,
101,109,
112,116,
105,101,
115,32,
116,111,
107,101,
110,115,
32,112,
97,114,
97,109,
101,116,
101,114,
32,97,
110,100,
32,109,
111,100,
105,102,
105,101,
115,32,
105,116,
115,32,
102,111,
114,109,
101,114,
32,115,
117,98,
111,98,
106,101,
99,116,
115,10,
32,32,
32,32,
102,111,
114,109,
84,114,
101,101,
58,32,
102,117,
110,99,
116,105,
111,110,
40,116,
111,107,
101,110,
115,44,
32,115,
101,99,
116,105,
111,110,
44,32,
112,114,
97,103,
109,97,
115,41,
32,123,
10,32,
32,32,
32,32,
32,118,
97,114,
32,116,
114,101,
101,32,
61,32,
91,93,
59,10,
32,32,
32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,59,
10,32,
32,32,
32,32,
32,119,
104,105,
108,101,
32,40,
116,111,
107,101,
110,32,
61,32,
116,111,
107,101,
110,115,
46,115,
104,105,
102,116,
40,41,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
105,102,
32,40,
116,111,
107,101,
110,46,
115,116,
97,114,
116,32,
61,61,
32,116,
111,107,
101,110,
46,101,
110,100,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
47,47,
32,100,
114,111,
112,32,
101,109,
112,116,
121,32,
116,111,
107,101,
110,115,
10,32,
32,32,
32,32,
32,32,
32,32,
32,99,
111,110,
116,105,
110,117,
101,59,
10,32,
32,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
32,40,
116,111,
107,101,
110,46,
116,97,
103,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,105,
102,32,
40,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,
32,34,
35,34,
32,124,
124,32,
116,111,
107,101,
110,46,
111,112,
101,114,
97,116,
111,114,
32,61,
61,32,
34,94,
34,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,116,
111,107,
101,110,
46,115,
101,99,
116,105,
111,110,
32,61,
32,116,
114,117,
101,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,116,
111,107,
101,110,
46,105,
110,118,
101,114,
116,32,
61,32,
40,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,
32,32,
34,94,
34,41,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
116,111,
107,101,
110,46,
116,114,
101,101,
32,61,
32,116,
104,105,
115,46,
102,111,
114,109,
84,114,
101,101,
40,116,
111,107,
101,110,
115,44,
32,116,
111,107,
101,110,
46,116,
97,103,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
32,40,
116,111,
107,101,
110,46,
111,112,
101,114,
97,116,
111,114,
32,61,
61,32,
34,47,
34,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,105,
102,32,
40,116,
111,107,
101,110,
46,116,
97,103,
32,33,
61,32,
115,101,
99,116,
105,111,
110,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,116,
104,114,
111,119,
32,110,
101,119,
32,69,
114,114,
111,114,
40,34,
66,97,
100,108,
121,32,
110,101,
115,116,
101,100,
32,115,
101,99,
116,105,
111,110,
32,39,
34,32,
43,32,
115,101,
99,116,
105,111,
110,32,
43,32,
34,39,
34,32,
43,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
34,32,
40,108,
101,102,
116,32,
118,105,
97,32,
39,34,
32,43,
32,116,
111,107,
101,110,
46,116,
97,103,
32,43,
34,39,
41,46,
34,41,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
98,114,
101,97,
107,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
32,40,
116,111,
107,101,
110,46,
111,112,
101,114,
97,116,
111,114,
32,61,
61,32,
34,62,
34,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,116,
111,107,
101,110,
46,112,
97,114,
116,105,
97,108,
32,61,
32,116,
114,117,
101,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
32,40,
116,111,
107,101,
110,46,
111,112,
101,114,
97,116,
111,114,
32,61,
61,32,
34,123,
34,32,
124,124,
32,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,
32,34,
38,34,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
116,111,
107,101,
110,46,
110,111,
69,115,
99,97,
112,101,
32,61,
32,116,
114,117,
101,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,116,
114,101,
101,46,
112,117,
115,104,
40,116,
111,107,
101,110,
41,59,
10,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
116,114,
101,101,
59,10,
32,32,
32,32,
125,44,
10,32,
32,32,
32,10,
32,32,
32,32,
114,101,
110,100,
101,114,
84,114,
101,101,
58,32,
102,117,
110,99,
116,105,
111,110,
40,116,
114,101,
101,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
44,32,
116,101,
109,112,
108,97,
116,101,
44,32,
112,114,
97,103,
109,97,
115,41,
32,123,
10,32,
32,32,
32,32,
32,102,
111,114,
32,40,
118,97,
114,32,
105,32,
61,32,
48,44,
32,108,
101,110,
32,61,
32,116,
114,101,
101,46,
108,101,
110,103,
116,104,
59,32,
105,32,
60,32,
108,101,
110,59,
32,43,
43,105,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
105,116,
101,109,
32,61,
32,116,
114,101,
101,91,
105,93,
59,10,
32,32,
32,32,
32,32,
32,32,
105,102,
32,40,
105,116,
101,109,
46,115,
101,99,
116,105,
111,110,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
105,116,
101,114,
97,116,
111,114,
32,61,
32,116,
104,105,
115,46,
118,97,
108,117,
101,73,
116,101,
114,97,
116,111,
114,40,
105,116,
101,109,
46,116,
97,103,
44,32,
99,111,
110,116,
101,120,
116,44,
32,112,
114,97,
103,109,
97,115,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,118,
97,108,
117,101,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
105,102,
32,40,
105,116,
101,109,
46,105,
110,118,
101,114,
116,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,108,
117,101,
32,61,
32,105,
116,101,
114,97,
116,111,
114,40,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,105,
102,32,
40,33,
118,97,
108,117,
101,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,116,
104,105,
115,46,
114,101,
110,100,
101,114,
84,114,
101,101,
40,105,
116,101,
109,46,
116,114,
101,101,
44,32,
99,111,
110,116,
101,120,
116,44,
32,112,
97,114,
116,105,
97,108,
115,44,
32,116,
101,109,
112,108,
97,116,
101,44,
32,112,
114,97,
103,109,
97,115,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
119,104,
105,108,
101,32,
40,118,
97,108,
117,101,
32,61,
32,105,
116,101,
114,97,
116,111,
114,40,
41,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,105,
102,32,
40,116,
104,105,
115,46,
105,115,
73,110,
115,116,
97,110,
99,101,
40,118,
97,108,
117,101,
44,32,
70,117,
110,99,
116,105,
111,110,
41,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,115,
117,98,
116,114,
101,101,
32,61,
32,105,
116,101,
109,46,
116,114,
101,101,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
108,97,
115,116,
83,117,
98,105,
116,101,
109,32,
61,32,
115,117,
98,116,
114,101,
101,91,
115,117,
98,116,
114,101,
101,46,
108,101,
110,103,
116,104,
45,49,
93,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,115,
117,98,
116,101,
120,116,
32,61,
32,116,
101,109,
112,108,
97,116,
101,46,
115,108,
105,99,
101,40,
105,116,
101,109,
46,101,
110,100,
44,32,
108,97,
115,116,
83,117,
98,105,
116,101,
109,32,
38,38,
32,108,
97,115,
116,83,
117,98,
105,116,
101,109,
46,101,
110,100,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,114,
101,110,
100,101,
114,101,
114,32,
61,32,
102,117,
110,99,
116,105,
111,110,
40,116,
101,120,
116,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
77,117,
115,116,
97,99,
104,101,
46,116,
111,95,
104,116,
109,108,
40,116,
101,120,
116,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,108,
97,109,
98,100,
97,82,
101,115,
117,108,
116,32,
61,32,
118,97,
108,117,
101,46,
99,97,
108,108,
40,99,
111,110,
116,101,
120,116,
44,32,
115,117,
98,116,
101,120,
116,44,
32,114,
101,110,
100,101,
114,101,
114,41,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
105,102,
32,40,
108,97,
109,98,
100,97,
82,101,
115,117,
108,116,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
116,104,
105,115,
46,115,
101,110,
100,40,
108,97,
109,98,
100,97,
82,101,
115,117,
108,116,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
115,117,
98,67,
111,110,
116,101,
120,116,
32,61,
32,116,
104,105,
115,46,
109,101,
114,103,
101,100,
67,111,
112,121,
40,99,
111,110,
116,101,
120,116,
44,32,
118,97,
108,117,
101,41,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
116,104,
105,115,
46,114,
101,110,
100,101,
114,84,
114,101,
101,40,
105,116,
101,109,
46,116,
114,101,
101,44,
32,115,
117,98,
67,111,
110,116,
101,120,
116,44,
32,112,
97,114,
116,105,
97,108,
115,44,
32,116,
101,109,
112,108,
97,116,
101,44,
32,112,
114,97,
103,109,
97,115,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
32,40,
105,116,
101,109,
46,112,
97,114,
116,105,
97,108,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
115,117,
98,84,
101,109,
112,108,
97,116,
101,32,
61,32,
112,97,
114,116,
105,97,
108,115,
91,105,
116,101,
109,46,
116,97,
103,93,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
105,102,
32,40,
33,115,
117,98,
84,101,
109,112,
108,97,
116,101,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
116,104,
114,111,
119,32,
110,101,
119,32,
69,114,
114,111,
114,40,
34,85,
110,107,
110,111,
119,110,
32,112,
97,114,
116,105,
97,108,
32,39,
34,32,
43,32,
105,116,
101,109,
46,116,
97,103,
32,43,
32,34,
39,34,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,32,
32,10,9,
9,32,32,
47,47,
32,98,
121,32,
109,121,
32,117,
110,100,
101,114,
115,116,
97,110,
100,105,
110,103,
44,32,
116,104,
105,115,
32,105,
115,32,
116,104,
101,32,
109,117,
115,116,
97,99,
104,101,
40,53,
41,32,
119,97,
121,10,
9,9,32,
32,47,
47,32,
116,104,
105,115,
46,114,
101,110,
100,101,
114,40,
115,117,
98,84,
101,109,
112,108,
97,116,
101,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
41,59,
10,9,9,
32,32,
10,32,
32,32,
32,32,
32,32,
32,32,
32,47,
47,32,
116,104,
105,115,
32,105,
115,32,
64,106,
97,110,
108,39,
115,32,
119,97,
121,10,
32,32,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
115,117,
98,67,
111,110,
116,101,
120,116,
32,61,
32,99,
111,110,
116,101,
120,116,
91,105,
116,101,
109,46,
116,97,
103,93,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
105,102,
32,40,
116,121,
112,101,
111,102,
40,115,
117,98,
67,111,
110,116,
101,120,
116,41,
32,61,
61,32,
34,111,
98,106,
101,99,
116,34,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
116,104,
105,115,
46,114,
101,110,
100,101,
114,40,
115,117,
98,84,
101,109,
112,108,
97,116,
101,44,
32,115,
117,98,
67,111,
110,116,
101,120,
116,44,
32,112,
97,114,
116,105,
97,108,
115,41,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
125,32,
101,108,
115,101,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,116,
104,105,
115,46,
114,101,
110,100,
101,114,
40,115,
117,98,
84,101,
109,112,
108,97,
116,101,
44,32,
99,111,
110,116,
101,120,
116,44,
32,112,
97,114,
116,105,
97,108,
115,41,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,105,
116,101,
109,46,
111,112,
101,114,
97,116,
111,114,
32,38,
38,32,
33,105,
116,101,
109,46,
110,111,
69,115,
99,97,
112,101,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
47,47,
32,105,
103,110,
111,114,
101,32,
111,116,
104,101,
114,32,
111,112,
101,114,
97,116,
111,114,
115,10,
32,32,
32,32,
32,32,
32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,105,
116,101,
109,46,
116,97,
103,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,114,
97,119,
86,97,
108,117,
101,32,
61,32,
116,104,
105,115,
46,108,
111,111,
107,117,
112,86,
97,108,
117,101,
40,105,
116,101,
109,46,
116,97,
103,44,
32,99,
111,110,
116,101,
120,116,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,105,
102,32,
40,114,
97,119,
86,97,
108,117,
101,32,
33,61,
32,110,
117,108,
108,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,118,
97,108,
117,101,
32,61,
32,114,
97,119,
86,97,
108,117,
101,46,
116,111,
83,116,
114,105,
110,103,
40,41,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
116,104,
105,115,
46,115,
101,110,
100,40,
40,105,
116,101,
109,46,
110,111,
69,115,
99,97,
112,101,
41,32,
63,32,
118,97,
108,117,
101,32,
58,32,
116,104,
105,115,
46,101,
115,99,
97,112,
101,72,
84,77,
76,40,
118,97,
108,117,
101,41,
41,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
116,104,
105,115,
46,115,
101,110,
100,40,
105,116,
101,109,
46,116,
101,120,
116,41,
59,10,
32,32,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
125,44,
10,32,
32,32,
32,10,
32,32,
32,32,
47,47,
32,102,
105,110,
100,32,
96,110,
97,109,
101,96,
32,118,
97,108,
117,101,
32,105,
110,32,
99,117,
114,114,
101,110,
116,32,
118,105,
101,119,
32,96,
99,111,
110,116,
101,120,
116,96,
10,32,
32,32,
32,108,
111,111,
107,117,
112,86,
97,108,
117,101,
58,32,
102,117,
110,99,
116,105,
111,110,
40,110,
97,109,
101,44,
32,99,
111,110,
116,101,
120,116,
41,32,
123,10,
32,32,
32,32,
32,32,
118,97,
114,32,
118,97,
108,117,
101,32,
61,32,
99,111,
110,116,
101,120,
116,91,
110,97,
109,101,
93,59,
10,32,
32,32,
32,32,
32,47,
47,32,
101,118,
97,108,
117,97,
116,101,
32,112,
108,97,
105,110,
45,102,
117,110,
99,116,
105,111,
110,32,
118,97,
108,117,
101,32,
40,111,
110,108,
121,32,
111,110,
99,101,
41,10,
32,32,
32,32,
32,32,
105,102,
32,40,
116,104,
105,115,
46,105,
115,73,
110,115,
116,97,
110,99,
101,40,
118,97,
108,117,
101,44,
32,70,
117,110,
99,116,
105,111,
110,41,
32,38,
38,32,
33,118,
97,108,
117,101,
46,105,
116,101,
114,97,
116,111,
114,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,118,
97,108,
117,101,
32,61,
32,118,
97,108,
117,101,
46,97,
112,112,
108,121,
40,99,
111,110,
116,101,
120,116,
41,59,
10,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,47,
47,32,
115,105,
108,101,
110,116,
108,121,
32,105,
103,110,
111,114,
101,32,
117,110,
107,111,
119,110,
32,118,
97,114,
105,97,
98,108,
101,115,
10,32,
32,32,
32,32,
32,105,
102,32,
40,118,
97,108,
117,101,
32,61,
61,32,
110,117,
108,108,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
118,97,
108,117,
101,32,
61,32,
34,34,
59,10,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,118,
97,108,
117,101,
59,10,
32,32,
32,32,
125,44,
10,32,
32,32,
32,10,
32,32,
32,32,
111,98,
106,101,
99,116,
86,97,
108,117,
101,58,
32,102,
117,110,
99,116,
105,111,
110,40,
118,97,
108,117,
101,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,114,
97,103,
109,97,
115,41,
32,123,
10,32,
32,32,
32,32,
32,105,
102,32,
40,118,
97,108,
117,101,
32,61,
61,32,
110,117,
108,108,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,110,
117,108,
108,59,
10,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,105,
102,32,
40,116,
104,105,
115,46,
105,115,
73,110,
115,116,
97,110,
99,101,
40,118,
97,108,
117,101,
44,32,
70,117,
110,99,
116,105,
111,110,
41,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
118,97,
108,117,
101,59,
10,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,10,
32,32,
32,32,
32,32,
118,97,
114,32,
111,98,
106,59,
10,32,
32,32,
32,32,
32,105,
102,32,
40,79,
98,106,
101,99,
116,46,
112,114,
111,116,
111,116,
121,112,
101,46,
116,111,
83,116,
114,105,
110,103,
46,99,
97,108,
108,40,
118,97,
108,117,
101,41,
32,61,
61,32,
39,91,
111,98,
106,101,
99,116,
32,79,
98,106,
101,99,
116,93,
39,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,111,
98,106,
32,61,
32,118,
97,108,
117,101,
59,10,
32,32,
32,32,
32,32,
125,32,
101,108,
115,101,
32,105,
102,40,
112,114,
97,103,
109,97,
115,91,
34,73,
77,80,
76,73,
67,73,
84,45,
73,84,
69,82,
65,84,
79,82,
34,93,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
47,47,
32,111,
114,105,
103,105,
110,97,
108,32,
99,114,
101,100,
105,116,
32,116,
111,32,
64,108,
97,110,
103,97,
108,101,
120,44,
32,115,
117,112,
112,111,
114,116,
32,102,
111,114,
32,97,
114,114,
97,121,
115,32,
111,102,
32,115,
116,114,
105,110,
103,115,
10,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,105,
116,101,
114,97,
116,111,
114,75,
101,121,
32,61,
32,112,
114,97,
103,109,
97,115,
91,34,
73,77,
80,76,
73,67,
73,84,
45,73,
84,69,
82,65,
84,79,
82,34,
93,46,
105,116,
101,114,
97,116,
111,114,
32,124,
124,32,
34,46,
34,59,
10,32,
32,32,
32,32,
32,32,
32,111,
98,106,
32,61,
32,123,
125,59,
10,32,
32,32,
32,32,
32,32,
32,111,
98,106,
91,105,
116,101,
114,97,
116,111,
114,75,
101,121,
93,32,
61,32,
118,97,
108,117,
101,59,
10,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
111,98,
106,59,
10,32,
32,32,
32,125,
44,10,
32,32,
32,32,
10,32,
32,32,
32,47,
47,32,
97,108,
119,97,
121,115,
32,114,
101,116,
117,114,
110,115,
32,105,
116,101,
114,97,
116,111,
114,32,
102,117,
110,99,
116,105,
111,110,
32,114,
101,116,
117,114,
110,105,
110,103,
32,111,
98,106,
101,99,
116,47,
110,117,
108,108,
10,32,
32,32,
32,118,
97,108,
117,101,
73,116,
101,114,
97,116,
111,114,
58,32,
102,117,
110,99,
116,105,
111,110,
40,110,
97,109,
101,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,114,
97,103,
109,97,
115,41,
32,123,
10,32,
32,32,
32,32,
32,118,
97,114,
32,118,
97,108,
117,101,
32,61,
32,116,
104,105,
115,46,
108,111,
111,107,
117,112,
86,97,
108,117,
101,40,
110,97,
109,101,
44,32,
99,111,
110,116,
101,120,
116,41,
59,10,
32,32,
32,32,
32,32,
118,97,
114,32,
109,101,
32,61,
32,116,
104,105,
115,59,
10,32,
32,32,
32,32,
32,105,
102,32,
40,33,
118,97,
108,117,
101,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
102,117,
110,99,
116,105,
111,110,
40,41,
123,125,
59,10,
32,32,
32,32,
32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,116,
104,105,
115,46,
105,115,
73,110,
115,116,
97,110,
99,101,
40,118,
97,108,
117,101,
44,32,
70,117,
110,99,
116,105,
111,110,
41,32,
38,38,
32,118,
97,108,
117,101,
46,105,
116,101,
114,97,
116,111,
114,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
118,97,
108,117,
101,59,
10,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
32,40,
116,104,
105,115,
46,105,
115,73,
110,115,
116,97,
110,99,
101,40,
118,97,
108,117,
101,44,
32,65,
114,114,
97,121,
41,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,105,
32,61,
32,48,
59,10,
32,32,
32,32,
32,32,
32,32,
118,97,
114,32,
108,32,
61,32,
118,97,
108,117,
101,46,
108,101,
110,103,
116,104,
59,10,
32,32,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,102,
117,110,
99,116,
105,111,
110,40,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,40,
105,32,
60,32,
108,41,
32,63,
32,109,
101,46,
111,98,
106,101,
99,116,
86,97,
108,117,
101,40,
118,97,
108,117,
101,91,
105,43,
43,93,
44,32,
99,111,
110,116,
101,120,
116,44,
32,112,
114,97,
103,109,
97,115,
41,32,
58,32,
110,117,
108,108,
59,10,
32,32,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
125,32,
101,108,
115,101,
32,123,
10,32,
32,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
102,117,
110,99,
116,105,
111,110,
40,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,118,
97,114,
32,118,
32,61,
32,118,
97,108,
117,101,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
118,97,
108,117,
101,32,
61,32,
110,117,
108,108,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,109,
101,46,
111,98,
106,101,
99,116,
86,97,
108,117,
101,40,
118,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,114,
97,103,
109,97,
115,41,
59,10,
32,32,
32,32,
32,32,
32,32,
125,59,
10,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,125,
44,10,
32,32,
32,32,
10,32,
32,32,
32,47,
47,32,
114,101,
108,105,
97,98,
108,121,
32,99,
104,101,
99,107,
32,111,
98,106,
101,99,
116,32,
116,121,
112,101,
32,70,
117,110,
99,116,
105,111,
110,47,
65,114,
114,97,
121,44,
32,101,
118,101,
110,32,
119,104,
101,110,
32,111,
98,106,
101,99,
116,32,
119,97,
115,32,
99,111,
110,115,
116,114,
117,99,
116,101,
100,32,
105,110,
32,97,
32,100,
105,102,
102,101,
114,101,
110,116,
32,103,
108,111,
98,97,
108,32,
99,111,
110,116,
101,120,
116,10,
32,32,
32,32,
105,115,
73,110,
115,116,
97,110,
99,101,
58,32,
102,117,
110,99,
116,105,
111,110,
32,40,
111,98,
106,44,
32,116,
121,112,
101,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,105,
102,32,
40,111,
98,106,
32,105,
110,115,
116,97,
110,99,
101,111,
102,32,
116,121,
112,101,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
47,47,
32,100,
111,101,
115,110,
39,116,
32,104,
117,114,
116,32,
116,111,
32,99,
104,101,
99,107,
32,116,
104,105,
115,32,
102,105,
114,115,
116,10,
32,32,
32,32,
32,32,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,116,
114,117,
101,59,
10,32,
32,32,
32,32,
32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
32,40,
116,121,
112,101,
32,61,
61,61,
32,70,
117,110,
99,116,
105,111,
110,32,
38,38,
32,116,
121,112,
101,111,
102,40,
111,98,
106,41,
32,61,
61,61,
32,34,
102,117,
110,99,
116,105,
111,110,
34,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
116,114,
117,101,
59,10,
32,32,
32,32,
32,32,
32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,116,
121,112,
101,32,
61,61,
61,32,
65,114,
114,97,
121,32,
38,38,
32,79,
98,106,
101,99,
116,46,
112,114,
111,116,
111,116,
121,112,
101,46,
116,111,
83,116,
114,105,
110,103,
46,99,
97,108,
108,40,
111,98,
106,41,
32,61,
61,61,
32,34,
91,111,
98,106,
101,99,
116,32,
65,114,
114,97,
121,93,
34,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
116,114,
117,101,
59,10,
32,32,
32,32,
32,32,
32,32,
125,32,
47,47,
32,110,
111,32,
111,116,
104,101,
114,32,
116,121,
112,101,
115,32,
110,101,
101,100,
32,115,
117,112,
112,111,
114,116,
32,105,
110,32,
99,117,
114,114,
101,110,
116,32,
99,111,
100,101,
98,97,
115,101,
10,32,
32,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
102,97,
108,115,
101,59,
10,32,
32,32,
32,125,
44,10,
32,32,
32,32,
10,32,
32,32,
32,47,
47,32,
99,111,
112,105,
101,115,
32,99,
111,110,
116,101,
110,116,
115,32,
111,102,
32,96,
98,96,
32,111,
118,101,
114,32,
99,111,
112,121,
32,111,
102,32,
96,97,
96,10,
32,32,
32,32,
109,101,
114,103,
101,100,
67,111,
112,121,
58,32,
102,117,
110,99,
116,105,
111,110,
40,97,
44,32,
98,41,
32,123,
10,32,
32,32,
32,32,
32,118,
97,114,
32,99,
111,112,
121,32,
61,32,
123,125,
59,10,
32,32,
32,32,
32,32,
102,111,
114,32,
40,118,
97,114,
32,107,
101,121,
32,105,
110,32,
97,41,
32,105,
102,32,
40,97,
46,104,
97,115,
79,119,
110,80,
114,111,
112,101,
114,116,
121,40,
107,101,
121,41,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
99,111,
112,121,
91,107,
101,121,
93,32,
61,32,
97,91,
107,101,
121,93,
59,10,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
102,111,
114,32,
40,118,
97,114,
32,107,
101,121,
32,105,
110,32,
98,41,
32,105,
102,32,
40,98,
46,104,
97,115,
79,119,
110,80,
114,111,
112,101,
114,116,
121,40,
107,101,
121,41,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
99,111,
112,121,
91,107,
101,121,
93,32,
61,32,
98,91,
107,101,
121,93,
59,10,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,99,
111,112,
121,59,
10,32,
32,32,
32,125,
44,10,
32,32,
32,32,
10,32,
32,32,
32,47,
47,32,
99,111,
110,118,
101,114,
116,115,
32,115,
112,101,
99,105,
97,108,
32,72,
84,77,
76,32,
99,104,
97,114,
97,99,
116,101,
114,115,
10,32,
32,32,
32,101,
115,99,
97,112,
101,72,
84,77,
76,58,
32,102,
117,110,
99,116,
105,111,
110,40,
115,41,
32,123,
10,32,
32,32,
32,32,
32,118,
97,114,
32,104,
116,109,
108,67,
104,97,
114,115,
82,69,
32,61,
32,110,
101,119,
32,82,
101,103,
69,120,
112,40,
34,38,
40,63,
33,92,
92,119,
43,59,
41,124,
91,92,
34,39,
60,62,
92,92,
92,92,
93,34,
44,32,
34,103,
34,41,
59,10,
32,32,
32,32,
32,32,
114,101,
116,117,
114,110,
32,115,
46,114,
101,112,
108,97,
99,101,
40,104,
116,109,
108,67,
104,97,
114,115,
82,69,
44,32,
102,117,
110,99,
116,105,
111,110,
40,99,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
115,119,
105,116,
99,104,
40,99,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
99,97,
115,101,
32,34,
38,34,
58,32,
114,101,
116,117,
114,110,
32,34,
38,97,
109,112,
59,34,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
99,97,
115,101,
32,34,
92,92,
34,58,
32,114,
101,116,
117,114,
110,32,
34,92,
92,92,
92,34,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
99,97,
115,101,
32,39,
34,39,
58,32,
114,101,
116,117,
114,110,
32,39,
92,34,
39,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,99,
97,115,
101,32,
34,39,
34,58,
32,114,
101,116,
117,114,
110,32,
39,38,
35,51,
57,59,
39,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,99,
97,115,
101,32,
34,60,
34,58,
32,114,
101,116,
117,114,
110,32,
34,38,
108,116,
59,34,
59,10,
32,32,
32,32,
32,32,
32,32,
32,32,
99,97,
115,101,
32,34,
62,34,
58,32,
114,101,
116,117,
114,110,
32,34,
38,103,
116,59,
34,59,
10,32,
32,32,
32,32,
32,32,
32,32,
32,100,
101,102,
97,117,
108,116,
58,32,
114,101,
116,117,
114,110,
32,99,
59,10,
32,32,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
125,41,
59,10,
32,32,
32,32,
125,10,
32,32,
125,59,
10,10,
32,32,
114,101,
116,117,
114,110,
40,123,
10,32,
32,32,
32,110,
97,109,
101,58,
32,34,
109,117,
115,116,
97,99,
104,101,
46,106,
115,34,
44,10,
32,32,
32,32,
118,101,
114,115,
105,111,
110,58,
32,34,
48,46,
52,46,
48,45,
100,101,
118,34,
44,10,
32,32,
32,32,
10,32,
32,32,
32,47,
47,32,
119,114,
97,112,
32,105,
110,116,
101,114,
110,97,
108,32,
114,101,
110,100,
101,114,
32,102,
117,110,
99,116,
105,111,
110,10,
32,32,
32,32,
116,111,
95,104,
116,109,
108,58,
32,102,
117,110,
99,116,
105,111,
110,40,
116,101,
109,112,
108,97,
116,101,
44,32,
118,105,
101,119,
44,32,
112,97,
114,116,
105,97,
108,115,
44,32,
115,101,
110,100,
101,114,
41,32,
123,10,
32,32,
32,32,
32,32,
118,97,
114,32,
98,117,
102,102,
101,114,
32,61,
32,91,
93,59,
10,32,
32,32,
32,32,
32,118,
97,114,
32,114,
101,110,
100,101,
114,83,
101,110,
100,101,
114,32,
61,32,
115,101,
110,100,
101,114,
32,124,
124,32,
102,117,
110,99,
116,105,
111,110,
40,99,
104,117,
110,107,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
105,102,
32,40,
99,104,
117,110,
107,46,
108,101,
110,103,
116,104,
41,32,
123,10,
32,32,
32,32,
32,32,
32,32,
32,32,
98,117,
102,102,
101,114,
46,112,
117,115,
104,40,
99,104,
117,110,
107,41,
59,10,
32,32,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
125,10,
32,32,
32,32,
32,32,
118,97,
114,32,
114,101,
110,100,
101,114,
101,114,
32,61,
32,110,
101,119,
32,82,
101,110,
100,101,
114,101,
114,40,
114,101,
110,100,
101,114,
83,101,
110,100,
101,114,
41,59,
10,32,
32,32,
32,32,
32,10,
32,32,
32,32,
32,32,
114,101,
110,100,
101,114,
101,114,
46,114,
101,110,
100,101,
114,40,
116,101,
109,112,
108,97,
116,101,
44,32,
118,105,
101,119,
44,32,
112,97,
114,116,
105,97,
108,115,
41,59,
10,32,
32,32,
32,32,
32,10,
32,32,
32,32,
32,32,
105,102,
32,40,
33,115,
101,110,
100,101,
114,41,
32,123,
10,32,
32,32,
32,32,
32,32,
32,114,
101,116,
117,114,
110,32,
98,117,
102,102,
101,114,
46,106,
111,105,
110,40,
34,34,
41,59,
10,32,
32,32,
32,32,
32,125,
10,32,
32,32,
32,125,
10,32,
32,125,
41,59,
10,125,
40,41,
59,10,
101,120,
112,111,
114,116,
115,46,
110,97,
109,101,
32,61,
32,77,
117,115,
116,97,
99,104,
101,46,
110,97,
109,101,
59,10,
101,120,
112,111,
114,116,
115,46,
118,101,
114,115,
105,111,
110,32,
61,32,
77,117,
115,116,
97,99,
104,101,
46,118,
101,114,
115,105,
111,110,
59,10,
10,101,
120,112,
111,114,
116,115,
46,116,
111,95,
104,116,
109,108,
32,61,
32,102,
117,110,
99,116,
105,111,
110,40,
41,32,
123,10,
32,32,
114,101,
116,117,
114,110,
32,77,
117,115,
116,97,
99,104,
101,46,
116,111,
95,104,
116,109,
108,46,
97,112,
112,108,
121,40,
116,104,
105,115,
44,32,
97,114,
103,117,
109,101,
110,116,
115,41,
59,10,
125,59>>}]}},
{<<"language">>,
<<"javascript">>},
{<<"views">>,
{[{<<"by_path">>,
{[{<<"map">>,
<<"function (doc) {\n if (doc.type != \"http://stemstorage.net/glob/post\") return;\n if (doc.path) emit(doc.path.split(\"/\"));\n}">>}]}},
{<<"by_date">>,
{[{<<"map">>,
<<"function(doc) {\n if (doc.type != \"http://stemstorage.net/glob/post\") return;\n if (!doc.published) return;\n \n var exports = {};\n /* Simple workaround for older JavaScript engines that\n * do not understand the One True Date Format.\n * This doesn't totally mimic new Date(), just string parsing.\n */\nexports.newDate = function (rfc3339) {\n var temp = Date.parse(rfc3339);\n if (isNaN(temp)) {\n // this technique is borrowed from jquery.couch.app.util's $.prettyDate\n temp = rfc3339.replace(/-/g,\"/\").replace(\"T\", \" \").replace(\"Z\", \" +0000\").replace(/(\\d*\\:\\d*:\\d*)\\.\\d*/g,\"$1\");\n }\n return new Date(temp);\n};\n\nexports.toUTCComponents = function (date) {\n\treturn [\n\t\tdate.getUTCFullYear(), // 0\n\t\tdate.getUTCMonth() + 1, // 1\n\t\tdate.getUTCDate(), // 2\n\t\tdate.getUTCHours(), // 3\n\t\tdate.getUTCMinutes(), // 4\n\t\tdate.getUTCSeconds() + (date.getUTCMilliseconds() / 1000)\n ];\n};\n\nexports.toRFC3339 = function (date) {\n // after https://github.com/couchapp/couchapp/blob/master/vendor/lib/atom.js\n \n function f(n) { // Format integers to have at least two digits.\n return n < 10 ? '0' + n : '' + n;\n }\n var d = exports.toUTCComponents(date);\n return d[0] + '-' + f(d[1]) + '-' + f(d[2]) + 'T' + f(d[3]) + ':' + f(d[4]) + ':' + f(d[5]) + 'Z'\n};\n\n var date = exports;\n \n emit(date.toUTCComponents(date.newDate(doc.published)));\n}">>},
{<<"reduce">>,
<<"function (keys, values, rereduce) {\n\treturn (rereduce) ? sum(values) : keys.length;\n};">>}]}}]}},
{<<"lists">>,
{[{<<"posts">>,
<<"function(head, req) {\n var ddoc = this;\n \n function setHTMLContent(doc) {\n if (!doc.markdown_content) return;\n \n var md = require('lib/markdown');\n \n var contentTree = md.toHTMLTree(doc.markdown_content);\n function convertRelative(node) {\n var attributes, children;\n if (!Array.isArray(node)) return; // text node, skip\n if (typeof node[1] == \"object\" && !Array.isArray(node[1])) {\n attributes = node[1];\n children = node.slice(2);\n } else {\n attributes = {};\n children = node.slice(1);\n }\n Object.keys(attributes).forEach(function (key) {\n if (key == 'href' || key == 'src') {\n var link = attributes[key];\n if (link.indexOf(\"./\") == 0) {\n link = ddoc.blog.base_url + '/resource/' + doc._id + '/' + link.slice(2);\n }\n attributes[key] = link;\n }\n });\n children.forEach(convertRelative);\n }\n convertRelative(contentTree);\n doc.html_content = md.renderJsonML(contentTree);\n }\n \n provides(\"html\", function () {\n var Mustache = require(\"lib/mustache\");\n var postToTheme = require(\"lib/glob\").postToTheme;\n var path = require(\"lib/path\").init(req);\n var lastRow;\n var list = function () {\n var row = getRow();\n if (row) {\n lastRow = row;\n if (req.query.summary) {\n delete row.doc.html_content;\n } else if (!row.doc.html_content) {\n setHTMLContent(row.doc);\n }\n }\n return row && postToTheme(row.doc, ddoc.blog.base_url);\n }\n list.iterator = true;\n \n var data = ddoc.blog;\n data.atom_url = data.base_url + \"/?format=atom\";\n data.summary = Boolean(req.query.summary);\n data.single = Boolean(req.query.key); // assume only one post per view key\n data.post = (data.single) ? list() : list;\n data.lastRow = function () {\n if (lastRow) {\n lastRow.key = JSON.stringify(lastRow.key);\n }\n return lastRow;\n };\n return Mustache.to_html(ddoc.templates.theme, data, ddoc.templates.partials);\n });\n provides(\"atom\", function () {\n // hat tip to https://github.com/jchris/sofa/blob/master/lists/index.js\n var Atom = require(\"lib/atom\");\n var toRFC3339 = require(\"lib/date\").toRFC3339;\n \n // load the first row to find the most recent change date\n var row = getRow();\n var blog = ddoc.blog;\n blog.updated = (row) ? (row.doc.updated || row.doc.published) : toRFC3339(new Date());\n blog.self = blog.base_url + \"/?format=atom\";\n send(Atom.header(blog));\n \n while (row) {\n var post = row.doc;\n if (req.query.summary) {\n delete post.html_content;\n } else if (!post.html_content) {\n setHTMLContent(post);\n }\n post.uri = post.alternate = ddoc.blog.base_url + '/' + post.path;\n send(Atom.entry(post));\n row = getRow();\n }\n \n send(Atom.footer());\n });\n provides(\"json\", function() {\n return JSON.stringify(req, null, 4) + JSON.stringify(getRow(), null, 4);\n });\n}">>}]}},
{<<"blog">>,
{[{<<"base_url">>,
<<"http://n.exts.ch">>},
{<<"author">>,
<<"Nathan Vander Wilt">>},
{<<"base_url-dev">>,
<<"http://localhost:5984/dev/_design/glob/_rewrite">>},
{<<"uri">>,
<<"http://www.extinguishedscholar.com/wpglob/?feed=atom">>},
{<<"title">>,
<<"a glob of nerdishness">>}]}},
{<<"README">>,
<<"## Glob - Barebones Blog\n\nThis blog app simply renders HTML5 post content stored in CouchDB using a versatile list function.">>},
{<<"updates">>,
{[]}},
{<<"validate_doc_update">>,
<<"function(newDoc, oldDoc, userCtx) {\n\tif (userCtx.roles.indexOf('_admin') === -1) {\n\t\tthrow({unauthorized : 'read-only, much sorries'});\n\t}\n}">>},
{<<"couchapp">>,
{[{<<"manifest">>,
[<<"README.md">>,
<<"blog.json">>,
<<"couchapp.json">>,
<<"language">>,
<<"lib/">>,
<<"lib/atom.js">>,
<<"lib/date.js">>,
<<"lib/glob.js">>,
<<"lib/markdown.js">>,
<<"lib/mustache.js">>,
<<"lib/path.js">>,
<<"lists/">>,
<<"lists/posts.js">>,
<<"rewrites.json">>,
<<"templates/">>,
<<"templates/theme.html">>,
<<"updates/">>,
<<"validate_doc_update.js">>,
<<"views/">>,
<<"views/by_date/">>,
<<"views/by_date/map.js">>,
<<"views/by_date/reduce.js">>,
<<"views/by_path/">>,
<<"views/by_path/map.js">>]},
{<<"signatures">>,
{[{<<"logo.png">>,
<<"748b138b5c2178e9464c72ce25f008d3">>},
{<<"nerdishness.html">>,
<<"4a58bb5bff616f90c3d048b25c0de4f1">>},
{<<"nerdishness-large.png">>,
<<"2ad21181768d19d2a62a9f7922aa7078">>},
{<<".DS_Store">>,
<<"194577a7e20bdcc7afbb718f502c134c">>}]}},
{<<"name">>,
<<"Glob">>},
{<<"objects">>,
{[{<<"cba128e43051002d834e9d7cfb92543b">>,
<<"function(doc) {\n if (doc.type != \"http://stemstorage.net/glob/post\") return;\n if (!doc.published) return;\n \n var exports = {};\n // !code lib/date.js\n var date = exports;\n \n emit(date.toUTCComponents(date.newDate(doc.published)));\n}">>}]}},
{<<"description">>,
<<"Barebones blog">>}]}}]},
[{att,
<<"logo.png">>,
<<"image/png">>,
34040,34040,
<<116,139,19,139,
92,33,120,233,
70,76,114,206,
37,240,8,211>>,
1,
{<0.139.0>,
[{21946459,
34040}]},
identity},
{att,
<<"nerdishness.html">>,
<<"text/html">>,
2915,6134,
<<192,32,156,146,
183,41,52,208,
208,66,0,51,47,
25,184,190>>,
1,
{<0.139.0>,
[{21980511,
2915}]},
gzip},
{att,
<<"nerdishness-large.png">>,
<<"image/png">>,
461324,461324,
<<42,210,17,129,
118,141,25,210,
166,42,159,121,
34,170,112,120>>,
1,
{<0.139.0>,
[{21983431,
461324}]},
identity},
{att,
<<".DS_Store">>,
<<>>,6148,6148,
<<25,69,119,167,
226,11,220,199,
175,187,113,143,
80,44,19,76>>,
1,
{<0.139.0>,
[{22444871,
6148}]},
identity}],
false,[]},
{<<"_design/glob">>,
<<"65-f0a3c9e3b7cfaf9f6ff06fa7dedac69b">>}}]}}}
[Tue, 28 Feb 2012 23:25:24 GMT] [info] [<0.97.0>] Attempting to start replication `1923d021041369fafcc21882bf288ab3+continuous` (document `from_iriscouch_public`).
[Tue, 28 Feb 2012 23:25:24 GMT] [info] [<0.32.0>] Apache CouchDB has started on http://0.0.0.0:5984/
[Tue, 28 Feb 2012 23:25:25 GMT] [info] [<0.107.0>] Document `from_iriscouch_public` triggered replication `1923d021041369fafcc21882bf288ab3+continuous`
[Tue, 28 Feb 2012 23:25:25 GMT] [info] [<0.106.0>] starting new replication "1923d021041369fafcc21882bf288ab3+continuous" at <0.107.0>
[Tue, 28 Feb 2012 23:25:37 GMT] [info] [<0.247.0>] 66.96.68.196 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:25:37 GMT] [info] [<0.248.0>] 66.96.68.196 - - 'GET' /public/_design/glob/logo.png?doc_id=_design 304
[Tue, 28 Feb 2012 23:25:37 GMT] [info] [<0.249.0>] 66.96.68.196 - - 'GET' /public/new_blog/truck.png?doc_id=new_blog 304
[Tue, 28 Feb 2012 23:25:40 GMT] [info] [<0.275.0>] 66.96.68.196 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:25:40 GMT] [info] [<0.248.0>] 66.96.68.196 - - 'GET' /public/_design/glob/logo.png?doc_id=_design 304
[Tue, 28 Feb 2012 23:25:40 GMT] [info] [<0.249.0>] 66.96.68.196 - - 'GET' /public/new_blog/truck.png?doc_id=new_blog 304
[Tue, 28 Feb 2012 23:26:24 GMT] [info] [<0.97.0>] Attempting to start replication `1923d021041369fafcc21882bf288ab3+continuous` (document `from_iriscouch_public`).
[Tue, 28 Feb 2012 23:26:24 GMT] [info] [<0.32.0>] Apache CouchDB has started on http://0.0.0.0:5984/
[Tue, 28 Feb 2012 23:26:25 GMT] [info] [<0.107.0>] Document `from_iriscouch_public` triggered replication `1923d021041369fafcc21882bf288ab3+continuous`
[Tue, 28 Feb 2012 23:26:25 GMT] [info] [<0.106.0>] starting new replication "1923d021041369fafcc21882bf288ab3+continuous" at <0.107.0>
[Tue, 28 Feb 2012 23:26:27 GMT] [info] [<0.157.0>] 66.96.68.196 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:26:27 GMT] [info] [<0.158.0>] 66.96.68.196 - - 'GET' /public/_design/glob/logo.png?doc_id=_design 304
[Tue, 28 Feb 2012 23:26:27 GMT] [info] [<0.159.0>] 66.96.68.196 - - 'GET' /public/new_blog/truck.png?doc_id=new_blog 304
[Tue, 28 Feb 2012 23:26:28 GMT] [info] [<0.173.0>] 66.96.68.196 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:26:28 GMT] [info] [<0.158.0>] 66.96.68.196 - - 'GET' /public/_design/glob/logo.png?doc_id=_design 304
[Tue, 28 Feb 2012 23:26:28 GMT] [info] [<0.159.0>] 66.96.68.196 - - 'GET' /public/new_blog/truck.png?doc_id=new_blog 304
[Tue, 28 Feb 2012 23:30:30 GMT] [info] [<0.97.0>] Attempting to start replication `1923d021041369fafcc21882bf288ab3+continuous` (document `from_iriscouch_public`).
[Tue, 28 Feb 2012 23:30:30 GMT] [info] [<0.32.0>] Apache CouchDB has started on http://0.0.0.0:5984/
[Tue, 28 Feb 2012 23:30:32 GMT] [info] [<0.107.0>] Document `from_iriscouch_public` triggered replication `1923d021041369fafcc21882bf288ab3+continuous`
[Tue, 28 Feb 2012 23:30:32 GMT] [info] [<0.106.0>] starting new replication "1923d021041369fafcc21882bf288ab3+continuous" at <0.107.0>
[Tue, 28 Feb 2012 23:30:42 GMT] [info] [<0.229.0>] 66.96.68.196 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:30:42 GMT] [info] [<0.246.0>] 66.96.68.196 - - 'GET' /public/_design/glob/logo.png?doc_id=_design 304
[Tue, 28 Feb 2012 23:30:42 GMT] [info] [<0.255.0>] 66.96.68.196 - - 'GET' /public/new_blog/truck.png?doc_id=new_blog 304
[Tue, 28 Feb 2012 23:30:59 GMT] [info] [<0.400.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:00 GMT] [info] [<0.401.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:00 GMT] [info] [<0.402.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:00 GMT] [info] [<0.403.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:00 GMT] [info] [<0.404.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:00 GMT] [info] [<0.405.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:01 GMT] [info] [<0.406.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:02 GMT] [info] [<0.407.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.408.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.409.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.410.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.411.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.412.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.414.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.413.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.415.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.417.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.418.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.419.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.420.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.421.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.426.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.427.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.428.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.429.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.430.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.432.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.433.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.434.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.435.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.436.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.439.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:03 GMT] [info] [<0.440.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.441.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.442.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.443.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.445.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.446.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.447.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.448.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.449.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.452.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.453.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.454.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.455.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.456.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.460.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.461.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.462.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.463.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.464.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.465.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.466.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.467.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.468.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.469.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.470.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:04 GMT] [info] [<0.471.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.472.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.473.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.474.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.477.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.478.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.479.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.480.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.481.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.482.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.485.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.486.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.487.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.488.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.489.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.490.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.491.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.492.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.493.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.494.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.497.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.498.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.499.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.500.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.501.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:06 GMT] [info] [<0.503.0>] 174.129.150.86 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:31:08 GMT] [info] [<0.760.0>] 66.96.68.196 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 304
[Tue, 28 Feb 2012 23:34:27 GMT] [info] [<0.97.0>] Attempting to start replication `1923d021041369fafcc21882bf288ab3+continuous` (document `from_iriscouch_public`).
[Tue, 28 Feb 2012 23:34:27 GMT] [info] [<0.32.0>] Apache CouchDB has started on http://0.0.0.0:5984/
[Tue, 28 Feb 2012 23:34:28 GMT] [info] [<0.107.0>] Document `from_iriscouch_public` triggered replication `1923d021041369fafcc21882bf288ab3+continuous`
[Tue, 28 Feb 2012 23:34:28 GMT] [info] [<0.106.0>] starting new replication "1923d021041369fafcc21882bf288ab3+continuous" at <0.107.0>
[Tue, 28 Feb 2012 23:34:35 GMT] [info] [<0.193.0>] 66.188.106.43 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true&format=atom 200
[Tue, 28 Feb 2012 23:35:43 GMT] [info] [<0.813.0>] 71.97.105.90 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true&format=atom 304
[Tue, 28 Feb 2012 23:36:43 GMT] [info] [<0.97.0>] Attempting to start replication `1923d021041369fafcc21882bf288ab3+continuous` (document `from_iriscouch_public`).
[Tue, 28 Feb 2012 23:36:43 GMT] [info] [<0.32.0>] Apache CouchDB has started on http://0.0.0.0:5984/
[Tue, 28 Feb 2012 23:36:44 GMT] [info] [<0.107.0>] Document `from_iriscouch_public` triggered replication `1923d021041369fafcc21882bf288ab3+continuous`
[Tue, 28 Feb 2012 23:36:44 GMT] [info] [<0.106.0>] starting new replication "1923d021041369fafcc21882bf288ab3+continuous" at <0.107.0>
[Tue, 28 Feb 2012 23:36:47 GMT] [error] [<0.194.0>] {error_report,<0.31.0>,
{<0.194.0>,crash_report,
[[{initial_call,{couch_file,init,['Argument__1']}},
{pid,<0.194.0>},
{registered_name,[]},
{error_info,
{exit,
{{badmatch,{error,eacces}},
[{couch_file,init,1,
[{file,
"/home/ubuntu/build-couchdb/dependencies/couchdb/src/couchdb/couch_file.erl"},
{line,278}]},
{gen_server,init_it,6,
[{file,"gen_server.erl"},{line,297}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,227}]}]},
[{gen_server,init_it,6,
[{file,"gen_server.erl"},{line,321}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,227}]}]}},
{ancestors,[<0.193.0>,<0.192.0>]},
{messages,[]},
{links,[#Port<0.1615>,<0.193.0>]},
{dictionary,[]},
{trap_exit,true},
{status,running},
{heap_size,987},
{stack_size,24},
{reductions,632}],
[]]}}
[Tue, 28 Feb 2012 23:36:47 GMT] [info] [<0.175.0>] 66.96.68.196 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 500
[Tue, 28 Feb 2012 23:36:57 GMT] [info] [<0.97.0>] Attempting to start replication `1923d021041369fafcc21882bf288ab3+continuous` (document `from_iriscouch_public`).
[Tue, 28 Feb 2012 23:36:57 GMT] [info] [<0.32.0>] Apache CouchDB has started on http://0.0.0.0:5984/
[Tue, 28 Feb 2012 23:36:58 GMT] [info] [<0.107.0>] Document `from_iriscouch_public` triggered replication `1923d021041369fafcc21882bf288ab3+continuous`
[Tue, 28 Feb 2012 23:36:58 GMT] [info] [<0.106.0>] starting new replication "1923d021041369fafcc21882bf288ab3+continuous" at <0.107.0>
[Tue, 28 Feb 2012 23:36:59 GMT] [info] [<0.113.0>] 66.96.68.196 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:36:59 GMT] [info] [<0.157.0>] 66.96.68.196 - - 'GET' /public/_design/glob/logo.png?doc_id=_design 304
[Tue, 28 Feb 2012 23:36:59 GMT] [info] [<0.165.0>] 66.96.68.196 - - 'GET' /public/new_blog/truck.png?doc_id=new_blog 200
[Tue, 28 Feb 2012 23:37:06 GMT] [info] [<0.220.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:06 GMT] [info] [<0.221.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:06 GMT] [info] [<0.222.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:06 GMT] [info] [<0.223.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:07 GMT] [info] [<0.224.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:07 GMT] [info] [<0.225.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:08 GMT] [info] [<0.226.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.227.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.228.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.229.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.230.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.231.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.232.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.233.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.234.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.235.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.237.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.238.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.239.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.240.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.245.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.246.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.247.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.248.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.249.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.251.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.252.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.253.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.254.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.255.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.257.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:09 GMT] [info] [<0.258.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.259.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.260.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.261.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.263.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.264.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.265.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.266.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.267.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.271.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.272.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.273.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.274.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.275.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.278.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.279.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.280.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.281.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.282.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.286.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.287.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.288.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.289.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.290.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:10 GMT] [info] [<0.293.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:11 GMT] [info] [<0.294.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:11 GMT] [info] [<0.295.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:11 GMT] [info] [<0.296.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.297.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.298.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.299.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.300.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.301.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.302.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.305.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.306.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.307.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.308.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.309.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.312.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.313.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.314.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.315.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.316.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.320.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.321.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.322.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.324.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.325.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.328.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:12 GMT] [info] [<0.329.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.330.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.331.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.332.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.333.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.336.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.337.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.338.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.339.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.340.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.343.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.344.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.345.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.346.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.347.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.352.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.353.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.354.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:13 GMT] [info] [<0.355.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:14 GMT] [info] [<0.356.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:14 GMT] [info] [<0.360.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:14 GMT] [info] [<0.361.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:14 GMT] [info] [<0.362.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:14 GMT] [info] [<0.363.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:14 GMT] [info] [<0.364.0>] 174.129.89.5 - - 'GET' /public/_design/glob/_list/posts/by_date?descending=true&reduce=false&limit=5&include_docs=true 200
[Tue, 28 Feb 2012 23:37:15 GMT] [error] [<0.367.0>] Uncaught error in HTTP request: {exit,
{timeout,
{gen_server,call,
[couch_query_servers,
{get_proc,
{doc,
<<"_design/glob">>,
{65,
[<<240,163,201,227,
183,207,175,159,
111,240,111,167,
222,218,198,155>>,
<<251,128,168,40,
119,96,24,88,127,
9,91,222,218,221,
221,53>>,
<<25,78,35,249,234,
136,43,44,84,94,
240,80,208,133,
143,239>>,
<<151,52,194,5,98,
125,31,190,135,
113,62,78,84,37,
167,234>>,
<<85,249,92,93,157,
233,16,203,110,
194,228,83,205,
139,216,7>>,
<<164,179,80,41,
233,21,46,119,43,
95,183,194,12,78,
12,221>>,
<<71,182,66,131,
204,89,74,48,4,
39,157,173,73,
241,173,80>>,
<<42,24,37,171,240,
44,25,122,56,33,
108,40,203,186,
113,29>>,
<<206,112,225,167,
19,107,135,127,
172,42,101,158,
26,127,151,242>>,
<<170,77,84,186,
236,32,135,8,156,
107,220,213,214,
210,193,113>>,
<<158,251,180,216,
77,52,208,144,
229,114,102,83,
249,0,135,141>>,
<<58,89,113,180,
129,152,2,151,51,
252,36,165,229,
22,203,221>>,
<<85,121,95,87,126,
65,108,215,96,
231,70,11,217,
131,59,100>>,
<<129,54,33,54,210,
171,232,125,223,
117,68,92,29,218,
172,166>>,
<<132,50,230,172,
127,90,29,102,
172,208,190,158,
156,60,198,236>>,
<<3,35,192,226,105,
177,225,253,94,
64,199,131,242,
240,26,81>>,
<<208,245,167,189,
33,114,152,203,
158,17,171,28,
199,40,186,117>>,
<<"?c®B?6?b?Z??j%?">>,
<<131,228,19,216,
99,92,56,186,125,
100,141,79,255,
30,231,91>>,
<<32,214,93,222,20,
90,19,107,252,
132,83,40,222,
228,73,95>>,
<<122,54,115,160,
174,193,11,120,
21,220,60,192,86,
14,233,32>>,
<<91,66,87,47,58,
104,58,57,137,
199,173,178,56,
150,19,99>>,
<<106,212,106,94,
211,20,54,163,
192,122,92,161,
13,40,168,170>>,
<<15,19,174,145,
210,96,205,95,
149,110,79,98,
191,200,45,11>>,
<<76,47,14,42,28,
170,175,122,20,
166,152,217,70,
46,48,244>>,
<<232,166,90,253,
193,195,118,2,38,
49,225,55,109,85,
143,104>>,
<<153,158,101,153,
35,94,203,68,241,
126,153,76,255,
97,90,104>>,
<<160,215,165,30,
245,154,153,58,
232,138,48,163,
82,7,143,223>>,
<<11,73,198,27,47,
156,174,134,93,
114,75,16,226,
190,95,99>>,
<<96,221,47,80,116,
133,84,156,208,
144,189,82,184,
133,58,151>>,
<<51,116,212,13,
157,56,17,117,
166,245,83,211,
22,30,122,24>>,
<<185,216,50,147,
119,17,198,139,
116,125,195,146,
121,199,135,89>>,
<<125,147,12,15,63,
71,73,227,16,126,
124,203,4,40,39,
205>>,
<<159,191,234,48,7,
167,30,132,220,
84,117,28,70,15,
18,167>>,
<<13,67,44,20,40,
168,172,89,57,
232,244,250,27,
167,25,175>>,
<<160,133,198,236,
94,207,78,211,
152,69,44,102,
232,130,86,31>>,
<<57,180,26,202,42,
91,57,195,28,243,
181,84,30,162,10,
95>>,
<<69,186,224,152,
99,90,20,96,124,
75,195,172,46,59,
132,72>>,
<<103,227,253,14,
65,122,221,227,
72,250,154,67,84,
22,108,37>>,
<<249,255,133,60,
60,129,163,189,
30,236,147,8,101,
143,69,36>>,
<<147,13,231,206,
175,70,60,70,162,
171,223,234,74,
107,172,220>>,
<<162,218,179,102,
237,152,137,56,
21,85,10,162,81,
83,252,205>>,
<<42,19,103,54,1,
20,141,119,192,3,
195,231,2,14,238,
141>>,
<<74,51,189,14,87,
112,149,67,228,
151,144,211,224,
65,114,176>>,
<<233,27,102,211,
69,10,0,40,130,
119,184,59,214,
119,177,60>>,
<<199,224,145,89,
164,113,176,115,
211,203,232,23,
18,132,251,215>>,
<<227,104,125,137,
157,75,70,217,55,
109,186,95,223,
255,200,30>>,
<<"\\hZ???I.8??#???\f">>,
<<159,232,209,128,
30,177,16,209,
174,246,55,0,10,
137,65,27>>,
<<24,235,143,200,
169,205,9,211,44,
250,147,29,241,
227,227,197>>,
<<192,167,96,80,
239,205,154,20,
126,194,68,231,
98,91,177,8>>,
<<98,171,183,186,
239,224,146,37,
78,15,107,105,
205,115,238,82>>,
<<200,96,19,194,71,
77,83,218,102,
101,222,161,5,
128,111,190>>,
<<75,246,251,178,
160,161,174,57,
20,190,111,96,57,
195,44,219>>,
<<208,180,240,212,
61,157,10,98,49,
10,143,255,43,24,
49,128>>,
<<98,47,36,155,242,
241,182,194,8,85,
199,8,19,130,51,
18>>,
<<110,0,193,234,
116,169,150,163,
186,132,41,80,
148,141,215,120>>,
<<137,140,52,83,11,
29,216,35,236,45,
219,194,126,130,
207,216>>,
<<113,170,126,69,
187,52,105,155,
247,167,148,26,
60,230,210,149>>,
<<133,6,115,126,
246,188,175,58,
247,148,131,113,
149,83,57,15>>,
<<141,160,59,220,
15,65,100,52,40,
218,175,242,119,
2,52,106>>,
<<242,44,70,159,
134,23,28,104,
126,52,143,45,53,
78,250,130>>,
<<28,73,80,231,246,
43,64,172,247,
232,43,24,13,135,
200,89>>,
<<190,159,8,169,
231,180,201,217,
216,83,190,209,
108,28,228,140>>,
<<7,189,31,241,
179,245,215,
219,163,224,
147,6,126,79,
192,212>>]},
{[{<<"templates">>,
{[{<<"theme">>,
<<"<!doctype html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>{{#single}}{{#post}}{{ title }}{{/post}} - {{/single}}a glob of nerdishness</title>\n\n<link rel=\"index\" title=\"a glob of nerdishness\" href=\"{{ base_url }}\">\n<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Feed\" href=\"{{ atom_url }}\">\n\n<style>\n /* http://html5doctor.com/html-5-reset-stylesheet/#comment-454 */\n body { margin:0; padding:0; }\n p { margin: 1em 0; }\n \n /* http://doctype.com/html5-reset-css#answer_43 */\n img { border: none; }\n a { outline-style: none; }\n</style>\n<style>\n body { min-width: 475px; }\n body { font-family: Palatino; }\n header { font-family: Monaco, monospace; }\n footer { margin: 0.5em; font-family: Monaco, monospace; }\n \n body > header { padding-top: 0em; }\n body > header img { float: left; height: 200px; }\n body > header.single img { height: 100px; }\n body > header p { font-size: 80%; font-style: italic; margin: 0em; padding-top: 2em; }\n body > header h1 { font-size: 250%; margin: 0em; }\n body > header h2 { font-size: 90%; font-weight: normal; margin: 0em; }\n \n body > p { clear: both; padding: 2em; }\n article { clear: both; padding: 2em 5em; max-width: 635px; }\n article { text-align: justify; line-height: 1.5em; }\n article > header { margin-bottom: 1em; }\n article > header h1 { font-size: 105%; margin: 0; }\n article > header p { font-size: 75%; margin: 0; padding: 0; text-indent: 0; }\n article .content { margin: 0 -1.5em; }\n article .content p { text-indent: 1.5em; margin: 0; }\n article .content li > p { text-indent: 0; }\n #disqus_thread { margin-top: 5em; }\n \n a:link { color: #008; }\n a:visited { color: #559; }\n a:hover { color: #900; }\n \n a:link.subtle { color: inherit; text-decoration: none; }\n a:visited.subtle { color: inherit; text-decoration: none; }\n a:hover.subtle { color: #008; text-decoration: underline; }\n \n a:link.expected { color: inherit; }\n a:visited.expected { color: inherit; }\n a:hover.expected { color: #008; }\n</style>\n</head>\n<body>\n\n<header{{#single}} class=\"single\"{{/single}}>\n<img src=\"{{ base_url}}/resource/_design/glob/logo.png\" alt>\n{{#single}}\n<h1><a href=\"{{ base_url }}\" rel=\"archives\" class=\"subtle\">a glob of nerd­ish­ness</a></h1>\n{{/single}}{{^single}}\n<p>\n<a href=\"http://exts.ch\" class=\"subtle\">natevw</a> proudly presents:\n<h1>a glob of nerd­ish­ness</h1>\n<h2>powered by work over time.</h2>\n{{/single}}\n</header>\n\n{{# post }}\n<article>\n<header>\n{{#single}}\n<h1>{{ title }}</h1>\n<p>\npublished by <a href=\"http://exts.ch\" class=\"subtle\">natevw</a> on <a href=\"{{ url }}\" rel=\"bookmark\" class=\"subtle\"><time datetime=\"{{ published }}\" pubdate>{{ published_human }}</time></a>\n{{/single}}{{^single}}\n<time datetime=\"{{ published }}\" pubdate>{{ published_human }}</time>\n<h1><a href=\"{{ url }}\" rel=\"bookmark\" class=\"expected\">{{ title }}</a></h1>\n{{/single}}\n</header>\n\n<section class=\"content\">\n{{{ html_content }}}\n</section>\n\n{{^summary}}\n{{#single}}<div id=\"disqus_thread\"></div><script>var disqus_identifier = '{{ _id }}';</script>{{/single}}\n{{^single}}<a href=\"{{ url }}#disqus_thread\" data-disqus-identifier=\"{{ _id }}\">comments</a>{{/single}}\n{{/summary}}\n</article>\n{{/ post }}\n\n{{^single}}{{^summary}}{{#lastRow}}\n<p>\n<a href=\"{{ base_url }}?startkey={{ key }}&amp;startkey_docid={{ id }}&amp;skip=1\" rel=\"next\">Older posts</a><br>\n<a href=\"{{ base_url }}/all\" rel=\"archives\">All posts</a>\n{{/lastRow}}{{/summary}}{{/single}}\n\n{{#summary}}{{#lastRow}}\n<p>\n<a href=\"{{ base_url }}\">Recent posts</a>\n{{/lastRow}}{{/summary}}\n\n{{^lastRow}}\n<!-- this really should be an actual lower-level 404 instead -->\n<p style=\"font-size: 125%;\">\nNo matching post{{^single}}s{{/single}} found.\n<p>\n<a href=\"{{ base_url }}\">Recent posts</a><br>\n<a href=\"http://www.extinguishedscholar.com/wpglob/\">Archive of old blog</a>\n{{/lastRow}}\n\n<footer>\n\n<small>Copyright © 2012 Nathan Vander Wilt. All rights reserved. Limit one offer per coupon.</small>\n</footer>\n\n<script type=\"text/javascript\">\n var disqus_shortname = 'nerdglob'; // required: replace example with your forum shortname\n //var disqus_developer = 1;\n</script>\n{{#single}}\n<script type=\"text/javascript\">\n /* * * DON'T EDIT BELOW THIS LINE * * */\n (function() {\n var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;\n dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';\n (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);\n })();\n</script>\n<noscript>Please enable JavaScript to view the <a href=\"http://disqus.com/?ref_noscript\">comments powered by Disqus.</a></noscript>\n<a href=\"http://disqus.com\" class=\"dsq-brlink\">blog comments powered by <span class=\"logo-disqus\">Disqus</span></a>\n{{/single}}\n{{^single}}\n<script type=\"text/javascript\">\n /* * * DON'T EDIT BELOW THIS LINE * * */\n (function () {\n var s = document.createElement('script'); s.async = true;\n s.type = 'text/javascript';\n s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';\n (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);\n }());\n</script>\n{{/single}}\n</body>\n</html>">>}]}},
{<<"rewrites">>,
[{[{<<"to">>,
<<"_list/posts/by_date">>},
{<<"from">>,
<<"/">>},
{<<"query">>,
{[{<<"descending">>,
<<"true">>},
{<<"reduce">>,
<<"false">>},
{<<"limit">>,
<<"5">>},
{<<"include_docs">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"_list/posts/by_date">>},
{<<"from">>,
<<"/all">>},
{<<"query">>,
{[{<<"descending">>,
<<"true">>},
{<<"reduce">>,
<<"false">>},
{<<"include_docs">>,
<<"true">>},
{<<"summary">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"../../:doc_id/*">>},
{<<"from">>,
<<"/resource/:doc_id/*">>}]},
{[{<<"to">>,
<<"_list/posts/by_path">>},
{<<"from">>,
<<"/:path1">>},
{<<"query">>,
{[{<<"key">>,
[<<":path1">>]},
{<<"include_docs">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"_list/posts/by_path">>},
{<<"from">>,
<<"/:path1/:path2">>},
{<<"query">>,
{[{<<"key">>,
[<<":path1">>,
<<":path2">>]},
{<<"include_docs">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"_list/posts/by_path">>},
{<<"from">>,
<<"/:path1/:path2/:path3">>},
{<<"query">>,
{[{<<"key">>,
[<<":path1">>,
<<":path2">>,
<<":path3">>]},
{<<"include_docs">>,
<<"true">>}]}}]},
{[{<<"to">>,
<<"_list/posts/by_path">>},
{<<"from">>,
<<"/:path1/:path2/:path3/:path4">>},
{<<"query">>,
{[{<<"key">>,
[<<":path1">>,
<<":path2">>,
<<":path3">>,
<<":path4">>]},
{<<"include_docs">>,
<<"true">>}]}}]}]},
{<<"lib">>,
{[{<<"markdown">>,
<<"// Released under MIT license\n// Copyright (c) 2009-2010 Dominic Baggott\n// Copyright (c) 2009-2010 Ash Berlin\n// Copyright (c) 2011 Christoph Dorn <christoph@christophdorn.com> (http://www.christophdorn.com)\n\n(function( expose ) {\n\n/**\n * class Markdown\n *\n * Markdown processing in Javascript done right. We have very particular views\n * on what constitutes 'right' which include:\n *\n * - produces well-formed HTML (this means that em and strong nesting is\n * important)\n *\n * - has an intermediate representation to allow processing of parsed data (We\n * in fact have two, both as [JsonML]: a markdown tree and an HTML tree).\n *\n * - is easily extensible to add new dialects without having to rewrite the\n * entire parsing mechanics\n *\n * - has a good test suite\n *\n * This implementation fulfills all of these (except that the test suite could\n * do with expanding to automatically run all the fixtures from other Markdown\n * implementations.)\n *\n * ##### Intermediate Representation\n *\n * *TODO* Talk about this :) Its JsonML, but document the node names we use.\n *\n * [JsonML]: http://jsonml.org/ \"JSON Markup Language\"\n **/\nvar Markdown = expose.Markdown = function Markdown(dialect) {\n switch (typeof dialect) {\n case \"undefined\":\n this.dialect = Markdown.dialects.Gruber;\n break;\n case \"object\":\n this.dialect = dialect;\n break;\n default:\n if (dialect in Markdown.dialects) {\n this.dialect = Markdown.dialects[dialect];\n }\n else {\n throw new Error(\"Unknown Markdown dialect '\" + String(dialect) + \"'\");\n }\n break;\n }\n this.em_state = [];\n this.strong_state = [];\n this.debug_indent = \"\";\n}\n\n/**\n * parse( markdown, [dialect] ) -> JsonML\n * - markdown (String): markdown string to parse\n * - dialect (String | Dialect): the dialect to use, defaults to gruber\n *\n * Parse `markdown` and return a markdown document as a Markdown.JsonML tree.\n **/\nexpose.parse = function( source, dialect ) {\n // dialect will default if undefined\n var md = new Markdown( dialect );\n return md.toTree( source );\n}\n\n/**\n * toHTML( markdown, [dialect] ) -> String\n * toHTML( md_tree ) -> String\n * - markdown (String): markdown string to parse\n * - md_tree (Markdown.JsonML): parsed markdown tree\n *\n * Take markdown (either as a string or as a JsonML tree) and run it through\n * [[toHTMLTree]] then turn it into a well-formated HTML fragment.\n **/\nexpose.toHTML = function toHTML( source , dialect , options ) {\n var input = expose.toHTMLTree( source , dialect , options );\n\n return expose.renderJsonML( input );\n}\n\n/**\n * toHTMLTree( markdown, [dialect] ) -> JsonML\n * toHTMLTree( md_tree ) -> JsonML\n * - markdown (String): markdown string to parse\n * - dialect (String | Dialect): the dialect to use, defaults to gruber\n * - md_tree (Markdown.JsonML): parsed markdown tree\n *\n * Turn markdown into HTML, represented as a JsonML tree. If a string is given\n * to this function, it is first parsed into a markdown tree by calling\n * [[parse]].\n **/\nexpose.toHTMLTree = function toHTMLTree( input, dialect , options ) {\n // convert string input to an MD tree\n if ( typeof input ===\"string\" ) input = this.parse( input, dialect );\n\n // Now convert the MD tree to an HTML tree\n\n // remove references from the tree\n var attrs = extract_attr( input ),\n refs = {};\n\n if ( attrs && attrs.references ) {\n refs = attrs.references;\n }\n\n var html = convert_tree_to_html( input, refs , options );\n merge_text_nodes( html );\n return html;\n}\n\nvar mk_block = Markdown.mk_block = function(block, trail, line) {\n // Be helpful for default case in tests.\n if ( arguments.length == 1 ) trail = \"\\n\\n\";\n\n var s = new String(block);\n s.trailing = trail;\n // To make it clear its not just a string\n s.toSource = function() {\n return \"Markdown.mk_block( \" +\n uneval(block) +\n \", \" +\n uneval(trail) +\n \", \" +\n uneval(line) +\n \" )\"\n }\n\n if (line != undefined)\n s.lineNumber = line;\n\n return s;\n}\n\nfunction count_lines( str ) {\n var n = 0, i = -1;;\n while ( ( i = str.indexOf('\\n', i+1) ) != -1) n++;\n return n;\n}\n\n\n// workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n// see also: https://github.com/andrewplummer/Sugar/issues/27\nfunction _exec(re, s) {\n return RegExp.prototype.exec.call(re, s);\n}\nfunction _test(re, s) {\n return RegExp.prototype.test.call(re, s);\n}\nfunction _source(re) {\n return (typeof re == 'string') ? re : RegExp.prototype.toString.call(re);\n}\n\n// Internal - split source into rough blocks\nMarkdown.prototype.split_blocks = function splitBlocks( input, startLine ) {\n // [\\s\\S] matches _anything_ (newline or space)\n var re = /([\\s\\S]+?)($|\\n(?:\\s*\\n|$)+)/g,\n blocks = [],\n m;\n\n var line_no = 1;\n\n if ( ( m = _exec(/^(\\s*\\n)/, input) ) != null ) {\n // skip (but count) leading blank lines\n line_no += count_lines( m[0] );\n re.lastIndex = m[0].length;\n }\n\n while ( ( m = _exec(re, input) ) != null ) {\n blocks.push( mk_block( m[1], m[2], line_no ) );\n line_no += count_lines( m[0] );\n }\n\n return blocks;\n}\n\n/**\n * Markdown#processBlock( block, next ) -> undefined | [ JsonML, ... ]\n * - block (String): the block to process\n * - next (Array): the following blocks\n *\n * Process `block` and return an array of JsonML nodes representing `block`.\n *\n * It does this by asking each block level function in the dialect to process\n * the block until one can. Succesful handling is indicated by returning an\n * array (with zero or more JsonML nodes), failure by a false value.\n *\n * Blocks handlers are responsible for calling [[Markdown#processInline]]\n * themselves as appropriate.\n *\n * If the blocks were split incorrectly or adjacent blocks need collapsing you\n * can adjust `next` in place using shift/splice etc.\n *\n * If any of this default behaviour is not right for the dialect, you can\n * define a `__call__` method on the dialect that will get invoked to handle\n * the block processing.\n */\nMarkdown.prototype.processBlock = function processBlock( block, next ) {\n var cbs = this.dialect.block,\n ord = cbs.__order__;\n\n if ( \"__call__\" in cbs ) {\n return cbs.__call__.call(this, block, next);\n }\n\n for ( var i = 0; i < ord.length; i++ ) {\n //D:this.debug( \"Testing\", ord[i] );\n var res = cbs[ ord[i] ].call( this, block, next );\n if ( res ) {\n //D:this.debug(\" matched\");\n if ( !isArray(res) || ( res.length > 0 && !( isArray(res[0]) ) ) )\n this.debug(ord[i], \"didn't return a proper array\");\n //D:this.debug( \"\" );\n return res;\n }\n }\n\n // Uhoh! no match! Should we throw an error?\n return [];\n}\n\nMarkdown.prototype.processInline = function processInline( block ) {\n return this.dialect.inline.__call__.call( this, String( block ) );\n}\n\n/**\n * Markdown#toTree( source ) -> JsonML\n * - source (String): markdown source to parse\n *\n * Parse `source` into a JsonML tree representing the markdown document.\n **/\n// custom_tree means set this.tree to `custom_tree` and restore old value on return\nMarkdown.prototype.toTree = function toTree( source, custom_root ) {\n var blocks = source instanceof Array\n ? source\n : this.split_blocks( source );\n\n // Make tree a member variable so its easier to mess with in extensions\n var old_tree = this.tree;\n try {\n this.tree = custom_root || this.tree || [ \"markdown\" ];\n\n blocks:\n while ( blocks.length ) {\n var b = this.processBlock( blocks.shift(), blocks );\n\n // Reference blocks and the like won't return any content\n if ( !b.length ) continue blocks;\n\n this.tree.push.apply( this.tree, b );\n }\n return this.tree;\n }\n finally {\n if ( custom_root )\n this.tree = old_tree;\n }\n\n}\n\n// Noop by default\nMarkdown.prototype.debug = function () {\n var args = Array.prototype.slice.call( arguments);\n args.unshift(this.debug_indent);\n if (typeof print !== \"undefined\")\n print.apply( print, args );\n if (typeof console !== \"undefined\" && typeof console.log !== \"undefined\")\n console.log.apply( null, args );\n}\n\nMarkdown.prototype.loop_re_over_block = function( re, block, cb ) {\n // Dont use /g regexps with this\n var m,\n b = block.valueOf();\n\n while ( b.length && (m = _exec(re, b) ) != null) {\n b = b.substr( m[0].length );\n cb.call(this, m);\n }\n return b;\n}\n\n/**\n * Markdown.dialects\n *\n * Namespace of built-in dialects.\n **/\nMarkdown.dialects = {};\n\n/**\n * Markdown.dialects.Gruber\n *\n * The default dialect that follows the rules set out by John Gruber's\n * markdown.pl as closely as possible. Well actually we follow the behaviour of\n * that script which in some places is not exactly what the syntax web page\n * says.\n **/\nMarkdown.dialects.Gruber = {\n block: {\n atxHeader: function atxHeader( block, next ) {\n var m = block.match( /^(#{1,6})\\s*(.*?)\\s*#*\\s*(?:\\n|$)/ );\n\n if ( !m ) return undefined;\n\n var header = [ \"header\", { level: m[ 1 ].length } ];\n Array.prototype.push.apply(header, this.processInline(m[ 2 ]));\n\n if ( m[0].length < block.length )\n next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );\n\n return [ header ];\n },\n\n setextHeader: function setextHeader( block, next ) {\n var m = block.match( /^(.*)\\n([-=])\\2\\2+(?:\\n|$)/ );\n\n if ( !m ) return undefined;\n\n var level = ( m[ 2 ] === \"=\" ) ? 1 : 2;\n var header = [ \"header\", { level : level }, m[ 1 ] ];\n\n if ( m[0].length < block.length )\n next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );\n\n return [ header ];\n },\n\n code: function code( block, next ) {\n // | Foo\n // |bar\n // should be a code block followed by a paragraph. Fun\n //\n // There might also be adjacent code block to merge.\n\n var ret = [],\n re = /^(?: {0,3}\\t| {4})(.*)\\n?/,\n lines;\n\n // 4 spaces + content\n var m = block.match( re );\n\n if ( !m ) return undefined;\n\n block_search:\n do {\n // Now pull out the rest of the lines\n var b = this.loop_re_over_block(\n re, block.valueOf(), function( m ) { ret.push( m[1] ) } );\n\n if (b.length) {\n // Case alluded to in first comment. push it back on as a new block\n next.unshift( mk_block(b, block.trailing) );\n break block_search;\n }\n else if (next.length) {\n // Check the next block - it might be code too\n var m = next[0].match( re );\n\n if ( !m ) break block_search;\n\n // Pull how how many blanks lines follow - minus two to account for .join\n ret.push ( block.trailing.replace(/[^\\n]/g, '').substring(2) );\n\n block = next.shift();\n }\n else\n break block_search;\n } while (true);\n\n return [ [ \"code_block\", ret.join(\"\\n\") ] ];\n },\n\n horizRule: function horizRule( block, next ) {\n // this needs to find any hr in the block to handle abutting blocks\n var m = block.match( /^(?:([\\s\\S]*?)\\n)?[ \\t]*([-_*])(?:[ \\t]*\\2){2,}[ \\t]*(?:\\n([\\s\\S]*))?$/ );\n\n if ( !m ) {\n return undefined;\n }\n\n var jsonml = [ [ \"hr\" ] ];\n\n // if there's a leading abutting block, process it\n if ( m[ 1 ] ) {\n jsonml.unshift.apply( jsonml, this.processBlock( m[ 1 ], [] ) );\n }\n\n // if there's a trailing abutting block, stick it into next\n if ( m[ 3 ] ) {\n next.unshift( mk_block( m[ 3 ] ) );\n }\n\n return jsonml;\n },\n\n // There are two types of lists. Tight and loose. Tight lists have no whitespace\n // between the items (and result in text just in the <li>) and loose lists,\n // which have an empty line between list items, resulting in (one or more)\n // paragraphs inside the <li>.\n //\n // There are all sorts weird edge cases about the original markdown.pl's\n // handling of lists:\n //\n // * Nested lists are supposed to be indented by four chars per level. But\n // if they aren't, you can get a nested list by indenting by less than\n // four so long as the indent doesn't match an indent of an existing list\n // item in the 'nest stack'.\n //\n // * The type of the list (bullet or number) is controlled just by the\n // first item at the indent. Subsequent changes are ignored unless they\n // are for nested lists\n //\n lists: (function( ) {\n // Use a closure to hide a few variables.\n var any_list = \"[*+-]|\\\\d\\\\.\",\n bullet_list = /[*+-]/,\n number_list = /\\d+\\./,\n // Capture leading indent as it matters for determining nested lists.\n is_list_re = new RegExp( \"^( {0,3})(\" + any_list + \")[ \\t]+\" ),\n indent_re = \"(?: {0,3}\\\\t| {4})\";\n\n // TODO: Cache this regexp for certain depths.\n // Create a regexp suitable for matching an li for a given stack depth\n function regex_for_depth( depth ) {\n\n return new RegExp(\n // m[1] = indent, m[2] = list_type\n \"(?:^(\" + indent_re + \"{0,\" + depth + \"} {0,3})(\" + any_list + \")\\\\s+)|\" +\n // m[3] = cont\n \"(^\" + indent_re + \"{0,\" + (depth-1) + \"}[ ]{0,4})\"\n );\n }\n function expand_tab( input ) {\n return input.replace( / {0,3}\\t/g, \" \" );\n }\n\n // Add inline content `inline` to `li`. inline comes from processInline\n // so is an array of content\n function add(li, loose, inline, nl) {\n if (loose) {\n li.push( [ \"para\" ].concat(inline) );\n return;\n }\n // Hmmm, should this be any block level element or just paras?\n var add_to = li[li.length -1] instanceof Array && li[li.length - 1][0] == \"para\"\n ? li[li.length -1]\n : li;\n\n // If there is already some content in this list, add the new line in\n if (nl && li.length > 1) inline.unshift(nl);\n\n for (var i=0; i < inline.length; i++) {\n var what = inline[i],\n is_str = typeof what == \"string\";\n if (is_str && add_to.length > 1 && typeof add_to[add_to.length-1] == \"string\" )\n {\n add_to[ add_to.length-1 ] += what;\n }\n else {\n add_to.push( what );\n }\n }\n }\n\n // contained means have an indent greater than the current one. On\n // *every* line in the block\n function get_contained_blocks( depth, blocks ) {\n\n var re = new RegExp( \"^(\" + indent_re + \"{\" + depth + \"}.*?\\\\n?)*$\" ),\n replace = new RegExp(\"^\" + indent_re + \"{\" + depth + \"}\", \"gm\"),\n ret = [];\n\n while ( blocks.length > 0 ) {\n if ( _exec(re, blocks[0] ) ) {\n var b = blocks.shift(),\n // Now remove that indent\n x = b.replace( replace, \"\");\n\n ret.push( mk_block( x, b.trailing, b.lineNumber ) );\n }\n break;\n }\n return ret;\n }\n\n // passed to stack.forEach to turn list items up the stack into paras\n function paragraphify(s, i, stack) {\n var list = s.list;\n var last_li = list[list.length-1];\n\n if (last_li[1] instanceof Array && last_li[1][0] == \"para\") {\n return;\n }\n if (i+1 == stack.length) {\n // Last stack frame\n // Keep the same array, but replace the contents\n last_li.push( [\"para\"].concat( last_li.splice(1) ) );\n }\n else {\n var sublist = last_li.pop();\n last_li.push( [\"para\"].concat( last_li.splice(1) ), sublist );\n }\n }\n\n // The matcher function\n return function( block, next ) {\n var m = block.match( is_list_re );\n if ( !m ) return undefined;\n\n function make_list( m ) {\n var list = _exec(bullet_list, m[2] )\n ? [\"bulletlist\"]\n : [\"numberlist\"];\n\n stack.push( { list: list, indent: m[1] } );\n return list;\n }\n\n\n var stack = [], // Stack of lists for nesting.\n list = make_list( m ),\n last_li,\n loose = false,\n ret = [ stack[0].list ];\n\n // Loop to search over block looking for inner block elements and loose lists\n loose_search:\n while( true ) {\n // Split into lines preserving new lines at end of line\n var lines = block.split( /(?=\\n)/ );\n\n // We have to grab all lines for a li and call processInline on them\n // once as there are some inline things that can span lines.\n var li_accumulate = \"\";\n\n // Loop over the lines in this block looking for tight lists.\n tight_search:\n for (var line_no=0; line_no < lines.length; line_no++) {\n var nl = \"\",\n l = lines[line_no].replace(/^\\n/, function(n) { nl = n; return \"\" });\n\n // TODO: really should cache this\n var line_re = regex_for_depth( stack.length );\n\n m = l.match( line_re );\n //print( \"line:\", uneval(l), \"\\nline match:\", uneval(m) );\n\n // We have a list item\n if ( m[1] !== undefined ) {\n // Process the previous list item, if any\n if ( li_accumulate.length ) {\n add( last_li, loose, this.processInline( li_accumulate ), nl );\n // Loose mode will have been dealt with. Reset it\n loose = false;\n li_accumulate = \"\";\n }\n\n m[1] = expand_tab( m[1] );\n var wanted_depth = Math.floor(m[1].length/4)+1;\n //print( \"want:\", wanted_depth, \"stack:\", stack.length);\n if ( wanted_depth > stack.length ) {\n // Deep enough for a nested list outright\n //print ( \"new nested list\" );\n list = make_list( m );\n last_li.push( list );\n last_li = list[1] = [ \"listitem\" ];\n }\n else {\n // We aren't deep enough to be strictly a new level. This is\n // where Md.pl goes nuts. If the indent matches a level in the\n // stack, put it there, else put it one deeper then the\n // wanted_depth deserves.\n var found = stack.some(function(s, i) {\n if ( s.indent != m[1] ) return false;\n list = s.list; // Found the level we want\n stack.splice(i+1); // Remove the others\n //print(\"found\");\n return true; // And stop looping\n });\n\n if (!found) {\n //print(\"not found. l:\", uneval(l));\n wanted_depth++;\n if (wanted_depth <= stack.length) {\n stack.splice(wanted_depth);\n //print(\"Desired depth now\", wanted_depth, \"stack:\", stack.length);\n list = stack[wanted_depth-1].list;\n //print(\"list:\", uneval(list) );\n }\n else {\n //print (\"made new stack for messy indent\");\n list = make_list(m);\n last_li.push(list);\n }\n }\n\n //print( uneval(list), \"last\", list === stack[stack.length-1].list );\n last_li = [ \"listitem\" ];\n list.push(last_li);\n } // end depth of shenegains\n nl = \"\";\n }\n\n // Add content\n if (l.length > m[0].length) {\n li_accumulate += nl + l.substr( m[0].length );\n }\n } // tight_search\n\n if ( li_accumulate.length ) {\n add( last_li, loose, this.processInline( li_accumulate ), nl );\n // Loose mode will have been dealt with. Reset it\n loose = false;\n li_accumulate = \"\";\n }\n\n // Look at the next block - we might have a loose list. Or an extra\n // paragraph for the current li\n var contained = get_contained_blocks( stack.length, next );\n\n // Deal with code blocks or properly nested lists\n if (contained.length > 0) {\n // Make sure all listitems up the stack are paragraphs\n stack.forEach( paragraphify, this );\n\n last_li.push.apply( last_li, this.toTree( contained, [] ) );\n }\n\n var next_block = next[0] && next[0].valueOf() || \"\";\n\n if ( next_block.match(is_list_re) || next_block.match( /^ / ) ) {\n block = next.shift();\n\n // Check for an HR following a list: features/lists/hr_abutting\n var hr = this.dialect.block.horizRule( block, next );\n\n if (hr) {\n ret.push.apply(ret, hr);\n break;\n }\n\n // Make sure all listitems up the stack are paragraphs\n stack.forEach( paragraphify , this );\n\n loose = true;\n continue loose_search;\n }\n break;\n } // loose_search\n\n return ret;\n }\n })(),\n\n blockquote: function blockquote( block, next ) {\n if ( !block.match( /^>/m ) )\n return undefined;\n\n var jsonml = [];\n\n // separate out the leading abutting block, if any\n if ( block[ 0 ] != \">\" ) {\n var lines = block.split( /\\n/ ),\n prev = [];\n\n // keep shifting lines until you find a crotchet\n while ( lines.length && lines[ 0 ][ 0 ] != \">\" ) {\n prev.push( lines.shift() );\n }\n\n // reassemble!\n block = lines.join( \"\\n\" );\n jsonml.push.apply( jsonml, this.processBlock( prev.join( \"\\n\" ), [] ) );\n }\n\n // if the next block is also a blockquote merge it in\n while ( next.length && next[ 0 ][ 0 ] == \">\" ) {\n var b = next.shift();\n block += block.trailing + b;\n block.trailing = b.trailing;\n }\n\n // Strip off the leading \"> \" and re-process as a block.\n var input = block.replace( /^> ?/gm, '' ),\n old_tree = this.tree;\n jsonml.push( this.toTree( input, [ \"blockquote\" ] ) );\n\n return jsonml;\n },\n\n referenceDefn: function referenceDefn( block, next) {\n var re = /^\\s*\\[(.*?)\\]:\\s*(\\S+)(?:\\s+(?:(['\"])(.*?)\\3|\\((.*?)\\)))?\\n?/;\n // interesting matches are [ , ref_id, url, , title, title ]\n\n if ( !block.match(re) )\n return undefined;\n\n // make an attribute node if it doesn't exist\n if ( !extract_attr( this.tree ) ) {\n this.tree.splice( 1, 0, {} );\n }\n\n var attrs = extract_attr( this.tree );\n\n // make a references hash if it doesn't exist\n if ( attrs.references === undefined ) {\n attrs.references = {};\n }\n\n var b = this.loop_re_over_block(re, block, function( m ) {\n\n if ( m[2] && m[2][0] == '<' && m[2][m[2].length-1] == '>' )\n m[2] = m[2].substring( 1, m[2].length - 1 );\n\n var ref = attrs.references[ m[1].toLowerCase() ] = {\n href: m[2]\n };\n\n if (m[4] !== undefined)\n ref.title = m[4];\n else if (m[5] !== undefined)\n ref.title = m[5];\n\n } );\n\n if (b.length)\n next.unshift( mk_block( b, block.trailing ) );\n\n return [];\n },\n\n para: function para( block, next ) {\n // everything's a para!\n return [ [\"para\"].concat( this.processInline( block ) ) ];\n }\n }\n}\n\nMarkdown.dialects.Gruber.inline = {\n __call__: function inline( text, patterns ) {\n // Hmmm - should this function be directly in Md#processInline, or\n // conversely, should Md#processBlock be moved into block.__call__ too\n var out = [ ],\n m,\n // Look for the next occurange of a special character/pattern\n re = new RegExp( \"([\\\\s\\\\S]*?)(\" + _source(patterns) + \")\", \"g\" ),\n lastIndex = 0;\n\n //D:var self = this;\n //D:self.debug(\"processInline:\", uneval(text) );\n function add(x) {\n //D:self.debug(\" adding output\", uneval(x));\n if (typeof x == \"string\" && typeof out[out.length-1] == \"string\")\n out[ out.length-1 ] += x;\n else\n out.push(x);\n }\n\n while ( ( m = _exec(re, text) ) != null) {\n if ( m[1] ) add( m[1] ); // Some un-interesting text matched\n else m[1] = { length: 0 }; // Or there was none, but make m[1].length == 0\n\n var res;\n if ( m[2] in this.dialect.inline ) {\n res = this.dialect.inline[ m[2] ].call(\n this,\n text.substr( m.index + m[1].length ), m, out );\n }\n // Default for now to make dev easier. just slurp special and output it.\n res = res || [ m[2].length, m[2] ];\n\n var len = res.shift();\n // Update how much input was consumed\n re.lastIndex += ( len - m[2].length );\n\n // Add children\n res.forEach(add);\n\n lastIndex = re.lastIndex;\n }\n\n // Add last 'boring' chunk\n if ( text.length > lastIndex )\n add( text.substr( lastIndex ) );\n\n return out;\n },\n\n \"\\\\\": function escaped( text ) {\n // [ length of input processed, node/children to add... ]\n // Only esacape: \\ ` * _ { } [ ] ( ) # * + - . !\n if ( text.match( /^\\\\[\\\\`\\*_{}\\[\\]()#\\+.!\\-]/ ) )\n return [ 2, text[1] ];\n else\n // Not an esacpe\n return [ 1, \"\\\\\" ];\n },\n\n \"![\": function image( text ) {\n // ![Alt text](/path/to/img.jpg \"Optional title\")\n // 1 2 3 4 <--- captures\n var m = text.match( /^!\\[(.*?)\\][ \\t]*\\([ \\t]*(\\S*)(?:[ \\t]+([\"'])(.*?)\\3)?[ \\t]*\\)/ );\n\n if ( m ) {\n if ( m[2] && m[2][0] == '<' && m[2][m[2].length-1] == '>' )\n m[2] = m[2].substring( 1, m[2].length - 1 );\n\n m[2] == this.dialect.inline.__call__.call( this, m[2], /\\\\/ )[0];\n\n var attrs = { alt: m[1], href: m[2] || \"\" };\n if ( m[4] !== undefined)\n attrs.title = m[4];\n\n return [ m[0].length, [ \"img\", attrs ] ];\n }\n\n // ![Alt text][id]\n m = text.match( /^!\\[(.*?)\\][ \\t]*\\[(.*?)\\]/ );\n\n if ( m ) {\n // We can't check if the reference is known here as it likely wont be\n // found till after. Check it in md tree->hmtl tree conversion\n return [ m[0].length, [ \"img_ref\", { alt: m[1], ref: m[2].toLowerCase(), text: m[0] } ] ];\n }\n\n // Just consume the '!['\n return [ 2, \"![\" ];\n },\n\n \"[\": function link( text ) {\n // [link text](/path/to/img.jpg \"Optional title\")\n // 1 2 3 4 <--- captures\n var m = text.match( /^\\[([\\s\\S]*?)\\][ \\t]*\\([ \\t]*(\\S+)(?:[ \\t]+([\"'])(.*?)\\3)?[ \\t]*\\)/ );\n\n if ( m ) {\n if ( m[2] && m[2][0] == '<' && m[2][m[2].length-1] == '>' )\n m[2] = m[2].substring( 1, m[2].length - 1 );\n\n // Process escapes only\n m[2] = this.dialect.inline.__call__.call( this, m[2], /\\\\/ )[0];\n\n var attrs = { href: m[2] || \"\" };\n if ( m[4] !== undefined)\n attrs.title = m[4];\n\n var link = [ \"link\", attrs ];\n Array.prototype.push.apply( link, this.processInline( m[1] ) );\n return [ m[0].length, link ];\n }\n\n // [Alt text][id]\n // [Alt text] [id]\n // [id]\n m = text.match( /^\\[([\\s\\S]*?)\\](?: ?\\[(.*?)\\])?/ );\n\n if ( m ) {\n // [id] case, text == id\n if ( m[2] === undefined || m[2] === \"\" ) m[2] = m[1];\n\n attrs = { ref: m[ 2 ].toLowerCase(), original: m[ 0 ] };\n link = [ \"link_ref\", attrs ];\n Array.prototype.push.apply( link, this.processInline( m[1] ) );\n\n // We can't check if the reference is known here as it likely wont be\n // found till after. Check it in md tree->hmtl tree conversion.\n // Store the original so that conversion can revert if the ref isn't found.\n return [\n m[ 0 ].length,\n link\n ];\n }\n\n // Just consume the '['\n return [ 1, \"[\" ];\n },\n\n\n \"<\": function autoLink( text ) {\n var m;\n\n if ( ( m = text.match( /^<(?:((https?|ftp|mailto):[^>]+)|(.*?@.*?\\.[a-zA-Z]+))>/ ) ) != null ) {\n if ( m[3] ) {\n return [ m[0].length, [ \"link\", { href: \"mailto:\" + m[3] }, m[3] ] ];\n\n }\n else if ( m[2] == \"mailto\" ) {\n return [ m[0].length, [ \"link\", { href: m[1] }, m[1].substr(\"mailto:\".length ) ] ];\n }\n else\n return [ m[0].length, [ \"link\", { href: m[1] }, m[1] ] ];\n }\n\n return [ 1, \"<\" ];\n },\n\n \"`\": function inlineCode( text ) {\n // Inline code block. as many backticks as you like to start it\n // Always skip over the opening ticks.\n var m = text.match( /(`+)(([\\s\\S]*?)\\1)/ );\n\n if ( m && m[2] )\n return [ m[1].length + m[2].length, [ \"inlinecode\", m[3] ] ];\n else {\n // TODO: No matching end code found - warn!\n return [ 1, \"`\" ];\n }\n },\n\n \" \\n\": function lineBreak( text ) {\n return [ 3, [ \"linebreak\" ] ];\n }\n\n}\n\n// Meta Helper/generator method for em and strong handling\nfunction strong_em( tag, md ) {\n\n var state_slot = tag + \"_state\",\n other_slot = tag == \"strong\" ? \"em_state\" : \"strong_state\";\n\n function CloseTag(len) {\n this.len_after = len;\n this.name = \"close_\" + md;\n }\n\n return function ( text, orig_match ) {\n\n if (this[state_slot][0] == md) {\n // Most recent em is of this type\n //D:this.debug(\"closing\", md);\n this[state_slot].shift();\n\n // \"Consume\" everything to go back to the recrusion in the else-block below\n return[ text.length, new CloseTag(text.length-md.length) ];\n }\n else {\n // Store a clone of the em/strong states\n var other = this[other_slot].slice(),\n state = this[state_slot].slice();\n\n this[state_slot].unshift(md);\n\n //D:this.debug_indent += \" \";\n\n // Recurse\n var res = this.processInline( text.substr( md.length ) );\n //D:this.debug_indent = this.debug_indent.substr(2);\n\n var last = res[res.length - 1];\n\n //D:this.debug(\"processInline from\", tag + \": \", uneval( res ) );\n\n var check = this[state_slot].shift();\n if (last instanceof CloseTag) {\n res.pop();\n // We matched! Huzzah.\n var consumed = text.length - last.len_after;\n return [ consumed, [ tag ].concat(res) ];\n }\n else {\n // Restore the state of the other kind. We might have mistakenly closed it.\n this[other_slot] = other;\n this[state_slot] = state;\n\n // We can't reuse the processed result as it could have wrong parsing contexts in it.\n return [ md.length, md ];\n }\n }\n } // End returned function\n}\n\nMarkdown.dialects.Gruber.inline[\"**\"] = strong_em(\"strong\", \"**\");\nMarkdown.dialects.Gruber.inline[\"__\"] = strong_em(\"strong\", \"__\");\nMarkdown.dialects.Gruber.inline[\"*\"] = strong_em(\"em\", \"*\");\nMarkdown.dialects.Gruber.inline[\"_\"] = strong_em(\"em\", \"_\");\n\n\n// Build default order from insertion order.\nMarkdown.buildBlockOrder = function(d) {\n var ord = [];\n for ( var i in d ) {\n if ( i == \"__order__\" || i == \"__call__\" ) continue;\n ord.push( i );\n }\n d.__order__ = ord;\n}\n\n// Build patterns for inline matcher\nMarkdown.buildInlinePatterns = function(d) {\n var patterns = [];\n\n for ( var i in d ) {\n if (i == \"__call__\") continue;\n var l = i.replace( /([\\\\.*+?|()\\[\\]{}])/g, \"\\\\$1\" )\n .replace( /\\n/, \"\\\\n\" );\n patterns.push( i.length == 1 ? l : \"(?:\" + l + \")\" );\n }\n\n patterns = patterns.join(\"|\");\n //print(\"patterns:\", uneval( patterns ) );\n\n var fn = d.__call__;\n d.__call__ = function(text, pattern) {\n if (pattern != undefined)\n return fn.call(this, text, pattern);\n else\n return fn.call(this, text, patterns);\n }\n}\n\n// Helper function to make sub-classing a dialect easier\nMarkdown.subclassDialect = function( d ) {\n function Block() {};\n Block.prototype = d.block;\n function Inline() {};\n Inline.prototype = d.inline;\n\n return { block: new Block(), inline: new Inline() };\n}\n\nMarkdown.buildBlockOrder ( Markdown.dialects.Gruber.block );\nMarkdown.buildInlinePatterns( Markdown.dialects.Gruber.inline );\n\nMarkdown.dialects.Maruku = Markdown.subclassDialect( Markdown.dialects.Gruber );\n\nMarkdown.dialects.Maruku.block.document_meta = function document_meta( block, next ) {\n // we're only interested in the first block\n if ( block.lineNumber > 1 ) return undefined;\n\n // document_meta blocks consist of one or more lines of `Key: Value\\n`\n if ( ! block.match( /^(?:\\w+:.*\\n)*\\w+:.*$/ ) ) return undefined;\n\n // make an attribute node if it doesn't exist\n if ( !extract_attr( this.tree ) ) {\n this.tree.splice( 1, 0, {} );\n }\n\n var pairs = block.split( /\\n/ );\n for ( p in pairs ) {\n var m = pairs[ p ].match( /(\\w+):\\s*(.*)$/ ),\n key = m[ 1 ].toLowerCase(),\n value = m[ 2 ];\n\n this.tree[ 1 ][ key ] = value;\n }\n\n // document_meta produces no content!\n return [];\n}\n\nMarkdown.dialects.Maruku.block.block_meta = function block_meta( block, next ) {\n // check if the last line of the block is an meta hash\n var m = block.match( /(^|\\n) {0,3}\\{:\\s*((?:\\\\\\}|[^\\}])*)\\s*\\}$/ );\n if ( !m ) return undefined;\n\n // process the meta hash\n var attr = process_meta_hash( m[ 2 ] );\n\n // if we matched ^ then we need to apply meta to the previous block\n if ( m[ 1 ] === \"\" ) {\n var node = this.tree[ this.tree.length - 1 ],\n hash = extract_attr( node );\n\n // if the node is a string (rather than JsonML), bail\n if ( typeof node === \"string\" ) return undefined;\n\n // create the attribute hash if it doesn't exist\n if ( !hash ) {\n hash = {};\n node.splice( 1, 0, hash );\n }\n\n // add the attributes in\n for ( a in attr ) {\n hash[ a ] = attr[ a ];\n }\n\n // return nothing so the meta hash is removed\n return [];\n }\n\n // pull the meta hash off the block and process what's left\n var b = block.replace( /\\n.*$/, \"\" ),\n result = this.processBlock( b, [] );\n\n // get or make the attributes hash\n var hash = extract_attr( result[ 0 ] );\n if ( !hash ) {\n hash = {};\n result[ 0 ].splice( 1, 0, hash );\n }\n\n // attach the attributes to the block\n for ( a in attr ) {\n hash[ a ] = attr[ a ];\n }\n\n return result;\n}\n\nMarkdown.dialects.Maruku.block.definition_list = function definition_list( block, next ) {\n // one or more terms followed by one or more definitions, in a single block\n var tight = /^((?:[^\\s:].*\\n)+):\\s+([^]+)$/,\n list = [ \"dl\" ];\n\n // see if we're dealing with a tight or loose block\n if ( ( m = block.match( tight ) ) ) {\n // pull subsequent tight DL blocks out of `next`\n var blocks = [ block ];\n while ( next.length && _exec(tight, next[ 0 ] ) ) {\n blocks.push( next.shift() );\n }\n\n for ( var b = 0; b < blocks.length; ++b ) {\n var m = blocks[ b ].match( tight ),\n terms = m[ 1 ].replace( /\\n$/, \"\" ).split( /\\n/ ),\n defns = m[ 2 ].split( /\\n:\\s+/ );\n\n // print( uneval( m ) );\n\n for ( var i = 0; i < terms.length; ++i ) {\n list.push( [ \"dt\", terms[ i ] ] );\n }\n\n for ( var i = 0; i < defns.length; ++i ) {\n // run inline processing over the definition\n list.push( [ \"dd\" ].concat( this.processInline( defns[ i ].replace( /(\\n)\\s+/, \"$1\" ) ) ) );\n }\n }\n }\n else {\n return undefined;\n }\n\n return [ list ];\n}\n\nMarkdown.dialects.Maruku.inline[ \"{:\" ] = function inline_meta( text, matches, out ) {\n if ( !out.length ) {\n return [ 2, \"{:\" ];\n }\n\n // get the preceeding element\n var before = out[ out.length - 1 ];\n\n if ( typeof before === \"string\" ) {\n return [ 2, \"{:\" ];\n }\n\n // match a meta hash\n var m = text.match( /^\\{:\\s*((?:\\\\\\}|[^\\}])*)\\s*\\}/ );\n\n // no match, false alarm\n if ( !m ) {\n return [ 2, \"{:\" ];\n }\n\n // attach the attributes to the preceeding element\n var meta = process_meta_hash( m[ 1 ] ),\n attr = extract_attr( before );\n\n if ( !attr ) {\n attr = {};\n before.splice( 1, 0, attr );\n }\n\n for ( var k in meta ) {\n attr[ k ] = meta[ k ];\n }\n\n // cut out the string and replace it with nothing\n return [ m[ 0 ].length, \"\" ];\n}\n\nMarkdown.buildBlockOrder ( Markdown.dialects.Maruku.block );\nMarkdown.buildInlinePatterns( Markdown.dialects.Maruku.inline );\n\nvar isArray = expose.isArray = function(obj) {\n return (obj instanceof Array || typeof obj === \"array\" || Array.isArray(obj));\n}\n\nfunction extract_attr( jsonml ) {\n return isArray(jsonml)\n && jsonml.length > 1\n && typeof jsonml[ 1 ] === \"object\"\n && !( isArray(jsonml[ 1 ]) )\n ? jsonml[ 1 ]\n : undefined;\n}\n\nfunction process_meta_hash( meta_string ) {\n var meta = split_meta_hash( meta_string ),\n attr = {};\n\n for ( var i = 0; i < meta.length; ++i ) {\n // id: #foo\n if ( _test(/^#/, meta[ i ] ) ) {\n attr.id = meta[ i ].substring( 1 );\n }\n // class: .foo\n else if ( _test(/^\\./, meta[ i ] ) ) {\n // if class already exists, append the new one\n if ( attr['class'] ) {\n attr['class'] = attr['class'] + meta[ i ].replace( /./, \" \" );\n }\n else {\n attr['class'] = meta[ i ].substring( 1 );\n }\n }\n // attribute: foo=bar\n else if ( _test(/=/, meta[ i ] ) ) {\n var s = meta[ i ].split( /=/ );\n attr[ s[ 0 ] ] = s[ 1 ];\n }\n }\n\n return attr;\n}\n\nfunction split_meta_hash( meta_string ) {\n var meta = meta_string.split( \"\" ),\n parts = [ \"\" ],\n in_quotes = false;\n\n while ( meta.length ) {\n var letter = meta.shift();\n switch ( letter ) {\n case \" \" :\n // if we're in a quoted section, keep it\n if ( in_quotes ) {\n parts[ parts.length - 1 ] += letter;\n }\n // otherwise make a new part\n else {\n parts.push( \"\" );\n }\n break;\n case \"'\" :\n case '\"' :\n // reverse the quotes and move straight on\n in_quotes = !in_quotes;\n break;\n case \"\\\\\" :\n // shift off the next letter to be used straight away.\n // it was escaped so we'll keep it whatever it is\n letter = meta.shift();\n default :\n parts[ parts.length - 1 ] += letter;\n break;\n }\n }\n\n return parts;\n}\n\n/**\n * renderJsonML( jsonml[, options] ) -> String\n * - jsonml (Array): JsonML array to render to XML\n * - options (Object): options\n *\n * Converts the given JsonML into well-formed XML.\n *\n * The options currently understood are:\n *\n * - root (Boolean): wether or not the root node should be included in the\n * output, or just its children. The default `false` is to not include the\n * root itself.\n */\nexpose.renderJsonML = function( jsonml, options ) {\n options = options || {};\n // include the root element in the rendered output?\n options.root = options.root || false;\n\n var content = [];\n\n if ( options.root ) {\n content.push( render_tree( jsonml ) );\n }\n else {\n jsonml.shift(); // get rid of the tag\n if ( jsonml.length && typeof jsonml[ 0 ] === \"object\" && !( jsonml[ 0 ] instanceof Array ) ) {\n jsonml.shift(); // get rid of the attributes\n }\n\n while ( jsonml.length ) {\n content.push( render_tree( jsonml.shift() ) );\n }\n }\n\n return content.join( \"\\n\\n\" );\n}\n\nfunction escapeHTML( text ) {\n return text.replace( /&/g, \"&amp;\" )\n .replace( /</g, \"&lt;\" )\n .replace( />/g, \"&gt;\" )\n .replace( /\"/g, \"&quot;\" )\n .replace( /'/g, \"&#39;\" );\n}\n\nfunction render_tree( jsonml ) {\n // basic case\n if ( typeof jsonml === \"string\" ) {\n return escapeHTML( jsonml );\n }\n\n var tag = jsonml.shift(),\n attributes = {},\n content = [];\n\n if ( jsonml.length && typeof jsonml[ 0 ] === \"object\" && !( jsonml[ 0 ] instanceof Array ) ) {\n attributes = jsonml.shift();\n }\n\n while ( jsonml.length ) {\n content.push( arguments.callee( jsonml.shift() ) );\n }\n\n var tag_attrs = \"\";\n for ( var a in attributes ) {\n tag_attrs += \" \" + a + '=\"' + escapeHTML( attributes[ a ] ) + '\"';\n }\n\n // be careful about adding whitespace here for inline elements\n return \"<\"+ tag + tag_attrs + \">\" + content.join( \"\" ) + \"</\" + tag + \">\";\n}\n\nfunction convert_tree_to_html( tree, references, options ) {\n options = options || {};\n\n // shallow clone\n var jsonml = tree.slice( 0 );\n\n if (typeof options.preprocessTreeNode === \"function\") {\n jsonml = options.preprocessTreeNode(jsonml, references);\n }\n\n // Clone attributes if they exist\n var attrs = extract_attr( jsonml );\n if ( attrs ) {\n jsonml[ 1 ] = {};\n for ( var i in attrs ) {\n jsonml[ 1 ][ i ] = attrs[ i ];\n }\n attrs = jsonml[ 1 ];\n }\n\n // basic case\n if ( typeof jsonml === \"string\" ) {\n return jsonml;\n }\n\n // convert this node\n switch ( jsonml[ 0 ] ) {\n case \"header\":\n jsonml[ 0 ] = \"h\" + jsonml[ 1 ].level;\n delete jsonml[ 1 ].level;\n break;\n case \"bulletlist\":\n jsonml[ 0 ] = \"ul\";\n break;\n case \"numberlist\":\n jsonml[ 0 ] = \"ol\";\n break;\n case \"listitem\":\n jsonml[ 0 ] = \"li\";\n break;\n case \"para\":\n jsonml[ 0 ] = \"p\";\n break;\n case \"markdown\":\n jsonml[ 0 ] = \"html\";\n if ( attrs ) delete attrs.references;\n break;\n case \"code_block\":\n jsonml[ 0 ] = \"pre\";\n var i = attrs ? 2 : 1;\n var code = [ \"code\" ];\n code.push.apply( code, jsonml.splice( i ) );\n jsonml[ i ] = code;\n break;\n case \"inlinecode\":\n jsonml[ 0 ] = \"code\";\n break;\n case \"img\":\n jsonml[ 1 ].src = jsonml[ 1 ].href;\n delete jsonml[ 1 ].href;\n break;\n case \"linebreak\":\n jsonml[0] = \"br\";\n break;\n case \"link\":\n jsonml[ 0 ] = \"a\";\n break;\n case \"link_ref\":\n jsonml[ 0 ] = \"a\";\n\n // grab this ref and clean up the attribute node\n var ref = references[ attrs.ref ];\n\n // if the reference exists, make the link\n if ( ref ) {\n delete attrs.ref;\n\n // add in the href and title, if present\n attrs.href = ref.href;\n if ( ref.title ) {\n attrs.title = ref.title;\n }\n\n // get rid of the unneeded original text\n delete attrs.original;\n }\n // the reference doesn't exist, so revert to plain text\n else {\n return attrs.original;\n }\n break;\n }\n\n // convert all the children\n var i = 1;\n\n // deal with the attribute node, if it exists\n if ( attrs ) {\n // if there are keys, skip over it\n for ( var key in jsonml[ 1 ] ) {\n i = 2;\n }\n // if there aren't, remove it\n if ( i === 1 ) {\n jsonml.splice( i, 1 );\n }\n }\n\n for ( ; i < jsonml.length; ++i ) {\n jsonml[ i ] = arguments.callee( jsonml[ i ], references, options );\n }\n\n return jsonml;\n}\n\n\n// merges adjacent text nodes into a single node\nfunction merge_text_nodes( jsonml ) {\n // skip the tag name and attribute hash\n var i = extract_attr( jsonml ) ? 2 : 1;\n\n while ( i < jsonml.length ) {\n // if it's a string check the next item too\n if ( typeof jsonml[ i ] === \"string\" ) {\n if ( i + 1 < jsonml.length && typeof jsonml[ i + 1 ] === \"string\" ) {\n // merge the second string into the first and remove it\n jsonml[ i ] += jsonml.splice( i + 1, 1 )[ 0 ];\n }\n else {\n ++i;\n }\n }\n // if it's not a string recurse\n else {\n arguments.callee( jsonml[ i ] );\n ++i;\n }\n }\n}\n\n} )( (function() {\n if ( typeof exports === \"undefined\" ) {\n window.markdown = {};\n return window.markdown;\n }\n else {\n return exports;\n }\n} )() );">>},
{<<"glob">>,
<<"// glob-specific helper functions\n\nvar published_re = new RegExp(\"^(\\\\d+)-(\\\\d+)-(\\\\d+)T(\\\\d+):(\\\\d+)\");\nvar months = {\n '01': \"January\",\n '02': \"February\",\n '03': \"March\",\n '04': \"April\",\n '05': \"May\",\n '06': \"June\",\n '07': \"July\",\n '08': \"August\",\n '09': \"September\",\n '10': \"October\",\n '11': \"November\",\n '12': \"December\",\n};\nvar am_pm = function (hour) {\n hour = parseInt(hour);\n return (hour < 12) ? \"am\" : \"pm\";\n};\n\nexports.postToTheme = function (doc, base_url) {\n var d = doc.published.match(published_re);\n doc.published_human = d[1] + \" \" + months[d[2]] + \" \" + parseInt(d[3]) + \", \" + (parseInt(d[4]) % 12 || 12) + \":\" + d[5] + am_pm(d[4]);\n doc.url = base_url + '/' + doc.path;\n doc.html_content || (doc.html_content = \"\");\n return doc;\n};">>},
{<<"atom">>,
<<"// modified from https://github.com/couchapp/couchapp/blob/master/vendor/lib/atom.js\n// atom feed generator\n// requries E4X support.\n\nexports.header = function(data) {\n var f = <feed xmlns=\"http://www.w3.org/2005/Atom\"/>;\n f.title = data.title;\n f.id = data.uri;\n f.link.@href = data.self;\n f.link.@rel = \"self\";\n f.generator = \"CouchApp on CouchDB (https://github.com/natevw/glob)\";\n f.updated = data.updated;\n f.author = <author><name>{data.author}</name></author>;\n return f.toXMLString().replace(/\\<\\/feed\\>/,'');\n};\n\nexports.entry = function(data) {\n //var entry = <entry xml:base={data.alternate-lastcomponent}/>;\n var entry = <entry/>;\n entry.id = data.uri;\n entry.title = data.title;\n if (data.updated) {\n entry.updated = data.updated;\n entry.published = data.published;\n } else {\n entry.updated = data.published;\n }\n if (data.html_content) {\n entry.content = data.html_content;\n entry.content.@type = 'html';\n }\n entry.link.@href = data.alternate;\n entry.link.@rel = \"alternate\";\n return entry;\n}\n\nexports.footer = function () {\n return \"</feed>\\n\";\n}">>},
{<<"date">>,
<<"/* Simple workaround for older JavaScript engines that\n * do not understand the One True Date Format.\n * This doesn't totally mimic new Date(), just string parsing.\n */\nexports.newDate = function (rfc3339) {\n var temp = Date.parse(rfc3339);\n if (isNaN(temp)) {\n // this technique is borrowed from jquery.couch.app.util's $.prettyDate\n temp = rfc3339.replace(/-/g,\"/\").replace(\"T\", \" \").replace(\"Z\", \" +0000\").replace(/(\\d*\\:\\d*:\\d*)\\.\\d*/g,\"$1\");\n }\n return new Date(temp);\n};\n\nexports.toUTCComponents = function (date) {\n\treturn [\n\t\tdate.getUTCFullYear(), // 0\n\t\tdate.getUTCMonth() + 1, // 1\n\t\tdate.getUTCDate(), // 2\n\t\tdate.getUTCHours(), // 3\n\t\tdate.getUTCMinutes(), // 4\n\t\tdate.getUTCSeconds() + (date.getUTCMilliseconds() / 1000)\n ];\n};\n\nexports.toRFC3339 = function (date) {\n // after https://github.com/couchapp/couchapp/blob/master/vendor/lib/atom.js\n \n function f(n) { // Format integers to have at least two digits.\n return n < 10 ? '0' + n : '' + n;\n }\n var d = exports.toUTCComponents(date);\n return d[0] + '-' + f(d[1]) + '-' + f(d[2]) + 'T' + f(d[3]) + ':' + f(d[4]) + ':' + f(d[5]) + 'Z'\n};">>},
{<<"path">>,
<<"// modified from https://github.com/couchapp/couchapp/blob/master/vendor/lib/path.js\n// from couch.js\nfunction encodeOptions(options) {\n var buf = [];\n if (typeof(options) == \"object\" && options !== null) {\n for (var name in options) {\n if (!options.hasOwnProperty(name)) {continue;}\n var value = options[name];\n if (name == \"key\" || name == \"startkey\" || name == \"endkey\") {\n value = JSON.stringify(value);\n }\n buf.push(encodeURIComponent(name) + \"=\" + encodeURIComponent(value));\n }\n }\n if (!buf.length) {\n return \"\";\n }\n return \"?\" + buf.join(\"&\");\n}\n\nfunction concatArgs(array, args) {\n for (var i=0; i < args.length; i++) {\n array.push(args[i]);\n };\n return array;\n};\n\nfunction makePath(array) {\n var options, path;\n \n if (typeof array[array.length - 1] != \"string\") {\n // it's a params hash\n options = array.pop();\n }\n path = array.map(function(item) {return encodeURIComponent(item)}).join('/');\n if (options) {\n return path + encodeOptions(options);\n } else {\n return path; \n }\n};\n\nexports.init = function(req) {\n return {\n asset : function() {\n var p = req.path, parts = ['', p[0], p[1] , p[2]];\n return makePath(concatArgs(parts, arguments));\n },\n show : function() {\n var p = req.path, parts = ['', p[0], p[1] , p[2], '_show'];\n return makePath(concatArgs(parts, arguments));\n },\n list : function() {\n var p = req.path, parts = ['', p[0], p[1] , p[2], '_list'];\n return makePath(concatArgs(parts, arguments));\n },\n update : function() {\n var p = req.path, parts = ['', p[0], p[1] , p[2], '_update'];\n return makePath(concatArgs(parts, arguments));\n },\n limit : function(limit) {\n var query = req.query;\n var l = query.limit;\n query.limit = limit;\n var view = req.path[req.path.length - 1];\n var list = req.path[req.path.length - 2];\n var link = this.list(list, view, query);\n query.limit = l;\n return link;\n },\n older : function(key) {\n if (!typeof key == \"undefined\") return null;\n var query = req.query;\n query.startkey = key;\n query.skip=1;\n var view = req.path[req.path.length - 1];\n var list = req.path[req.path.length - 2];\n return this.list(list, view, query);\n },\n absolute : function(path) {\n return 'http://' + req.headers.Host + path;\n }\n }\n};">>},
{<<"mustache">>,
<<47,47,32,
98,117,
105,108,
116,32,
119,105,
116,104,
32,39,
114,97,
107,101,
32,99,
111,109,
109,111,
110,106,
115,39,
32,111,
102,32,
91,112,
97,114,
115,101,
114,45,
114,101,
119,114,
105,116,
101,32,
49,55,53,
57,51,
101,54,
93,10,47,
42,10,32,
42,32,67,
111,109,
109,111,
110,74,
83,45,99,
111,109,
112,97,
116,105,
98,108,
101,32,
109,117,
115,116,
97,99,
104,101,
46,106,
115,32,
109,111,
100,117,
108,101,
10,32,42,
10,32,42,
32,83,
101,101,
32,104,
116,116,
112,58,
47,47,
103,105,
116,104,
117,98,
46,99,
111,109,
47,106,
97,110,
108,47,
109,117,
115,116,
97,99,
104,101,
46,106,
115,32,
102,111,
114,32,
109,111,
114,101,
32,105,
110,102,
111,46,
10,32,42,
47,10,10,
47,42,10,
32,32,
109,117,
115,116,
97,99,
104,101,
46,106,
115,32,
226,128,
148,32,
76,111,
103,105,
99,45,
108,101,
115,115,
32,116,
101,109,
112,108,
97,116,
101,115,
32,105,
110,32,
74,97,
118,97,
83,99,
114,105,
112,116,
10,10,32,
32,83,
101,101,
32,104,
116,116,
112,58,
47,47,
109,117,
115,116,
97,99,
104,101,
46,103,
105,116,
104,117,
98,46,99,
111,109,
47,32,
102,111,
114,32,
109,111,
114,101,
32,105,
110,102,
111,46,
10,32,32,
10,32,32,
82,101,
119,114,
105,116,
101,32,
97,115,
32,112,
97,114,
115,101,
114,32,
98,121,
32,78,97,
116,104,
97,110,
32,86,97,
110,100,
101,114,
32,87,
105,108,
116,44,
32,50,48,
49,48,32,
77,97,
121,32,
50,50,10,
42,47,10,
10,118,
97,114,
32,77,
117,115,
116,97,
99,104,
101,32,
61,32,
102,117,
110,99,
116,105,
111,110,
40,41,32,
123,10,
32,32,47,
47,32,96,
115,101,
110,100,
101,114,
96,32,
105,115,
32,97,32,
102,117,
110,99,
116,105,
111,110,
32,116,
111,32,
98,117,
102,102,
101,114,
32,111,
114,32,
115,116,
114,101,
97,109,
32,112,
97,114,
115,101,
100,32,
99,104,
117,110,
107,115,
10,32,32,
118,97,
114,32,
82,101,
110,100,
101,114,
101,114,
32,61,32,
102,117,
110,99,
116,105,
111,110,
40,115,
101,110,
100,101,
114,41,
32,123,
10,32,32,
32,32,
116,104,
105,115,
46,115,
101,110,
100,32,
61,32,
115,101,
110,100,
101,114,
59,10,32,
32,125,
59,10,32,
32,10,32,
32,82,
101,110,
100,101,
114,101,
114,46,
112,114,
111,116,
111,116,
121,112,
101,32,
61,32,
123,10,
32,32,32,
32,111,
116,97,
103,58,
32,34,
123,123,
34,44,10,
32,32,32,
32,99,
116,97,
103,58,
32,34,
125,125,
34,44,10,
32,32,32,
32,112,
114,97,
103,109,
97,115,
95,105,
109,112,
108,101,
109,101,
110,116,
101,100,
58,32,
123,10,
32,32,32,
32,32,32,
34,73,77,
80,76,73,
67,73,84,
45,73,84,
69,82,65,
84,79,82,
34,58,32,
116,114,
117,101,
10,32,32,
32,32,
125,44,
10,32,32,
32,32,10,
32,32,32,
32,47,47,
32,116,
104,101,
32,109,
97,105,
110,32,
101,110,
116,114,
121,32,
105,110,
116,111,
32,112,
97,114,
115,105,
110,103,
10,32,32,
32,32,
114,101,
110,100,
101,114,
58,32,
102,117,
110,99,
116,105,
111,110,
40,116,
101,109,
112,108,
97,116,
101,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
41,32,
123,10,
32,32,32,
32,32,32,
47,47,99,
111,110,
115,111,
108,101,
46,108,
111,103,
40,34,67,
111,110,
116,101,
120,116,
34,44,32,
99,111,
110,116,
101,120,
116,41,
59,10,32,
32,32,32,
32,32,
118,97,
114,32,
112,114,
97,103,
109,97,
115,32,
61,32,
123,39,
73,77,80,
76,73,67,
73,84,45,
73,84,69,
82,65,84,
79,82,39,
58,123,
125,125,
59,10,32,
32,32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,115,
32,61,32,
116,104,
105,115,
46,115,
112,108,
105,116,
84,101,
109,112,
108,97,
116,101,
40,116,
101,109,
112,108,
97,116,
101,44,
32,112,
114,97,
103,109,
97,115,
41,59,10,
32,32,32,
32,32,32,
47,47,99,
111,110,
115,111,
108,101,
46,108,
111,103,
40,34,84,
111,107,
101,110,
115,34,
44,32,
116,111,
107,101,
110,115,
41,59,10,
32,32,32,
32,32,32,
118,97,
114,32,
116,114,
101,101,
32,61,32,
116,104,
105,115,
46,102,
111,114,
109,84,
114,101,
101,40,
116,111,
107,101,
110,115,
44,32,
112,114,
97,103,
109,97,
115,41,
59,10,32,
32,32,32,
32,32,47,
47,99,
111,110,
115,111,
108,101,
46,108,
111,103,
40,34,84,
114,101,
101,34,
44,32,
116,114,
101,101,
41,59,10,
32,32,32,
32,32,32,
116,104,
105,115,
46,114,
101,110,
100,101,
114,84,
114,101,
101,40,
116,114,
101,101,
44,32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
44,32,
116,101,
109,112,
108,97,
116,101,
44,32,
112,114,
97,103,
109,97,
115,41,
59,10,32,
32,32,32,
125,44,
10,32,32,
32,32,10,
32,32,32,
32,47,47,
32,114,
101,116,
117,114,
110,115,
32,123,
116,97,
103,44,
32,115,
116,97,
114,116,
44,32,
101,110,
100,125,
32,111,
114,32,
110,111,
116,104,
105,110,
103,10,
32,32,32,
32,102,
105,110,
100,84,
111,107,
101,110,
58,32,
102,117,
110,99,
116,105,
111,110,
40,116,
101,109,
112,108,
97,116,
101,44,
32,115,
116,97,
114,116,
80,111,
115,41,
32,123,
10,32,32,
32,32,32,
32,118,
97,114,
32,116,
111,107,
101,110,
83,116,
97,114,
116,32,
61,32,
116,101,
109,112,
108,97,
116,101,
46,105,
110,100,
101,120,
79,102,
40,116,
104,105,
115,46,
111,116,
97,103,
44,32,
115,116,
97,114,
116,80,
111,115,
41,59,10,
32,32,32,
32,32,32,
105,102,
32,40,
116,111,
107,101,
110,83,
116,97,
114,116,
32,61,61,
32,45,49,
41,32,
114,101,
116,117,
114,110,
59,10,32,
32,32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,69,
110,100,
32,61,32,
116,101,
109,112,
108,97,
116,101,
46,105,
110,100,
101,120,
79,102,
40,116,
104,105,
115,46,
99,116,
97,103,
44,32,
116,111,
107,101,
110,83,
116,97,
114,116,
32,43,32,
116,104,
105,115,
46,111,
116,97,
103,46,
108,101,
110,103,
116,104,
41,59,10,
32,32,32,
32,32,32,
105,102,
32,40,
116,111,
107,101,
110,69,
110,100,
32,61,61,
32,45,49,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
99,111,
110,116,
101,120,
116,32,
61,32,
116,101,
109,112,
108,97,
116,101,
46,115,
117,98,
115,116,
114,40,
116,111,
107,101,
110,83,
116,97,
114,116,
44,32,49,
53,41,59,
10,32,32,
32,32,32,
32,32,32,
116,104,
114,111,
119,32,
110,101,
119,32,
69,114,
114,111,
114,40,
34,85,
110,99,
108,111,
115,101,
100,32,
116,111,
107,101,
110,32,
39,34,32,
43,32,99,
111,110,
116,101,
120,116,
32,43,32,
34,46,46,
46,39,46,
34,41,59,
10,32,32,
32,32,32,
32,125,
10,32,32,
32,32,32,
32,10,32,
32,32,32,
32,32,
118,97,
114,32,
116,111,
107,101,
110,73,
110,110,
97,114,
100,115,
32,61,32,
116,101,
109,112,
108,97,
116,101,
46,115,
108,105,
99,101,
40,116,
111,107,
101,110,
83,116,
97,114,
116,32,
43,32,
116,104,
105,115,
46,111,
116,97,
103,46,
108,101,
110,103,
116,104,
44,32,
116,111,
107,101,
110,69,
110,100,
41,59,10,
32,32,32,
32,32,32,
118,97,
114,32,
116,111,
107,101,
110,80,
97,114,
116,115,
32,61,32,
116,111,
107,101,
110,73,
110,110,
97,114,
100,115,
46,109,
97,116,
99,104,
40,47,40,
91,61,37,
33,123,
38,62,35,
94,92,47,
93,41,63,
92,115,
42,40,46,
43,63,41,
92,115,
42,92,49,
63,36,47,
41,59,10,
32,32,32,
32,32,32,
118,97,
114,32,
116,111,
107,101,
110,32,
61,32,
123,10,
32,32,32,
32,32,32,
32,32,34,
111,112,
101,114,
97,116,
111,114,
34,58,32,
116,111,
107,101,
110,80,
97,114,
116,115,
91,49,93,
44,10,32,
32,32,32,
32,32,32,
32,34,
116,97,
103,34,
58,32,
116,111,
107,101,
110,80,
97,114,
116,115,
91,50,93,
44,10,32,
32,32,32,
32,32,32,
32,34,
116,101,
120,116,
34,58,32,
116,104,
105,115,
46,111,
116,97,
103,32,
43,32,
116,111,
107,101,
110,73,
110,110,
97,114,
100,115,
32,43,32,
116,104,
105,115,
46,99,
116,97,
103,44,
10,32,32,
32,32,32,
32,32,32,
34,115,
116,97,
114,116,
34,58,32,
116,111,
107,101,
110,83,
116,97,
114,116,
44,10,32,
32,32,32,
32,32,32,
32,34,
101,110,
100,34,
58,32,
116,111,
107,101,
110,69,
110,100,
32,43,32,
116,104,
105,115,
46,99,
116,97,
103,46,
108,101,
110,103,
116,104,
10,32,32,
32,32,32,
32,125,
59,10,32,
32,32,32,
32,32,
105,102,
32,40,
116,111,
107,101,
110,46,
111,112,
101,114,
97,116,
111,114,
32,61,61,
32,34,
123,34,
32,38,38,
32,116,
101,109,
112,108,
97,116,
101,91,
116,111,
107,101,
110,46,
101,110,
100,93,
32,61,61,
32,34,
125,34,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,47,
47,32,97,
100,106,
117,115,
116,32,
102,111,
114,32,
115,121,
109,109,
101,116,
114,105,
99,97,
108,32,
117,110,
101,115,
99,97,
112,101,
100,32,
116,97,
103,32,
119,105,
116,104,
32,100,
101,102,
97,117,
108,116,
32,100,
101,108,
105,109,
105,116,
101,114,
115,10,
32,32,32,
32,32,32,
32,32,
116,111,
107,101,
110,46,
101,110,
100,32,
43,61,32,
49,59,10,
32,32,32,
32,32,32,
125,10,
32,32,32,
32,32,32,
114,101,
116,117,
114,110,
32,116,
111,107,
101,110,
59,10,32,
32,32,32,
125,44,
10,32,32,
32,32,10,
32,32,32,
32,115,
112,108,
105,116,
84,101,
109,112,
108,97,
116,101,
58,32,
102,117,
110,99,
116,105,
111,110,
40,116,
101,109,
112,108,
97,116,
101,44,
32,112,
114,97,
103,109,
97,115,
41,32,
123,10,
32,32,32,
32,32,32,
118,97,
114,32,
116,111,
107,101,
110,115,
32,61,32,
91,93,59,
10,32,32,
32,32,32,
32,118,
97,114,
32,116,
111,107,
101,110,
59,10,32,
32,32,32,
32,32,
118,97,
114,32,
112,97,
114,115,
101,80,
111,115,
105,116,
105,111,
110,32,
61,32,48,
59,10,32,
32,32,32,
32,32,
119,104,
105,108,
101,32,
40,116,
111,107,
101,110,
32,61,32,
116,104,
105,115,
46,102,
105,110,
100,84,
111,107,
101,110,
40,116,
101,109,
112,108,
97,116,
101,44,
32,112,
97,114,
115,101,
80,111,
115,105,
116,105,
111,110,
41,41,32,
123,10,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
116,101,
120,116,
32,61,32,
116,101,
109,112,
108,97,
116,101,
46,115,
108,105,
99,101,
40,112,
97,114,
115,101,
80,111,
115,105,
116,105,
111,110,
44,32,
116,111,
107,101,
110,46,
115,116,
97,114,
116,41,
59,10,32,
32,32,32,
32,32,32,
32,116,
111,107,
101,110,
115,46,
112,117,
115,104,
40,123,
34,116,
101,120,
116,34,
58,32,
116,101,
120,116,
44,32,34,
115,116,
97,114,
116,34,
58,32,
112,97,
114,115,
101,80,
111,115,
105,116,
105,111,
110,44,
32,34,
101,110,
100,34,
58,32,
116,111,
107,101,
110,46,
115,116,
97,114,
116,125,
41,59,10,
32,32,32,
32,32,32,
32,32,
116,111,
107,101,
110,115,
46,112,
117,115,
104,40,
116,111,
107,101,
110,41,
59,10,32,
32,32,32,
32,32,32,
32,112,
97,114,
115,101,
80,111,
115,105,
116,105,
111,110,
32,61,32,
116,111,
107,101,
110,46,
101,110,
100,59,
10,32,32,
32,32,32,
32,32,32,
10,32,32,
32,32,32,
32,32,32,
105,102,
32,40,
116,111,
107,101,
110,46,
111,112,
101,114,
97,116,
111,114,
32,61,61,
32,34,61,
34,41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,47,47,
32,115,
101,116,
32,110,
101,119,
32,100,
101,108,
105,109,
105,116,
101,114,
115,10,
32,32,32,
32,32,32,
32,32,32,
32,118,
97,114,
32,100,
101,108,
105,109,
105,116,
101,114,
115,32,
61,32,
116,111,
107,101,
110,46,
116,97,
103,46,
115,112,
108,105,
116,40,
34,32,34,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,116,
104,105,
115,46,
111,116,
97,103,
32,61,32,
100,101,
108,105,
109,105,
116,101,
114,115,
91,48,93,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
116,104,
105,115,
46,99,
116,97,
103,32,
61,32,
100,101,
108,105,
109,105,
116,101,
114,115,
91,49,93,
59,10,32,
32,32,32,
32,32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
32,40,
116,111,
107,101,
110,46,
111,112,
101,114,
97,116,
111,114,
32,61,61,
32,34,37,
34,41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,47,47,
32,115,
116,111,
114,101,
32,112,
114,97,
103,109,
97,10,32,
32,32,32,
32,32,32,
32,32,32,
118,97,
114,32,
112,114,
97,103,
109,97,
73,110,
102,111,
32,61,32,
116,111,
107,101,
110,46,
116,97,
103,46,
109,97,
116,99,
104,40,
47,40,91,
92,119,
95,45,93,
43,41,32,
63,40,91,
92,119,
93,43,61,
91,92,
119,93,
43,41,63,
47,41,59,
10,32,32,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
112,114,
97,103,
109,97,
32,61,32,
112,114,
97,103,
109,97,
73,110,
102,111,
91,49,93,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
105,102,
32,40,33,
116,104,
105,115,
46,112,
114,97,
103,109,
97,115,
95,105,
109,112,
108,101,
109,101,
110,116,
101,100,
91,112,
114,97,
103,109,
97,93,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,116,
104,114,
111,119,
32,110,
101,119,
32,69,
114,114,
111,114,
40,34,84,
104,105,
115,32,
105,109,
112,108,
101,109,
101,110,
116,97,
116,105,
111,110,
32,111,
102,32,
109,117,
115,116,
97,99,
104,101,
32,100,
111,101,
115,110,
39,116,
32,117,
110,100,
101,114,
115,116,
97,110,
100,32,
116,104,
101,32,
39,34,32,
43,32,
112,114,
97,103,
109,97,
32,43,32,
34,39,32,
112,114,
97,103,
109,97,
34,41,59,
10,32,32,
32,32,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
32,32,32,
32,118,
97,114,
32,111,
112,116,
105,111,
110,115,
32,61,32,
123,125,
10,32,32,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
111,112,
116,105,
111,110,
83,116,
114,32,
61,32,
112,114,
97,103,
109,97,
73,110,
102,111,
91,50,93,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
105,102,
32,40,
111,112,
116,105,
111,110,
83,116,
114,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,118,
97,114,
32,111,
112,116,
115,32,
61,32,
111,112,
116,105,
111,110,
83,116,
114,46,
115,112,
108,105,
116,40,
34,61,34,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
111,112,
116,105,
111,110,
115,91,
111,112,
116,115,
91,48,93,
93,32,61,
32,111,
112,116,
115,91,
49,93,59,
10,32,32,
32,32,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
32,32,32,
32,112,
114,97,
103,109,
97,115,
91,112,
114,97,
103,109,
97,93,32,
61,32,
111,112,
116,105,
111,110,
115,59,
10,32,32,
32,32,32,
32,32,32,
125,10,
32,32,32,
32,32,32,
125,10,
32,32,32,
32,32,32,
118,97,
114,32,
102,105,
110,97,
108,84,
101,120,
116,32,
61,32,
116,101,
109,112,
108,97,
116,101,
46,115,
108,105,
99,101,
40,112,
97,114,
115,101,
80,111,
115,105,
116,105,
111,110,
44,32,
116,101,
109,112,
108,97,
116,101,
46,108,
101,110,
103,116,
104,41,
59,10,32,
32,32,32,
32,32,
116,111,
107,101,
110,115,
46,112,
117,115,
104,40,
123,34,
116,101,
120,116,
34,58,32,
102,105,
110,97,
108,84,
101,120,
116,44,
32,34,
115,116,
97,114,
116,34,
58,32,
112,97,
114,115,
101,80,
111,115,
105,116,
105,111,
110,44,
32,34,
101,110,
100,34,
58,32,
116,101,
109,112,
108,97,
116,101,
46,108,
101,110,
103,116,
104,125,
41,59,10,
32,32,32,
32,32,32,
114,101,
116,117,
114,110,
32,116,
111,107,
101,110,
115,59,
10,32,32,
32,32,
125,44,
10,32,32,
32,32,10,
32,32,32,
32,47,47,
32,78,79,
84,69,58,
32,101,
109,112,
116,105,
101,115,
32,116,
111,107,
101,110,
115,32,
112,97,
114,97,
109,101,
116,101,
114,32,
97,110,
100,32,
109,111,
100,105,
102,105,
101,115,
32,105,
116,115,
32,102,
111,114,
109,101,
114,32,
115,117,
98,111,
98,106,
101,99,
116,115,
10,32,32,
32,32,
102,111,
114,109,
84,114,
101,101,
58,32,
102,117,
110,99,
116,105,
111,110,
40,116,
111,107,
101,110,
115,44,
32,115,
101,99,
116,105,
111,110,
44,32,
112,114,
97,103,
109,97,
115,41,
32,123,
10,32,32,
32,32,32,
32,118,
97,114,
32,116,
114,101,
101,32,
61,32,91,
93,59,10,
32,32,32,
32,32,32,
118,97,
114,32,
116,111,
107,101,
110,59,
10,32,32,
32,32,32,
32,119,
104,105,
108,101,
32,40,
116,111,
107,101,
110,32,
61,32,
116,111,
107,101,
110,115,
46,115,
104,105,
102,116,
40,41,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
105,102,
32,40,
116,111,
107,101,
110,46,
115,116,
97,114,
116,32,
61,61,32,
116,111,
107,101,
110,46,
101,110,
100,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,47,
47,32,
100,114,
111,112,
32,101,
109,112,
116,121,
32,116,
111,107,
101,110,
115,10,
32,32,32,
32,32,32,
32,32,32,
32,99,
111,110,
116,105,
110,117,
101,59,
10,32,32,
32,32,32,
32,32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,116,
111,107,
101,110,
46,116,
97,103,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,105,
102,32,
40,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,32,
34,35,34,
32,124,
124,32,
116,111,
107,101,
110,46,
111,112,
101,114,
97,116,
111,114,
32,61,61,
32,34,94,
34,41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
116,111,
107,101,
110,46,
115,101,
99,116,
105,111,
110,32,
61,32,
116,114,
117,101,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
116,111,
107,101,
110,46,
105,110,
118,101,
114,116,
32,61,32,
40,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,32,
32,34,94,
34,41,59,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,116,
111,107,
101,110,
46,116,
114,101,
101,32,
61,32,
116,104,
105,115,
46,102,
111,114,
109,84,
114,101,
101,40,
116,111,
107,101,
110,115,
44,32,
116,111,
107,101,
110,46,
116,97,
103,41,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,32,
34,47,34,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
105,102,
32,40,
116,111,
107,101,
110,46,
116,97,
103,32,
33,61,32,
115,101,
99,116,
105,111,
110,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
116,104,
114,111,
119,32,
110,101,
119,32,
69,114,
114,111,
114,40,
34,66,97,
100,108,
121,32,
110,101,
115,116,
101,100,
32,115,
101,99,
116,105,
111,110,
32,39,34,
32,43,32,
115,101,
99,116,
105,111,
110,32,
43,32,34,
39,34,32,
43,10,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,34,
32,40,
108,101,
102,116,
32,118,
105,97,
32,39,34,
32,43,32,
116,111,
107,101,
110,46,
116,97,
103,32,
43,34,39,
41,46,34,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
125,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
98,114,
101,97,
107,59,
10,32,32,
32,32,32,
32,32,32,
32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,32,
34,62,34,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
116,111,
107,101,
110,46,
112,97,
114,116,
105,97,
108,32,
61,32,
116,114,
117,101,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,32,
34,123,
34,32,
124,124,
32,116,
111,107,
101,110,
46,111,
112,101,
114,97,
116,111,
114,32,
61,61,32,
34,38,34,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
116,111,
107,101,
110,46,
110,111,
69,115,
99,97,
112,101,
32,61,32,
116,114,
117,101,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
125,10,
32,32,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
32,32,
116,114,
101,101,
46,112,
117,115,
104,40,
116,111,
107,101,
110,41,
59,10,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
114,101,
116,117,
114,110,
32,116,
114,101,
101,59,
10,32,32,
32,32,
125,44,
10,32,32,
32,32,10,
32,32,32,
32,114,
101,110,
100,101,
114,84,
114,101,
101,58,
32,102,
117,110,
99,116,
105,111,
110,40,
116,114,
101,101,
44,32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
44,32,
116,101,
109,112,
108,97,
116,101,
44,32,
112,114,
97,103,
109,97,
115,41,
32,123,
10,32,32,
32,32,32,
32,102,
111,114,
32,40,
118,97,
114,32,
105,32,
61,32,48,
44,32,
108,101,
110,32,
61,32,
116,114,
101,101,
46,108,
101,110,
103,116,
104,59,
32,105,
32,60,32,
108,101,
110,59,
32,43,43,
105,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
118,97,
114,32,
105,116,
101,109,
32,61,32,
116,114,
101,101,
91,105,
93,59,10,
32,32,32,
32,32,32,
32,32,
105,102,
32,40,
105,116,
101,109,
46,115,
101,99,
116,105,
111,110,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,118,
97,114,
32,105,
116,101,
114,97,
116,111,
114,32,
61,32,
116,104,
105,115,
46,118,
97,108,
117,101,
73,116,
101,114,
97,116,
111,114,
40,105,
116,101,
109,46,
116,97,
103,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,114,
97,103,
109,97,
115,41,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
118,97,
114,32,
118,97,
108,117,
101,59,
10,32,32,
32,32,32,
32,32,32,
32,32,
105,102,
32,40,
105,116,
101,109,
46,105,
110,118,
101,114,
116,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,118,
97,108,
117,101,
32,61,32,
105,116,
101,114,
97,116,
111,114,
40,41,59,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,105,
102,32,
40,33,
118,97,
108,117,
101,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
116,104,
105,115,
46,114,
101,110,
100,101,
114,84,
114,101,
101,40,
105,116,
101,109,
46,116,
114,101,
101,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
44,32,
116,101,
109,112,
108,97,
116,101,
44,32,
112,114,
97,103,
109,97,
115,41,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
32,32,32,
32,125,
32,101,
108,115,
101,32,
119,104,
105,108,
101,32,
40,118,
97,108,
117,101,
32,61,32,
105,116,
101,114,
97,116,
111,114,
40,41,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,105,
102,32,
40,116,
104,105,
115,46,
105,115,
73,110,
115,116,
97,110,
99,101,
40,118,
97,108,
117,101,
44,32,70,
117,110,
99,116,
105,111,
110,41,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
115,117,
98,116,
114,101,
101,32,
61,32,
105,116,
101,109,
46,116,
114,101,
101,59,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
118,97,
114,32,
108,97,
115,116,
83,117,
98,105,
116,101,
109,32,
61,32,
115,117,
98,116,
114,101,
101,91,
115,117,
98,116,
114,101,
101,46,
108,101,
110,103,
116,104,
45,49,93,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,118,
97,114,
32,115,
117,98,
116,101,
120,116,
32,61,32,
116,101,
109,112,
108,97,
116,101,
46,115,
108,105,
99,101,
40,105,
116,101,
109,46,
101,110,
100,44,
32,108,
97,115,
116,83,
117,98,
105,116,
101,109,
32,38,38,
32,108,
97,115,
116,83,
117,98,
105,116,
101,109,
46,101,
110,100,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
114,101,
110,100,
101,114,
101,114,
32,61,32,
102,117,
110,99,
116,105,
111,110,
40,116,
101,120,
116,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
114,101,
116,117,
114,110,
32,77,
117,115,
116,97,
99,104,
101,46,
116,111,
95,104,
116,109,
108,40,
116,101,
120,116,
44,32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
108,97,
109,98,
100,97,
82,101,
115,117,
108,116,
32,61,32,
118,97,
108,117,
101,46,
99,97,
108,108,
40,99,
111,110,
116,101,
120,116,
44,32,
115,117,
98,116,
101,120,
116,44,
32,114,
101,110,
100,101,
114,101,
114,41,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,105,
102,32,
40,108,
97,109,
98,100,
97,82,
101,115,
117,108,
116,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
116,104,
105,115,
46,115,
101,110,
100,40,
108,97,
109,98,
100,97,
82,101,
115,117,
108,116,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
125,32,
101,108,
115,101,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
118,97,
114,32,
115,117,
98,67,
111,110,
116,101,
120,116,
32,61,32,
116,104,
105,115,
46,109,
101,114,
103,101,
100,67,
111,112,
121,40,
99,111,
110,116,
101,120,
116,44,
32,118,
97,108,
117,101,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
32,32,
116,104,
105,115,
46,114,
101,110,
100,101,
114,84,
114,101,
101,40,
105,116,
101,109,
46,116,
114,101,
101,44,
32,115,
117,98,
67,111,
110,116,
101,120,
116,44,
32,112,
97,114,
116,105,
97,108,
115,44,
32,116,
101,109,
112,108,
97,116,
101,44,
32,112,
114,97,
103,109,
97,115,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
125,10,
32,32,32,
32,32,32,
32,32,32,
32,125,
10,32,32,
32,32,32,
32,32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,105,
116,101,
109,46,
112,97,
114,116,
105,97,
108,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
115,117,
98,84,
101,109,
112,108,
97,116,
101,32,
61,32,
112,97,
114,116,
105,97,
108,115,
91,105,
116,101,
109,46,
116,97,
103,93,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
105,102,
32,40,33,
115,117,
98,84,
101,109,
112,108,
97,116,
101,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,116,
104,114,
111,119,
32,110,
101,119,
32,69,
114,114,
111,114,
40,34,85,
110,107,
110,111,
119,110,
32,112,
97,114,
116,105,
97,108,
32,39,34,
32,43,32,
105,116,
101,109,
46,116,
97,103,
32,43,32,
34,39,34,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,125,
10,32,32,
32,32,32,
32,32,32,
32,32,10,
9,9,32,
32,47,47,
32,98,
121,32,
109,121,
32,117,
110,100,
101,114,
115,116,
97,110,
100,105,
110,103,
44,32,
116,104,
105,115,
32,105,
115,32,
116,104,
101,32,
109,117,
115,116,
97,99,
104,101,
40,53,41,
32,119,
97,121,
10,9,9,
32,32,47,
47,32,
116,104,
105,115,
46,114,
101,110,
100,101,
114,40,
115,117,
98,84,
101,109,
112,108,
97,116,
101,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
41,59,10,
9,9,32,
32,10,32,
32,32,32,
32,32,32,
32,32,32,
47,47,32,
116,104,
105,115,
32,105,
115,32,
64,106,
97,110,
108,39,
115,32,
119,97,
121,10,
32,32,32,
32,32,32,
32,32,32,
32,118,
97,114,
32,115,
117,98,
67,111,
110,116,
101,120,
116,32,
61,32,99,
111,110,
116,101,
120,116,
91,105,
116,101,
109,46,
116,97,
103,93,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
105,102,
32,40,
116,121,
112,101,
111,102,
40,115,
117,98,
67,111,
110,116,
101,120,
116,41,
32,61,61,
32,34,
111,98,
106,101,
99,116,
34,41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
116,104,
105,115,
46,114,
101,110,
100,101,
114,40,
115,117,
98,84,
101,109,
112,108,
97,116,
101,44,
32,115,
117,98,
67,111,
110,116,
101,120,
116,44,
32,112,
97,114,
116,105,
97,108,
115,41,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
125,32,
101,108,
115,101,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,32,
32,116,
104,105,
115,46,
114,101,
110,100,
101,114,
40,115,
117,98,
84,101,
109,112,
108,97,
116,101,
44,32,99,
111,110,
116,101,
120,116,
44,32,
112,97,
114,116,
105,97,
108,115,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,125,
10,32,32,
32,32,32,
32,32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,105,
116,101,
109,46,
111,112,
101,114,
97,116,
111,114,
32,38,38,
32,33,
105,116,
101,109,
46,110,
111,69,
115,99,
97,112,
101,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,47,
47,32,
105,103,
110,111,
114,101,
32,111,
116,104,
101,114,
32,111,
112,101,
114,97,
116,111,
114,115,
10,32,32,
32,32,32,
32,32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,105,
116,101,
109,46,
116,97,
103,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
114,97,
119,86,
97,108,
117,101,
32,61,32,
116,104,
105,115,
46,108,
111,111,
107,117,
112,86,
97,108,
117,101,
40,105,
116,101,
109,46,
116,97,
103,44,
32,99,
111,110,
116,101,
120,116,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,105,
102,32,
40,114,
97,119,
86,97,
108,117,
101,32,
33,61,32,
110,117,
108,108,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
118,97,
114,32,
118,97,
108,117,
101,32,
61,32,
114,97,
119,86,
97,108,
117,101,
46,116,
111,83,
116,114,
105,110,
103,40,
41,59,10,
32,32,32,
32,32,32,
32,32,32,
32,32,32,
116,104,
105,115,
46,115,
101,110,
100,40,
40,105,
116,101,
109,46,
110,111,
69,115,
99,97,
112,101,
41,32,63,
32,118,
97,108,
117,101,
32,58,32,
116,104,
105,115,
46,101,
115,99,
97,112,
101,72,
84,77,76,
40,118,
97,108,
117,101,
41,41,59,
10,32,32,
32,32,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
32,32,
125,32,
101,108,
115,101,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,
116,104,
105,115,
46,115,
101,110,
100,40,
105,116,
101,109,
46,116,
101,120,
116,41,
59,10,32,
32,32,32,
32,32,32,
32,125,
10,32,32,
32,32,32,
32,125,
10,32,32,
32,32,
125,44,
10,32,32,
32,32,10,
32,32,32,
32,47,47,
32,102,
105,110,
100,32,
96,110,
97,109,
101,96,
32,118,
97,108,
117,101,
32,105,
110,32,
99,117,
114,114,
101,110,
116,32,
118,105,
101,119,
32,96,99,
111,110,
116,101,
120,116,
96,10,32,
32,32,32,
108,111,
111,107,
117,112,
86,97,
108,117,
101,58,
32,102,
117,110,
99,116,
105,111,
110,40,
110,97,
109,101,
44,32,99,
111,110,
116,101,
120,116,
41,32,
123,10,
32,32,32,
32,32,32,
118,97,
114,32,
118,97,
108,117,
101,32,
61,32,99,
111,110,
116,101,
120,116,
91,110,
97,109,
101,93,
59,10,32,
32,32,32,
32,32,47,
47,32,
101,118,
97,108,
117,97,
116,101,
32,112,
108,97,
105,110,
45,102,
117,110,
99,116,
105,111,
110,32,
118,97,
108,117,
101,32,
40,111,
110,108,
121,32,
111,110,
99,101,
41,10,32,
32,32,32,
32,32,
105,102,
32,40,
116,104,
105,115,
46,105,
115,73,
110,115,
116,97,
110,99,
101,40,
118,97,
108,117,
101,44,
32,70,
117,110,
99,116,
105,111,
110,41,
32,38,38,
32,33,
118,97,
108,117,
101,46,
105,116,
101,114,
97,116,
111,114,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,
118,97,
108,117,
101,32,
61,32,
118,97,
108,117,
101,46,
97,112,
112,108,
121,40,
99,111,
110,116,
101,120,
116,41,
59,10,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
47,47,32,
115,105,
108,101,
110,116,
108,121,
32,105,
103,110,
111,114,
101,32,
117,110,
107,111,
119,110,
32,118,
97,114,
105,97,
98,108,
101,115,
10,32,32,
32,32,32,
32,105,
102,32,
40,118,
97,108,
117,101,
32,61,61,
32,110,
117,108,
108,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
118,97,
108,117,
101,32,
61,32,34,
34,59,10,
32,32,32,
32,32,32,
125,10,
32,32,32,
32,32,32,
114,101,
116,117,
114,110,
32,118,
97,108,
117,101,
59,10,32,
32,32,32,
125,44,
10,32,32,
32,32,10,
32,32,32,
32,111,
98,106,
101,99,
116,86,
97,108,
117,101,
58,32,
102,117,
110,99,
116,105,
111,110,
40,118,
97,108,
117,101,
44,32,99,
111,110,
116,101,
120,116,
44,32,
112,114,
97,103,
109,97,
115,41,
32,123,
10,32,32,
32,32,32,
32,105,
102,32,
40,118,
97,108,
117,101,
32,61,61,
32,110,
117,108,
108,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
32,32,
114,101,
116,117,
114,110,
32,110,
117,108,
108,59,
10,32,32,
32,32,32,
32,125,
10,32,32,
32,32,32,
32,105,
102,32,
40,116,
104,105,
115,46,
105,115,
73,110,
115,116,
97,110,
99,101,
40,118,
97,108,
117,101,
44,32,70,
117,110,
99,116,
105,111,
110,41,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,
114,101,
116,117,
114,110,
32,118,
97,108,
117,101,
59,10,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
10,32,32,
32,32,32,
32,118,
97,114,
32,111,
98,106,
59,10,32,
32,32,32,
32,32,
105,102,
32,40,79,
98,106,
101,99,
116,46,
112,114,
111,116,
111,116,
121,112,
101,46,
116,111,
83,116,
114,105,
110,103,
46,99,97,
108,108,
40,118,
97,108,
117,101,
41,32,61,
61,32,39,
91,111,
98,106,
101,99,
116,32,
79,98,
106,101,
99,116,
93,39,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
111,98,
106,32,
61,32,
118,97,
108,117,
101,59,
10,32,32,
32,32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
40,112,
114,97,
103,109,
97,115,
91,34,73,
77,80,76,
73,67,73,
84,45,73,
84,69,82,
65,84,79,
82,34,93,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,47,
47,32,
111,114,
105,103,
105,110,
97,108,
32,99,
114,101,
100,105,
116,32,
116,111,
32,64,
108,97,
110,103,
97,108,
101,120,
44,32,
115,117,
112,112,
111,114,
116,32,
102,111,
114,32,
97,114,
114,97,
121,115,
32,111,
102,32,
115,116,
114,105,
110,103,
115,10,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
105,116,
101,114,
97,116,
111,114,
75,101,
121,32,
61,32,
112,114,
97,103,
109,97,
115,91,
34,73,77,
80,76,73,
67,73,84,
45,73,84,
69,82,65,
84,79,82,
34,93,46,
105,116,
101,114,
97,116,
111,114,
32,124,
124,32,
34,46,34,
59,10,32,
32,32,32,
32,32,32,
32,111,
98,106,
32,61,32,
123,125,
59,10,32,
32,32,32,
32,32,32,
32,111,
98,106,
91,105,
116,101,
114,97,
116,111,
114,75,
101,121,
93,32,61,
32,118,
97,108,
117,101,
59,10,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,32,32,
114,101,
116,117,
114,110,
32,111,
98,106,
59,10,32,
32,32,32,
125,44,
10,32,32,
32,32,10,
32,32,32,
32,47,47,
32,97,
108,119,
97,121,
115,32,
114,101,
116,117,
114,110,
115,32,
105,116,
101,114,
97,116,
111,114,
32,102,
117,110,
99,116,
105,111,
110,32,
114,101,
116,117,
114,110,
105,110,
103,32,
111,98,
106,101,
99,116,
47,110,
117,108,
108,10,
32,32,32,
32,118,
97,108,
117,101,
73,116,
101,114,
97,116,
111,114,
58,32,
102,117,
110,99,
116,105,
111,110,
40,110,
97,109,
101,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,114,
97,103,
109,97,
115,41,
32,123,
10,32,32,
32,32,32,
32,118,
97,114,
32,118,
97,108,
117,101,
32,61,32,
116,104,
105,115,
46,108,
111,111,
107,117,
112,86,
97,108,
117,101,
40,110,
97,109,
101,44,
32,99,
111,110,
116,101,
120,116,
41,59,10,
32,32,32,
32,32,32,
118,97,
114,32,
109,101,
32,61,32,
116,104,
105,115,
59,10,32,
32,32,32,
32,32,
105,102,
32,40,33,
118,97,
108,117,
101,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
114,101,
116,117,
114,110,
32,102,
117,110,
99,116,
105,111,
110,40,
41,123,
125,59,
10,32,32,
32,32,32,
32,125,
32,101,
108,115,
101,32,
105,102,
32,40,
116,104,
105,115,
46,105,
115,73,
110,115,
116,97,
110,99,
101,40,
118,97,
108,117,
101,44,
32,70,
117,110,
99,116,
105,111,
110,41,
32,38,38,
32,118,
97,108,
117,101,
46,105,
116,101,
114,97,
116,111,
114,41,
32,123,
10,32,32,
32,32,32,
32,32,32,
114,101,
116,117,
114,110,
32,118,
97,108,
117,101,
59,10,32,
32,32,32,
32,32,
125,32,
101,108,
115,101,
32,105,
102,32,
40,116,
104,105,
115,46,
105,115,
73,110,
115,116,
97,110,
99,101,
40,118,
97,108,
117,101,
44,32,65,
114,114,
97,121,
41,41,32,
123,10,
32,32,32,
32,32,32,
32,32,
118,97,
114,32,
105,32,
61,32,48,
59,10,32,
32,32,32,
32,32,32,
32,118,
97,114,
32,108,
32,61,32,
118,97,
108,117,
101,46,
108,101,
110,103,
116,104,
59,10,32,
32,32,32,
32,32,32,
32,114,
101,116,
117,114,
110,32,
102,117,
110,99,
116,105,
111,110,
40,41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,114,
101,116,
117,114,
110,32,
40,105,
32,60,32,
108,41,
32,63,32,
109,101,
46,111,
98,106,
101,99,
116,86,
97,108,
117,101,
40,118,
97,108,
117,101,
91,105,
43,43,93,
44,32,99,
111,110,
116,101,
120,116,
44,32,
112,114,
97,103,
109,97,
115,41,
32,58,32,
110,117,
108,108,
59,10,32,
32,32,32,
32,32,32,
32,125,
10,32,32,
32,32,32,
32,125,
32,101,
108,115,
101,32,
123,10,
32,32,32,
32,32,32,
32,32,
114,101,
116,117,
114,110,
32,102,
117,110,
99,116,
105,111,
110,40,
41,32,
123,10,
32,32,32,
32,32,32,
32,32,32,
32,118,
97,114,
32,118,
32,61,32,
118,97,
108,117,
101,59,
10,32,32,
32,32,32,
32,32,32,
32,32,
118,97,
108,117,
101,32,
61,32,
110,117,
108,108,
59,10,32,
32,32,32,
32,32,32,
32,32,32,
114,101,
116,117,
114,110,
32,109,
101,46,
111,98,
106,101,
99,116,
86,97,
108,117,
101,40,
118,44,
32,99,
111,110,
116,101,
120,116,
44,32,
112,114,
97,103,
109,97,
115,41,
59,10,32,
32,32,32,
32,32,32,
32,125,
59,10,32,
32,32,32,
32,32,
125,10,
32,32,32,
32,125,
44,10,32,
32,32,32,
10,32,32,
32,32,47,
47,32,
114,101,
108,105,
97,98,
108,121,
32,99,
104,101,
99,107,
32,111,
98,106,
101,99,
116,32,
116,121,
112,101,
32,70,
117,110,
99,116,
105,111,
110,47,
65,114,
114,97,
121,44,
32,101,
118,101,
110,32,
119,104,
101,110,
32,111,
98,106,
101,99,
116,32,
119,97,
115,32,
99,111,
110,115,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment