commit 7bba9dc2b0f3712145a767e6681954c504c22f29 Author: Wynne Crisman Date: Sun Oct 25 15:20:42 2015 -0700 Initial commit. Transferred from an Eclipse/Brainstorm environment to NodeJS. diff --git a/PetitTeton Dependancies.bat b/PetitTeton Dependancies.bat new file mode 100644 index 0000000..150d67a --- /dev/null +++ b/PetitTeton Dependancies.bat @@ -0,0 +1 @@ +cmd /k "npm install" \ No newline at end of file diff --git a/Run PetitTeton NodeJS.bat b/Run PetitTeton NodeJS.bat new file mode 100644 index 0000000..76e773c --- /dev/null +++ b/Run PetitTeton NodeJS.bat @@ -0,0 +1 @@ +cmd /k "node bin/www" \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..8478f01 --- /dev/null +++ b/app.js @@ -0,0 +1,401 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); +var nodemailer = require('nodemailer'); +var bodyParser = require('body-parser'); +var phantom = require('node-phantom'); +var fs = require('fs'); +var rootPath = path.join(__dirname, 'public'); +var config = require('./config'); +var moment = require('moment'); + +var app = express(); + +app.use(bodyParser.urlencoded({extended: false})); + +//app.use(favicon(__dirname + '/public/images/AV4H.ico')); +app.use(logger('dev')); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(cookieParser()); + +app.use(require('stylus').middleware(path.join(__dirname, 'public'))); + +//Ensure we have an endsWith method in String. +String.prototype.endsWith = function(suffix) { + return this.indexOf(suffix, this.length - suffix.length) !== -1; +}; +/* +//Check for all calls to content pages with a password attached and log it in the password's counter. +app.use(function(req, res, next) { + if(req.path.endsWith('.html')) { + if(req.query.Password) { + incrementPwdUseCount(req.query.Password); + } + } + + next(); +}); +*/ +app.use(express.static(rootPath, {dotfiles: 'deny', index: false})); + +//app.use('/', routes); + +app.use('/FrameworkController.java', function(req, res) { + console.log("In /FrameworkController.java"); + var requestParam = req.query.Request; + + if(requestParam == 'CreateId') { + res.type('json'); + res.send({result: 0}); + } + else { + console.log('unexpected value'); + res.status(400).send('Unexpected Param'); + } +}); + +//Handle the getting a brief and contacting us. +var smtpTransport = nodemailer.createTransport({host: config.smtpHost, port: config.smtpPort, secure: true, ignoreTLS: false, requiresAuth: true, auth: {user: config.smtpUser, pass: config.smtpPassword}}); +/* +//TEST CODE!!!// +try { + var name = "Wynne Crisman"; + var email = "wynne@petitteton.com"; + var textPath = rootPath + '/email/downloadBreifText.txt'; + var htmlPath = rootPath + '/email/downloadBriefHtml.txt'; + var signaturePath = rootPath + '/email/emailSignature.jpg'; + var params = {from: config.fromAddress, to: email, subject: "Payback Brief", text: {path: textPath}, html: {path: htmlPath}, attachments: [{filename:'emailSignature.jpg', cid: 'emailSignature', path: signaturePath}]}; + + smtpTransport.sendMail(params, function(error, response) { + if(error) { + console.log("Error: " + error); + } + else { + console.log("Successfully sent the email - not an error."); + } + }); +} +catch(e) { + console.log(e); +} +//END TEST// +*/ +/* +//Setup the passwords used by users to access the content. Allows us to track who has used the site when and how much. +//Note: This is mostly for marketing purposes so it won't be very secure at all (no hashing, salting, SSL, or anything), and it allows the search engines to bypass it to the content. +var pwdData; +try { + if(fs.existsSync('pwdData.json')) { + pwdData = JSON.parse(fs.readFileSync('pwdData.json', 'utf8')); + } + else { + pwdData = []; + pwdData.push({pwd: 'zerotoone'}); + pwdData.push({pwd: 'zephyr'}); + pwdData.push({pwd: 'borealis'}); + pwdData.push({pwd: 'gyroscope'}); + pwdData.push({pwd: 'colnago'}); + pwdData.push({pwd: 'derosa'}); + pwdData.push({pwd: 'wwww&w'}); + pwdData.push({pwd: 'catalyst'}); + fs.writeFileSync('pwdData.json', JSON.stringify(pwdData), 'utf8'); + } +} catch(e) {console.log(e);} + +function writePwdData() { + try { + fs.writeFileSync('pwdData.json', JSON.stringify(pwdData), 'utf8'); + } catch(e) {console.log(e);} +} + +function incrementPwdUseCount(password) { + //Note: This is mostly for marketing purposes so it won't be very secure at all (no hashing, salting, SSL, or anything), and it allows the search engines to bypass it to the content. + try { + if(password) { + var index; + var found = false; + + //Convert the password from base64. + password = new Buffer(password, 'base64').toString('utf-8'); + + //Identify which password was used (note: could use a map, but realistically with so few it is pointless complexity). + for(index = 0; !found && index < pwdData.length; index++) { + if(pwdData[index].pwd == password) { + //Track the number of times a user requests a content page.// + if(pwdData[index].accessCount) pwdData[index].accessCount++; + else pwdData[index].accessCount = 1; + + writePwdData(); + found = true; + } + } + } + } catch(e) {console.log(e);} +} + + +app.use('/RequestBrief/', function(req, res) { + try { + var firstName = req.body.FirstName; + var lastName = req.body.LastName; + var email = req.body.Email; + var isPartnership = req.body.PartnershipInterest; + var isInvestment = req.body.InvestmentInterest; + var isOther = req.body.OtherInterest; + var textPath = rootPath + '/email/downloadBriefText.txt'; + var htmlPath = rootPath + '/email/downloadBriefHtml.txt'; + var signaturePath = rootPath + '/email/emailSignature.jpg'; + var params = {from: config.fromAddress, to: email, subject: "Payback Brief", text: {path: textPath}, html: {path: htmlPath}, attachments: [{filename:'emailSignature.jpg', cid: 'emailSignature', path: signaturePath}]}; + + smtpTransport.sendMail(params, function(error, response) { + try { + if(error) { + console.log("Received an error while sending the download brief email to the user. " + error); + fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (request brief)");}}); + } + else { + params = {from: config.fromAddress, to: config.contactUsRecipient, subject: "Downloaded Brief", text: "A user has requested the Payback brief.\n\nFirst Name: " + firstName + "\nLast Name: " + lastName + "\nEmail: " + email + "\nPartnership: " + isPartnership + "\nInvestment: " + isInvestment + "\nOther: " + isOther}; + + smtpTransport.sendMail(params, function(error, response) { + if(error) { + try { + console.log("Received an error while sending the request brief email to the admin. " + error); + fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (request brief)");}}); + } catch(e) {console.log(e);} + } + }); + } + res.status(200).send('success'); + } catch(e) {console.log(e);} + }); + } catch(e) {console.log(e);} +}); +app.use('/RequestFinancials/', function(req, res) { + try { + var firstName = req.body.FirstName; + var lastName = req.body.LastName; + var email = req.body.Email; + var phone = req.body.Phone; + var company = req.body.Company; + var message = req.body.Message; + var isPartnership = req.body.PartnershipInterest; + var isInvestment = req.body.InvestmentInterest; + var isOther = req.body.OtherInterest; + var textPath = rootPath + '/email/downloadFinancialsText.txt'; + var htmlPath = rootPath + '/email/downloadFinancialsHtml.txt'; + var textContents = fs.readFileSync(textPath, "UTF8"); + var htmlContents = fs.readFileSync(htmlPath, "UTF8"); + var signaturePath = rootPath + '/email/emailSignature.jpg'; + + textContents = textContents.replace("%%NAME%%", firstName); + htmlContents = htmlContents.replace("%%NAME%%", firstName); + + var params = {from: config.fromAddress, to: email, subject: "Payback Financials", text: textContents, html: htmlContents, attachments: [{filename:'emailSignature.jpg', cid: 'emailSignature', path: signaturePath}]}; + + smtpTransport.sendMail(params, function(error, response) { + try { + if(error) { + console.log("Received an error while sending the request financials email to the user. " + error); + fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (request financials)");}}); + } + else { + params = {from: config.fromAddress, to: config.contactUsRecipient, subject: "Downloaded Financials", text: "A user has requested Payback's financials.\n\nFirst Name: " + firstName + "\nLast Name: " + lastName + "\nEmail: " + email + "\nPhone: " + phone + "\nCompany: " + company + "\nPartnership: " + isPartnership + "\nInvestment: " + isInvestment + "\nOther: " + isOther + "\nMessage: " + message}; + + smtpTransport.sendMail(params, function(error, response) { + if(error) { + try { + console.log("Received an error while sending the request financials email to the admin. " + error); + fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (request financials)");}}); + } catch(e) {console.log(e);} + } + }); + } + res.status(200).send('success'); + } catch(e) {console.log(e);} + }); + } catch(e) {console.log(e);} +}); +*/ +app.use('/ContactUs', function(req, res) { + try { + var firstName = req.body.FirstName; + var lastName = req.body.LastName; + var email = req.body.Email; + var message = req.body.Text; + var params = {from: config.fromAddress, to: config.contactUsRecipient, subject: "Contact Us", text: "A user has commented via the Petit Teton website.\n\nFirst Name: " + firstName + "\nLast Name: " + lastName + "\nEmail: " + email + "\n" + message}; + + smtpTransport.sendMail(params, function(error, response) { + if(error) { + try { + console.log("Received an error while sending the contact us email to the admin. " + error); + fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (contact us)");}}); + } catch(e) {console.log(e);} + } + }); + + res.status(200).send('success'); + } catch(e) {console.log(e);} +}); +/* +app.use('/LoginUser', function(req, res) { + //Note: This is mostly for marketing purposes so it won't be very secure at all (no hashing, salting, SSL, or anything), and it allows the search engines to bypass it to the content. + try { + var password = req.body.Password; + + if(password) { + var index; + var found = false; + + //Convert the password from base64. + password = new Buffer(password, 'base64').toString('utf-8'); + + //Identify which password was used (note: could use a map, but realistically with so few it is pointless complexity). + for(index = 0; !found && index < pwdData.length; index++) { + if(pwdData[index].pwd == password) { + //Track the time of the first and last login. + if(pwdData[index].firstLogin) pwdData[index].lastLogin = new Date(); + else pwdData[index].firstLogin = new Date(); + + writePwdData(); + found = true; + } + } + + if(found) { + //Notify the client they have logged in. + res.status(200).send('success'); + } + else { + res.status(200).send('failed'); + } + } + else { + res.status(200).send('failed'); + } + } catch(e) {console.log(e);} +}); +*/ +console.log("Time now is: " + moment(new Date()).format("MMM Do YYYY, h:mm:ss a")); +/* +app.use('/Admin/UserData', function(req, res) { + //TODO: Return a table of user data. This is a hidden function, and since the data is not very sensitive we won't bother with password protection or ssl. + var body = ""; + + for(var index = 0; index < pwdData.length; index++) { + body += ""; + body += ""; + body += ""; + body += ""; + body += ""; + body += ""; + } + + body += "
PasswordPage Request CountFirst LoginLast Login
" + pwdData[index].pwd + "" + (pwdData[index].accessCount ? pwdData[index].accessCount : 0) + "" + (pwdData[index].firstLogin ? (moment(pwdData[index].firstLogin).format("MMM Do YYYY, h:mm:ss a") + " (" + moment(pwdData[index].firstLogin).fromNow() + ")") : "") + "" + (pwdData[index].lastLogin ? (moment(pwdData[index].lastLogin).format("MMM Do YYYY, h:mm:ss a") + " (" + moment(pwdData[index].lastLogin).fromNow() + ")") : "") + "
"; + res.send(body); +}); +*/ +//Handle the root being requested, and the search engine requesting a static page with content. +app.use('/', function(req, res) { + try { + //Note: This is for search engines. It bypasses the password, which is fine since that is mostly a marketing gimmic to make users feel that they have some special access priviliges. + if(typeof(req.query._escaped_fragment_) !== "undefined") { + //The DIY method which is somewhat brittle since it relies on existing in the index.html file, and it replaces that with the contents of the passed parameter (what is after the #!) for the content html which is inserted into the index.html in place of . + fs.readFile(rootPath + '/index.html', {encoding: "UTF8"}, function(err, indexContent) { + if(!err) { + var file = rootPath + '/' + req.query._escaped_fragment_ + '.html'; + + fs.readFile(file, {encoding: "UTF8"}, function(err, content) { + if(!err) { + //Non-regex method.// + if(content.indexOf("") != -1 && content.indexOf("") != -1) { + content = content.substr(0, content.indexOf("")) + content.substr(content.indexOf("") + 10, -1); + } + //Doesn't work? Not sure why. Works in the regex test tools.// + //content = content.replace(/(.|\n)*?<\x2frunonce>/, " "); + + //Doesn't work? Based on the regex failure above, I think that replace is failing.// + var html = indexContent.replace(//g, content); + + //console.log(html); + res.send(html); + } + else console.log("Error reading the content file '" + file + "'. " + err); + }); + } + else console.log("Error reading the index.html file. " + err); + }); + /* Does not work! Would be nice, but Phantom doesn't work well with Node.js. Could try using jsdom/io.js or could use prerenderer-node which is a server that runs in parallel with the web server and builds the html as the client would, which is then returned. + phantom.create(function(err, ph) { + if(!err) { + return ph.createPage(function(err, page) { + return page.open(req.protocol + "://" + req.hostname + ':' + req.app.get('port') + req.path + "#!" + req.query._escaped_fragment_, function(status) { + return page.evaluate((function() { + return document.getElementsByTagName('html')[0].innerHTML; + }), function(err, result) { + res.send(result); + return ph.exit(); + }); + }); + }); + } + else console.log("Error in Phantom.create: " + err); + }); + */ + } + else { + res.sendFile("index.html", {root: rootPath}); + } + } catch(e) {console.log(e);} +}); + +//Schedule a task every 10 minutes to check the email failure log and re-attempt sending.// +/* TODO +setInterval(function() { + //How to remove things from the file without worrying about synchronization between those threads adding to the file? + fs. +}, 600000); +*/ + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + try { + var err = new Error('Not Found'); + err.status = 404; + next(err); + } catch(e) {console.log(e);} +}); + +// error handlers + +// development error handler +// will print stacktrace +if (app.get('env') === 'development') { + app.use(function(err, req, res, nex) { + try { + res.status(err.status || 500); + res.render('error.ejs', { + message: err.message, + error: err + }); + } catch(e) {console.log(e);} + }); +} + +// production error handler +// no stacktraces leaked to user +app.use(function(err, req, res, next) { + try { + res.status(err.status || 500); + res.render('error.ejs', { + message: err.message, + error: {} + }); + } catch(e) {console.log(e);} +}); + +//console.log(app._router); + +module.exports = app; \ No newline at end of file diff --git a/bin/www b/bin/www new file mode 100644 index 0000000..c1eab24 --- /dev/null +++ b/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('payback:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '4480'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/config.example.js b/config.example.js new file mode 100644 index 0000000..26d4052 --- /dev/null +++ b/config.example.js @@ -0,0 +1,10 @@ + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +//Email settings - Change these: +exports.fromAddress = 'dave@paybackdigital.com'; +exports.smtpUser = 'dave@paybackdigital.com'; +exports.smtpPassword = 'password'; +exports.smtpHost = "secure.emailsrvr.com"; +exports.smtpPort = 587; +exports.contactUsRecipient = fromAddress; +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/config.js b/config.js new file mode 100644 index 0000000..ab0ffd3 --- /dev/null +++ b/config.js @@ -0,0 +1,10 @@ + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +//Email settings - Change these: +exports.fromAddress = 'wynne@av4h.com'; +exports.smtpUser = 'wynne@av4h.com'; +exports.smtpPassword = 'landFJ40'; +exports.smtpHost = "secure.emailsrvr.com"; +exports.smtpPort = 465; +exports.contactUsRecipient = exports.fromAddress; +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/debug node.js.bat b/debug node.js.bat new file mode 100644 index 0000000..6633926 --- /dev/null +++ b/debug node.js.bat @@ -0,0 +1 @@ +cmd /k "node-debug bin/www" \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..3bee40f --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "payback", + "version": "1.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "body-parser": "~1.10.2", + "cookie-parser": "~1.3.3", + "debug": "~2.1.1", + "ejs": "~2.2.3", + "express": "~4.11.1", + "morgan": "~1.5.1", + "serve-favicon": "~2.2.0", + "stylus": "~0.42.3", + "swig": "~1.4.2", + "html": "latest", + "nodemailer": "~1.0", + "body-parser": "latest", + "node-phantom": "latest", + "moment": "latest" + } +} diff --git a/photos/.svn/entries b/photos/.svn/entries new file mode 100644 index 0000000..3abc84c --- /dev/null +++ b/photos/.svn/entries @@ -0,0 +1,364 @@ +10 + +dir +0 +svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files +svn://gooeyfish +add + + + + + + + +svn:special svn:externals svn:needs-lock + + + + + + + + + + + +5bae2391-cca6-ca44-bb23-a66e832fb2eb + +Chicken Icon.png +file + +svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Chicken%20Icon.png + +add + + + + + +has-props +has-prop-mods + +Chicken-Egg.png +file + + + +add + + + + + +has-props +has-prop-mods + +Chicken.png +file + + + +add + + + + + +has-props +has-prop-mods + +Chicken.svg +file + + + +add + +Header-1.png +file + + + +add + + + + + +has-props +has-prop-mods + +Header-1.svg +file + + + +add + +Map.psd +file + + + +add + + + + + +has-props +has-prop-mods + +Misc Images.svg +file + +svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Misc%20Images.svg + +add + +Petitteton Image Instructions.txt +file + +svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Petitteton%20Image%20Instructions.txt + +add + + + + + +has-props +has-prop-mods + +Petitteton.png +file + + + +add + + + + + +has-props +has-prop-mods + +Petitteton.svg +file + + + +add + +Petitteton2.png +file + + + +add + + + + + +has-props +has-prop-mods + +Petitteton2.svg +file + + + +add + +Yak Grazing.png +file + +svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Yak%20Grazing.png + +add + + + + + +has-props +has-prop-mods + +Yak Grazing.psd +file + +svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Yak%20Grazing.psd + +add + + + + + +has-props +has-prop-mods + +Yak-Grazing_v2.psd +file + + + +add + + + + + +has-props +has-prop-mods + +bullet.psd +file + + + +add + + + + + +has-props +has-prop-mods + +egg.png +file + + + +add + + + + + +has-props +has-prop-mods + +h1.png +file + + + +add + + + + + +has-props +has-prop-mods + +h3.png +file + + + +add + + + + + +has-props +has-prop-mods + +h4.png +file + + + +add + + + + + +has-props +has-prop-mods + +h5.png +file + + + +add + + + + + +has-props +has-prop-mods + +h6.png +file + + + +add + + + + + +has-props +has-prop-mods + +h7.png +file + + + +add + + + + + +has-props +has-prop-mods + +h8.png +file + + + +add + + + + + +has-props +has-prop-mods + +menu-background.psd +file + + + +add + + + + + +has-props +has-prop-mods + +photos +dir + + + +add + diff --git a/photos/.svn/props/Chicken Icon.png.svn-work b/photos/.svn/props/Chicken Icon.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Chicken Icon.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/Chicken-Egg.png.svn-work b/photos/.svn/props/Chicken-Egg.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Chicken-Egg.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/Chicken.png.svn-work b/photos/.svn/props/Chicken.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Chicken.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/Header-1.png.svn-work b/photos/.svn/props/Header-1.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Header-1.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/Map.psd.svn-work b/photos/.svn/props/Map.psd.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Map.psd.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/Petitteton Image Instructions.txt.svn-work b/photos/.svn/props/Petitteton Image Instructions.txt.svn-work new file mode 100644 index 0000000..138f983 --- /dev/null +++ b/photos/.svn/props/Petitteton Image Instructions.txt.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 10 +text/plain +END diff --git a/photos/.svn/props/Petitteton.png.svn-work b/photos/.svn/props/Petitteton.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Petitteton.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/Petitteton2.png.svn-work b/photos/.svn/props/Petitteton2.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Petitteton2.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/Yak Grazing.png.svn-work b/photos/.svn/props/Yak Grazing.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Yak Grazing.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/Yak Grazing.psd.svn-work b/photos/.svn/props/Yak Grazing.psd.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Yak Grazing.psd.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/Yak-Grazing_v2.psd.svn-work b/photos/.svn/props/Yak-Grazing_v2.psd.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/Yak-Grazing_v2.psd.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/bullet.psd.svn-work b/photos/.svn/props/bullet.psd.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/bullet.psd.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/egg.png.svn-work b/photos/.svn/props/egg.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/egg.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/h1.png.svn-work b/photos/.svn/props/h1.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/h1.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/h3.png.svn-work b/photos/.svn/props/h3.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/h3.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/h4.png.svn-work b/photos/.svn/props/h4.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/h4.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/h5.png.svn-work b/photos/.svn/props/h5.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/h5.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/h6.png.svn-work b/photos/.svn/props/h6.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/h6.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/h7.png.svn-work b/photos/.svn/props/h7.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/h7.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/h8.png.svn-work b/photos/.svn/props/h8.png.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/h8.png.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/.svn/props/menu-background.psd.svn-work b/photos/.svn/props/menu-background.psd.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/.svn/props/menu-background.psd.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/2011-12-16 18.58.10.jpg b/photos/2011-12-16 18.58.10.jpg new file mode 100644 index 0000000..4ab6e39 Binary files /dev/null and b/photos/2011-12-16 18.58.10.jpg differ diff --git a/photos/2011-Sept 041.jpg b/photos/2011-Sept 041.jpg new file mode 100644 index 0000000..e536ea8 Binary files /dev/null and b/photos/2011-Sept 041.jpg differ diff --git a/photos/2012-1 021.jpg b/photos/2012-1 021.jpg new file mode 100644 index 0000000..0525f94 Binary files /dev/null and b/photos/2012-1 021.jpg differ diff --git a/photos/2012-1-2 004.jpg b/photos/2012-1-2 004.jpg new file mode 100644 index 0000000..23e0857 Binary files /dev/null and b/photos/2012-1-2 004.jpg differ diff --git a/photos/2012-11-08 22.20.59.jpg b/photos/2012-11-08 22.20.59.jpg new file mode 100644 index 0000000..c3c1bfb Binary files /dev/null and b/photos/2012-11-08 22.20.59.jpg differ diff --git a/photos/2012-12-13 18.01.34.jpg b/photos/2012-12-13 18.01.34.jpg new file mode 100644 index 0000000..dc90fa4 Binary files /dev/null and b/photos/2012-12-13 18.01.34.jpg differ diff --git a/photos/2012-2-1 001.jpg b/photos/2012-2-1 001.jpg new file mode 100644 index 0000000..ce4d09f Binary files /dev/null and b/photos/2012-2-1 001.jpg differ diff --git a/photos/2012-2-1 003.jpg b/photos/2012-2-1 003.jpg new file mode 100644 index 0000000..c3c363a Binary files /dev/null and b/photos/2012-2-1 003.jpg differ diff --git a/photos/2012-2-1 006.jpg b/photos/2012-2-1 006.jpg new file mode 100644 index 0000000..889aae4 Binary files /dev/null and b/photos/2012-2-1 006.jpg differ diff --git a/photos/2012-2-1 016.jpg b/photos/2012-2-1 016.jpg new file mode 100644 index 0000000..c045a97 Binary files /dev/null and b/photos/2012-2-1 016.jpg differ diff --git a/photos/2012-2-1 018.jpg b/photos/2012-2-1 018.jpg new file mode 100644 index 0000000..9eff43b Binary files /dev/null and b/photos/2012-2-1 018.jpg differ diff --git a/photos/2012-2-1 024.jpg b/photos/2012-2-1 024.jpg new file mode 100644 index 0000000..3e0ab9a Binary files /dev/null and b/photos/2012-2-1 024.jpg differ diff --git a/photos/2012-2-1 027.jpg b/photos/2012-2-1 027.jpg new file mode 100644 index 0000000..8bc1fb0 Binary files /dev/null and b/photos/2012-2-1 027.jpg differ diff --git a/photos/2012-2-1 030.jpg b/photos/2012-2-1 030.jpg new file mode 100644 index 0000000..1717da0 Binary files /dev/null and b/photos/2012-2-1 030.jpg differ diff --git a/photos/Aquaponic Pirate Fish.svg b/photos/Aquaponic Pirate Fish.svg new file mode 100644 index 0000000..ac0d916 --- /dev/null +++ b/photos/Aquaponic Pirate Fish.svg @@ -0,0 +1,2081 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/photos/CSA/2012-05-29 08.33.16 (1).jpg b/photos/CSA/2012-05-29 08.33.16 (1).jpg new file mode 100644 index 0000000..2522bcd Binary files /dev/null and b/photos/CSA/2012-05-29 08.33.16 (1).jpg differ diff --git a/photos/CSA/2012-05-29 08.33.52 (1).jpg b/photos/CSA/2012-05-29 08.33.52 (1).jpg new file mode 100644 index 0000000..485397e Binary files /dev/null and b/photos/CSA/2012-05-29 08.33.52 (1).jpg differ diff --git a/photos/CSA/IMG_2993.JPG b/photos/CSA/IMG_2993.JPG new file mode 100644 index 0000000..fa53eb4 Binary files /dev/null and b/photos/CSA/IMG_2993.JPG differ diff --git a/photos/Chicken Icon.png b/photos/Chicken Icon.png new file mode 100644 index 0000000..1bc5d0e Binary files /dev/null and b/photos/Chicken Icon.png differ diff --git a/photos/Chicken-Egg.png b/photos/Chicken-Egg.png new file mode 100644 index 0000000..2b4f8a9 Binary files /dev/null and b/photos/Chicken-Egg.png differ diff --git a/photos/Chicken.png b/photos/Chicken.png new file mode 100644 index 0000000..9ccb152 Binary files /dev/null and b/photos/Chicken.png differ diff --git a/photos/Chicken.svg b/photos/Chicken.svg new file mode 100644 index 0000000..b8ecbb0 --- /dev/null +++ b/photos/Chicken.svg @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/photos/Chickens & Eggs/IMG_3204.JPG b/photos/Chickens & Eggs/IMG_3204.JPG new file mode 100644 index 0000000..42e82b7 Binary files /dev/null and b/photos/Chickens & Eggs/IMG_3204.JPG differ diff --git a/photos/Chickens & Eggs/IMG_3205.JPG b/photos/Chickens & Eggs/IMG_3205.JPG new file mode 100644 index 0000000..eed8d13 Binary files /dev/null and b/photos/Chickens & Eggs/IMG_3205.JPG differ diff --git a/photos/Farm Photo 2012-12-03 15.47.03.jpg b/photos/Farm Photo 2012-12-03 15.47.03.jpg new file mode 100644 index 0000000..3ca2001 Binary files /dev/null and b/photos/Farm Photo 2012-12-03 15.47.03.jpg differ diff --git a/photos/Header-1.png b/photos/Header-1.png new file mode 100644 index 0000000..678b8e9 Binary files /dev/null and b/photos/Header-1.png differ diff --git a/photos/Header-1.svg b/photos/Header-1.svg new file mode 100644 index 0000000..ee0f17b --- /dev/null +++ b/photos/Header-1.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/photos/Holiday Advert.psd b/photos/Holiday Advert.psd new file mode 100644 index 0000000..f1c0255 Binary files /dev/null and b/photos/Holiday Advert.psd differ diff --git a/photos/Map.psd b/photos/Map.psd new file mode 100644 index 0000000..4e43d7d Binary files /dev/null and b/photos/Map.psd differ diff --git a/photos/Market/100_2715.JPG b/photos/Market/100_2715.JPG new file mode 100644 index 0000000..ebc37fb Binary files /dev/null and b/photos/Market/100_2715.JPG differ diff --git a/photos/Market/IMG_3067.JPG b/photos/Market/IMG_3067.JPG new file mode 100644 index 0000000..9a20f15 Binary files /dev/null and b/photos/Market/IMG_3067.JPG differ diff --git a/photos/Market/IMG_3068.JPG b/photos/Market/IMG_3068.JPG new file mode 100644 index 0000000..d0dbb51 Binary files /dev/null and b/photos/Market/IMG_3068.JPG differ diff --git a/photos/Misc Images.svg b/photos/Misc Images.svg new file mode 100644 index 0000000..18be134 --- /dev/null +++ b/photos/Misc Images.svg @@ -0,0 +1,396 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/photos/People/IMG_3288.JPG b/photos/People/IMG_3288.JPG new file mode 100644 index 0000000..dd94e1d Binary files /dev/null and b/photos/People/IMG_3288.JPG differ diff --git a/photos/People/nikki_steve_v1.jpg b/photos/People/nikki_steve_v1.jpg new file mode 100644 index 0000000..05ab313 Binary files /dev/null and b/photos/People/nikki_steve_v1.jpg differ diff --git a/photos/PetitTetonLogo_v1.png b/photos/PetitTetonLogo_v1.png new file mode 100644 index 0000000..f38dc0e Binary files /dev/null and b/photos/PetitTetonLogo_v1.png differ diff --git a/photos/PetitTetonLogo_v2.png b/photos/PetitTetonLogo_v2.png new file mode 100644 index 0000000..8df96bc Binary files /dev/null and b/photos/PetitTetonLogo_v2.png differ diff --git a/photos/Petitteton Image Instructions.txt b/photos/Petitteton Image Instructions.txt new file mode 100644 index 0000000..e9d9508 --- /dev/null +++ b/photos/Petitteton Image Instructions.txt @@ -0,0 +1,11 @@ +Instructions for cleaning up the Petit Teton image from a Raster: + +1) Extensions->Raster->Reduce Noise (10) +2) Path->Trace Bitmap (Grays + Remove Background + Smooth + Stack Scans) + + +Instructions for Converting the SVG back to a raster as 200x191 (after adding "from your neighbor to your table" in Scala Sans BD + Italic along the bottom) + +1) Export to bitmap with an 800 width. +2) Open in Adobe Photoshop CS4 +3) Export to web (gif) - remove the transparency checkbox - Scale to 25% - Use Bicubic filtering diff --git a/photos/Petitteton Logo Only.svg b/photos/Petitteton Logo Only.svg new file mode 100644 index 0000000..32781b9 --- /dev/null +++ b/photos/Petitteton Logo Only.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/photos/Petitteton.png b/photos/Petitteton.png new file mode 100644 index 0000000..99af4b8 Binary files /dev/null and b/photos/Petitteton.png differ diff --git a/photos/Petitteton.svg b/photos/Petitteton.svg new file mode 100644 index 0000000..6e0f9eb --- /dev/null +++ b/photos/Petitteton.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + from your neighbor to your table + + + + diff --git a/photos/Petitteton2.png b/photos/Petitteton2.png new file mode 100644 index 0000000..4fc4e9e Binary files /dev/null and b/photos/Petitteton2.png differ diff --git a/photos/Petitteton2.svg b/photos/Petitteton2.svg new file mode 100644 index 0000000..64542ee --- /dev/null +++ b/photos/Petitteton2.svg @@ -0,0 +1,395 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + from your neighbor to your table + + + + + + + + + + + + + + + from your neighbor to your table + + + + + + + + + + + + + + + + + + + + + we grow it, we can it + + + + + + diff --git a/photos/Petitteton3.png b/photos/Petitteton3.png new file mode 100644 index 0000000..f598cda Binary files /dev/null and b/photos/Petitteton3.png differ diff --git a/photos/Pigs/IMG_3312.JPG b/photos/Pigs/IMG_3312.JPG new file mode 100644 index 0000000..fa6cede Binary files /dev/null and b/photos/Pigs/IMG_3312.JPG differ diff --git a/photos/Pigs/IMG_3314.JPG b/photos/Pigs/IMG_3314.JPG new file mode 100644 index 0000000..22e1d03 Binary files /dev/null and b/photos/Pigs/IMG_3314.JPG differ diff --git a/photos/Pigs/img015.tif b/photos/Pigs/img015.tif new file mode 100644 index 0000000..661f326 Binary files /dev/null and b/photos/Pigs/img015.tif differ diff --git a/photos/Pigs/img017.tif b/photos/Pigs/img017.tif new file mode 100644 index 0000000..73284e3 Binary files /dev/null and b/photos/Pigs/img017.tif differ diff --git a/photos/Pigs/sleepy_pig.png b/photos/Pigs/sleepy_pig.png new file mode 100644 index 0000000..8b4cbf1 Binary files /dev/null and b/photos/Pigs/sleepy_pig.png differ diff --git a/photos/Sarah Pict.jpg b/photos/Sarah Pict.jpg new file mode 100644 index 0000000..c3c1bfb Binary files /dev/null and b/photos/Sarah Pict.jpg differ diff --git a/photos/Vaps/2012-04-06 07.39.21.jpg b/photos/Vaps/2012-04-06 07.39.21.jpg new file mode 100644 index 0000000..e5da3aa Binary files /dev/null and b/photos/Vaps/2012-04-06 07.39.21.jpg differ diff --git a/photos/Vaps/2012-04-06 07.40.41.jpg b/photos/Vaps/2012-04-06 07.40.41.jpg new file mode 100644 index 0000000..9033b00 Binary files /dev/null and b/photos/Vaps/2012-04-06 07.40.41.jpg differ diff --git a/photos/Vaps/2012-07-28 10.16.40.jpg b/photos/Vaps/2012-07-28 10.16.40.jpg new file mode 100644 index 0000000..0f93ee4 Binary files /dev/null and b/photos/Vaps/2012-07-28 10.16.40.jpg differ diff --git a/photos/Vaps/2012-08-07 09.05.37.jpg b/photos/Vaps/2012-08-07 09.05.37.jpg new file mode 100644 index 0000000..0a94d74 Binary files /dev/null and b/photos/Vaps/2012-08-07 09.05.37.jpg differ diff --git a/photos/Vaps/DSC_0160 (2).JPG b/photos/Vaps/DSC_0160 (2).JPG new file mode 100644 index 0000000..1ce89be Binary files /dev/null and b/photos/Vaps/DSC_0160 (2).JPG differ diff --git a/photos/Vaps/DSC_0169 (2).JPG b/photos/Vaps/DSC_0169 (2).JPG new file mode 100644 index 0000000..7fcbd7b Binary files /dev/null and b/photos/Vaps/DSC_0169 (2).JPG differ diff --git a/photos/Vaps/DSC_0174 (2).JPG b/photos/Vaps/DSC_0174 (2).JPG new file mode 100644 index 0000000..7a72ebf Binary files /dev/null and b/photos/Vaps/DSC_0174 (2).JPG differ diff --git a/photos/Vaps/DSC_0180.JPG b/photos/Vaps/DSC_0180.JPG new file mode 100644 index 0000000..68ee24d Binary files /dev/null and b/photos/Vaps/DSC_0180.JPG differ diff --git a/photos/Vaps/DSC_0182 (2).JPG b/photos/Vaps/DSC_0182 (2).JPG new file mode 100644 index 0000000..022d6e4 Binary files /dev/null and b/photos/Vaps/DSC_0182 (2).JPG differ diff --git a/photos/Vaps/DSC_0187 (2).JPG b/photos/Vaps/DSC_0187 (2).JPG new file mode 100644 index 0000000..d875219 Binary files /dev/null and b/photos/Vaps/DSC_0187 (2).JPG differ diff --git a/photos/Vaps/IMG_20141010_163427.jpg b/photos/Vaps/IMG_20141010_163427.jpg new file mode 100644 index 0000000..2a1840c Binary files /dev/null and b/photos/Vaps/IMG_20141010_163427.jpg differ diff --git a/photos/Vaps/IMG_2853 (1).JPG b/photos/Vaps/IMG_2853 (1).JPG new file mode 100644 index 0000000..6c072d3 Binary files /dev/null and b/photos/Vaps/IMG_2853 (1).JPG differ diff --git a/photos/Vaps/IMG_2854 (1).JPG b/photos/Vaps/IMG_2854 (1).JPG new file mode 100644 index 0000000..3161bf8 Binary files /dev/null and b/photos/Vaps/IMG_2854 (1).JPG differ diff --git a/photos/Veggies/2012-08-26 18.48.23.jpg b/photos/Veggies/2012-08-26 18.48.23.jpg new file mode 100644 index 0000000..3b59821 Binary files /dev/null and b/photos/Veggies/2012-08-26 18.48.23.jpg differ diff --git a/photos/Veggies/2012-08-28 08.35.03.jpg b/photos/Veggies/2012-08-28 08.35.03.jpg new file mode 100644 index 0000000..483ffd0 Binary files /dev/null and b/photos/Veggies/2012-08-28 08.35.03.jpg differ diff --git a/photos/Veggies/2012-11-08 21.45.34.jpg b/photos/Veggies/2012-11-08 21.45.34.jpg new file mode 100644 index 0000000..84508a1 Binary files /dev/null and b/photos/Veggies/2012-11-08 21.45.34.jpg differ diff --git a/photos/Veggies/2013-09-01 18.14.16.jpg b/photos/Veggies/2013-09-01 18.14.16.jpg new file mode 100644 index 0000000..e31a84d Binary files /dev/null and b/photos/Veggies/2013-09-01 18.14.16.jpg differ diff --git a/photos/Visiting/2011-1 008.jpg b/photos/Visiting/2011-1 008.jpg new file mode 100644 index 0000000..e49dfa0 Binary files /dev/null and b/photos/Visiting/2011-1 008.jpg differ diff --git a/photos/Visiting/DSC_0188.JPG b/photos/Visiting/DSC_0188.JPG new file mode 100644 index 0000000..9a3236a Binary files /dev/null and b/photos/Visiting/DSC_0188.JPG differ diff --git a/photos/Visiting/IMG_20141010_124139.jpg b/photos/Visiting/IMG_20141010_124139.jpg new file mode 100644 index 0000000..3f57f86 Binary files /dev/null and b/photos/Visiting/IMG_20141010_124139.jpg differ diff --git a/photos/Visiting/IMG_20141010_124354.jpg b/photos/Visiting/IMG_20141010_124354.jpg new file mode 100644 index 0000000..6f52aa8 Binary files /dev/null and b/photos/Visiting/IMG_20141010_124354.jpg differ diff --git a/photos/Visiting/IMG_20141010_124414.jpg b/photos/Visiting/IMG_20141010_124414.jpg new file mode 100644 index 0000000..c0477c4 Binary files /dev/null and b/photos/Visiting/IMG_20141010_124414.jpg differ diff --git a/photos/Visiting/IMG_3294.JPG b/photos/Visiting/IMG_3294.JPG new file mode 100644 index 0000000..bf256a1 Binary files /dev/null and b/photos/Visiting/IMG_3294.JPG differ diff --git a/photos/Visiting/IMG_3296.JPG b/photos/Visiting/IMG_3296.JPG new file mode 100644 index 0000000..f147639 Binary files /dev/null and b/photos/Visiting/IMG_3296.JPG differ diff --git a/photos/Visiting/IMG_3322.JPG b/photos/Visiting/IMG_3322.JPG new file mode 100644 index 0000000..a4b1006 Binary files /dev/null and b/photos/Visiting/IMG_3322.JPG differ diff --git a/photos/Yak Grazing.png b/photos/Yak Grazing.png new file mode 100644 index 0000000..3e3fe3c Binary files /dev/null and b/photos/Yak Grazing.png differ diff --git a/photos/Yak Grazing.psd b/photos/Yak Grazing.psd new file mode 100644 index 0000000..cdec6d2 Binary files /dev/null and b/photos/Yak Grazing.psd differ diff --git a/photos/Yak-Grazing_v2.psd b/photos/Yak-Grazing_v2.psd new file mode 100644 index 0000000..bb5601b Binary files /dev/null and b/photos/Yak-Grazing_v2.psd differ diff --git a/photos/Yaks/2009 March 012.jpg b/photos/Yaks/2009 March 012.jpg new file mode 100644 index 0000000..9fa32ae Binary files /dev/null and b/photos/Yaks/2009 March 012.jpg differ diff --git a/photos/Yaks/Yak and Baby.jpg b/photos/Yaks/Yak and Baby.jpg new file mode 100644 index 0000000..f511550 Binary files /dev/null and b/photos/Yaks/Yak and Baby.jpg differ diff --git a/photos/bullet.psd b/photos/bullet.psd new file mode 100644 index 0000000..8764b50 Binary files /dev/null and b/photos/bullet.psd differ diff --git a/photos/egg.png b/photos/egg.png new file mode 100644 index 0000000..3e4a9a9 Binary files /dev/null and b/photos/egg.png differ diff --git a/photos/google+.svg b/photos/google+.svg new file mode 100644 index 0000000..322d73a --- /dev/null +++ b/photos/google+.svg @@ -0,0 +1,9254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + g+ + + + + + + + + + + + + diff --git a/photos/grass_background.jpg b/photos/grass_background.jpg new file mode 100644 index 0000000..e954cc8 Binary files /dev/null and b/photos/grass_background.jpg differ diff --git a/photos/grass_background.psd b/photos/grass_background.psd new file mode 100644 index 0000000..a62082b Binary files /dev/null and b/photos/grass_background.psd differ diff --git a/photos/h1.png b/photos/h1.png new file mode 100644 index 0000000..f755a09 Binary files /dev/null and b/photos/h1.png differ diff --git a/photos/h3.png b/photos/h3.png new file mode 100644 index 0000000..0cbd934 Binary files /dev/null and b/photos/h3.png differ diff --git a/photos/h4.png b/photos/h4.png new file mode 100644 index 0000000..e4f5993 Binary files /dev/null and b/photos/h4.png differ diff --git a/photos/h5.png b/photos/h5.png new file mode 100644 index 0000000..3441c3e Binary files /dev/null and b/photos/h5.png differ diff --git a/photos/h6.png b/photos/h6.png new file mode 100644 index 0000000..af371ed Binary files /dev/null and b/photos/h6.png differ diff --git a/photos/h7.png b/photos/h7.png new file mode 100644 index 0000000..fed0761 Binary files /dev/null and b/photos/h7.png differ diff --git a/photos/h8.png b/photos/h8.png new file mode 100644 index 0000000..fdbedc0 Binary files /dev/null and b/photos/h8.png differ diff --git a/photos/menu-background.psd b/photos/menu-background.psd new file mode 100644 index 0000000..4fe7f0a Binary files /dev/null and b/photos/menu-background.psd differ diff --git a/photos/path3872.png b/photos/path3872.png new file mode 100644 index 0000000..0b44a2d Binary files /dev/null and b/photos/path3872.png differ diff --git a/photos/photos/.svn/entries b/photos/photos/.svn/entries new file mode 100644 index 0000000..6c44ce1 --- /dev/null +++ b/photos/photos/.svn/entries @@ -0,0 +1,140 @@ +10 + +dir +0 +svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/photos +svn://gooeyfish +add + + + + + + + +svn:special svn:externals svn:needs-lock + + + + + + + + + + + +5bae2391-cca6-ca44-bb23-a66e832fb2eb + +Chickens.jpg +file + + + +add + + + + + +has-props +has-prop-mods + +Farmers-Market.jpg +file + + + +add + + + + + +has-props +has-prop-mods + +Flowers.jpg +file + + + +add + + + + + +has-props +has-prop-mods + +Landscape.jpg +file + + + +add + + + + + +has-props +has-prop-mods + +Lettuce.jpg +file + + + +add + + + + + +has-props +has-prop-mods + +Outhouse.jpg +file + + + +add + + + + + +has-props +has-prop-mods + +Tractor.jpg +file + + + +add + + + + + +has-props +has-prop-mods + +Yak Grazing.jpg +file + +svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/photos/Yak%20Grazing.jpg + +add + + + + + +has-props +has-prop-mods + diff --git a/photos/photos/.svn/props/Chickens.jpg.svn-work b/photos/photos/.svn/props/Chickens.jpg.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/photos/.svn/props/Chickens.jpg.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/photos/.svn/props/Farmers-Market.jpg.svn-work b/photos/photos/.svn/props/Farmers-Market.jpg.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/photos/.svn/props/Farmers-Market.jpg.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/photos/.svn/props/Flowers.jpg.svn-work b/photos/photos/.svn/props/Flowers.jpg.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/photos/.svn/props/Flowers.jpg.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/photos/.svn/props/Landscape.jpg.svn-work b/photos/photos/.svn/props/Landscape.jpg.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/photos/.svn/props/Landscape.jpg.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/photos/.svn/props/Lettuce.jpg.svn-work b/photos/photos/.svn/props/Lettuce.jpg.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/photos/.svn/props/Lettuce.jpg.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/photos/.svn/props/Outhouse.jpg.svn-work b/photos/photos/.svn/props/Outhouse.jpg.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/photos/.svn/props/Outhouse.jpg.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/photos/.svn/props/Tractor.jpg.svn-work b/photos/photos/.svn/props/Tractor.jpg.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/photos/.svn/props/Tractor.jpg.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/photos/.svn/props/Yak Grazing.jpg.svn-work b/photos/photos/.svn/props/Yak Grazing.jpg.svn-work new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/photos/photos/.svn/props/Yak Grazing.jpg.svn-work @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/photos/photos/Chickens.jpg b/photos/photos/Chickens.jpg new file mode 100644 index 0000000..ffedddd Binary files /dev/null and b/photos/photos/Chickens.jpg differ diff --git a/photos/photos/Farmers-Market.jpg b/photos/photos/Farmers-Market.jpg new file mode 100644 index 0000000..efafcf3 Binary files /dev/null and b/photos/photos/Farmers-Market.jpg differ diff --git a/photos/photos/Flowers.jpg b/photos/photos/Flowers.jpg new file mode 100644 index 0000000..651c910 Binary files /dev/null and b/photos/photos/Flowers.jpg differ diff --git a/photos/photos/Landscape.jpg b/photos/photos/Landscape.jpg new file mode 100644 index 0000000..e9fc6dc Binary files /dev/null and b/photos/photos/Landscape.jpg differ diff --git a/photos/photos/Lettuce.jpg b/photos/photos/Lettuce.jpg new file mode 100644 index 0000000..91c7aee Binary files /dev/null and b/photos/photos/Lettuce.jpg differ diff --git a/photos/photos/Outhouse.jpg b/photos/photos/Outhouse.jpg new file mode 100644 index 0000000..29f8e32 Binary files /dev/null and b/photos/photos/Outhouse.jpg differ diff --git a/photos/photos/Tractor.jpg b/photos/photos/Tractor.jpg new file mode 100644 index 0000000..1f203a9 Binary files /dev/null and b/photos/photos/Tractor.jpg differ diff --git a/photos/photos/Yak Grazing.jpg b/photos/photos/Yak Grazing.jpg new file mode 100644 index 0000000..62c80e6 Binary files /dev/null and b/photos/photos/Yak Grazing.jpg differ diff --git a/photos/twitter-chick-follow-me.psd b/photos/twitter-chick-follow-me.psd new file mode 100644 index 0000000..cffad48 Binary files /dev/null and b/photos/twitter-chick-follow-me.psd differ diff --git a/photos/vector-icons-by-shoshi-dot-me.svg b/photos/vector-icons-by-shoshi-dot-me.svg new file mode 100644 index 0000000..d4af7a8 --- /dev/null +++ b/photos/vector-icons-by-shoshi-dot-me.svg @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/On Farm Retail Price List.pdf b/public/On Farm Retail Price List.pdf new file mode 100644 index 0000000..9a64d75 Binary files /dev/null and b/public/On Farm Retail Price List.pdf differ diff --git a/public/animals.html b/public/animals.html new file mode 100644 index 0000000..ec9264d --- /dev/null +++ b/public/animals.html @@ -0,0 +1,37 @@ + + +$('.shadow').buildShadow(); + \ No newline at end of file diff --git a/public/animals.styl b/public/animals.styl new file mode 100644 index 0000000..ce66353 --- /dev/null +++ b/public/animals.styl @@ -0,0 +1,2 @@ +#animals { +} \ No newline at end of file diff --git a/public/ap/airlift.html b/public/ap/airlift.html new file mode 100644 index 0000000..770b8b7 --- /dev/null +++ b/public/ap/airlift.html @@ -0,0 +1,32 @@ +
+
+
+

Air Lifts

A great way to add oxygen to water, and they can even be used to lift water like a pump. +

Air, being lighter than water, will rapidly rise when injected at the bottom of a tank. Air lifts capitalize on this by placing the air in a narrow vertical tube in a tank of water, allowing the rising air to push the water up the sides of the pipe and out the top. Air lifts are often used for aerating fish tank and grow tank water because they are very efficient. Just like bubblers and fountains, air lifts rely on breaking the surface tension of the water to add oxygen. Unlike a fountain, they don't spray water very far, or in ways that will add a lot of water to the air resulting in humidity and water loss in your system. Unlike bubblers they don't take a lot of pressure to produce a good amount of oxygenated water. They also don't produce a lot of back pressure on the air pump, meaning that the pump will be more efficient and the diaphrams will last longer. As a bonus, air lifts are designed to have no problem moving solids and have no moving parts, so they rarely if ever clog, and never wear out, unlike impeller pumps and air stones. Based on some experimentation, I have found that increasing the surface of the pipe relative to the area inside the pipe does appear to produce a slightly better result, but likely isn't worth the effort of flattening pipe.

+ +

Using an air lift in place of a water pump will oxygenate your water and move it at the same time. Getting the water very far above the water line does require a lot of effort since you have to essentially create a gyser effect where the air builds up and then releases all at once. Air lifts appear to be limited to about 3x the water depth in pumping height. You can double the water height relatively easily and still move a fair amount of water. Make sure you add a muffler where the water and air exit since it can be quite noisy. A narrowed pipe with holes drilled randomly along the bottom and placed horizontally so the water and air come out the holes seems to work pretty well. I simply heated the end of the pipe and crimped it to serve as an end cap.

+
+
+

Photos & Instructions - Building A Simple Air Lift

+ + +

This image shows an 8' HDPE (High Density Polyethylene) tank with a 2' depth that is being aerated by a Matala HK40LP pump (the air pump is actually aerating 2 of these tanks) using two quad packs of air lifts. This appears to work quite a lot better than four large (2" length 1" diameter) air stones. The plants were not growing until I added the air lifts and removed the stones. I had a similar experience in a previous floating bed, so I wanted to duplicate the experiment.

+ +

A close up of the lift pipes and the fork I am using to keep it upright. The fork is just a bit of pine cut with a table saw and a band saw to have a slot. The lift is made of 1/2" electrical pvc and four 90 degree pieces.

+ +

This shows the bottom of the lift pipes. You can see that I cut the bottoms on roughly a 45 degree angle, and I drilled a hole large enough for 1/4" drip line just above the cut. I suggest using the better drip line sold in large rolls by your neighborhood hardware store since you will use quite a lot of it, and you'd prefer it be flexible. The band you see holding the pipes together is a 1/4" wide piece of 2" electrical pvc pipe. I used a heat gun (harbor frieght has a nice one that is also easy to repair) to heat it until flexible (keep moving the gun to keep from burning the pvc), then I placed it over the pipe and used a wet towel to cool it down.

+ +

Here is the whole air lift assembly, including the upper band. The upper band is made from a 3" electrical pipe piece added in the same way as the bottom 2" band.

+ +

These two air lifts will be installed in a 5' deep weld wire tank to replace some large EPDM bubblers. A couple more of these and the 6000 gallon tank may be better aerated with just one Matala HK40LP instead of the three I am using now.

+ +
+
+
+

Photos & Instructions - Building A Pumping Air Lift

+

I will need some more photos to finish this part of the page. Check back soon please.

+
+
+ + $('.shadow').buildShadow(); + \ No newline at end of file diff --git a/public/ap/airlift.styl b/public/ap/airlift.styl new file mode 100644 index 0000000..d33f1b4 --- /dev/null +++ b/public/ap/airlift.styl @@ -0,0 +1,30 @@ +#airlift { + @media(max-width: 499px) { + .instructions { + width: 250px; + } + } + @media(min-width: 500px) and (max-width: 749px) { + .instructions { + width: 500px; + } + } + @media(min-width: 750px) { + .instructions { + width: 750px; + } + } + + h2 { + display: block; + text-align: center; + } + + .instructions { + margin: 0 auto; + clear:both; + background-color: #BCB; + padding: 10px; + border: 1px #232 solid; + } +} \ No newline at end of file diff --git a/public/ap/images/Airlift1_v1.jpg b/public/ap/images/Airlift1_v1.jpg new file mode 100644 index 0000000..e904ece Binary files /dev/null and b/public/ap/images/Airlift1_v1.jpg differ diff --git a/public/ap/images/Airlift2_v1.jpg b/public/ap/images/Airlift2_v1.jpg new file mode 100644 index 0000000..00f822e Binary files /dev/null and b/public/ap/images/Airlift2_v1.jpg differ diff --git a/public/ap/images/Airlift3_v1.jpg b/public/ap/images/Airlift3_v1.jpg new file mode 100644 index 0000000..5e56bbd Binary files /dev/null and b/public/ap/images/Airlift3_v1.jpg differ diff --git a/public/ap/images/Airlift4_v1.jpg b/public/ap/images/Airlift4_v1.jpg new file mode 100644 index 0000000..f7f92f9 Binary files /dev/null and b/public/ap/images/Airlift4_v1.jpg differ diff --git a/public/ap/images/Airlift5_v1.jpg b/public/ap/images/Airlift5_v1.jpg new file mode 100644 index 0000000..7700a60 Binary files /dev/null and b/public/ap/images/Airlift5_v1.jpg differ diff --git a/public/aquaponics.html b/public/aquaponics.html new file mode 100644 index 0000000..d360c8e --- /dev/null +++ b/public/aquaponics.html @@ -0,0 +1,18 @@ +
+
+

Aquaponics

+

In 2013, most farms in California, including ours, were affected by drought. Farming and kitchen operations require a lot of water. Our water comes exclusively from wells: we have no rivers, lakes, or reservoirs to tap into. We decided in 2013 to experiment with aquaponics as a method of increasing our water security and reducing our water usage. This benefits wildlife by leaving more water in our streams and ponds.

+

Aquaponics is a system of growing crops and fish in tandem. The water is recycled continuously and the fish fertilize the plants. It uses naturally occurring beneficial bacteria to keep the water clean and convert waste from the fish into nutrients for the plants. The plants, in turn, remove the excess nutrients that would otherwise harm the fish.

+

Aquaponics is not a new idea - it is mimicking nature. Modern advances in technology combined with increased water needs have made it economically feasible now.

+

Our test system, started in 2013, was successful and gave us valuable data which we used to build our first commercial system, operational in mid 2014. We are already transitioning our most water intensive growing into the aquaponics system, allowing the farm to continue to scale naturally with customer demand.

+ +
+ +

+ Wynne gives classes in aquaponics for kids ages 9 and up, and adults of all varieties. We also offer tours and consulting to help you avoid many of the expensive mistakes as you design your own aquaponic system. Tours are $30 for up to 3 people and $10 per person to a maximum of 6 people. To arrange for classes, tours, or consulting, please call the farm 707.684.4146 or email. If you need to contact Wynne directly (for technical questions) you may email wynne@petitteton.com or try calling 707.684.4148 if it is urgent. +

+
+
+ + $('.shadow').buildShadow(); + \ No newline at end of file diff --git a/public/aquaponics.styl b/public/aquaponics.styl new file mode 100644 index 0000000..e69de29 diff --git a/public/beef.html b/public/beef.html new file mode 100644 index 0000000..d804994 --- /dev/null +++ b/public/beef.html @@ -0,0 +1,9 @@ +
+

Cows & Beef

+

+

We allow our neighbor to finish his grass fed, hormone and antibiotic free Angus cattle on our property and purchase a couple for sale to our markets each year.

+

To find out what cuts we have available, please call 707.684.4146 or email. We would also be happy to take orders for a part of a cow, and welcome your visit to see the animals.

+
+ +$('.shadow').buildShadow(); + \ No newline at end of file diff --git a/public/beef.styl b/public/beef.styl new file mode 100644 index 0000000..58f0c1c --- /dev/null +++ b/public/beef.styl @@ -0,0 +1,2 @@ +#beef { +} \ No newline at end of file diff --git a/public/chicken.html b/public/chicken.html new file mode 100644 index 0000000..3578ee0 --- /dev/null +++ b/public/chicken.html @@ -0,0 +1,9 @@ +
+

Chickens & Chicken

+ +

We have over 100 laying hens spread across several areas of the farm. They are raised on organic feed and each group has a rooster to keep the hens happy. Each year we purchase 60 chicks over a period of several months to renew our stock. The older hens are sold or slaughtered for stewing meat. The meat is much more flavorful that what you'll purchase from a store but is not suitable for anything but soup or chicken salad or enchiladas.

+

To find out whether we have any available, please call 707.684.4146 or email. Come visit them.

+
+ +$('.shadow').buildShadow(); + \ No newline at end of file diff --git a/public/chicken.styl b/public/chicken.styl new file mode 100644 index 0000000..fa9909c --- /dev/null +++ b/public/chicken.styl @@ -0,0 +1,2 @@ +#chicken { +} \ No newline at end of file diff --git a/public/community.html b/public/community.html new file mode 100644 index 0000000..22207e8 --- /dev/null +++ b/public/community.html @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/public/community.styl b/public/community.styl new file mode 100644 index 0000000..e69de29 diff --git a/public/contact.html b/public/contact.html new file mode 100644 index 0000000..74962bc --- /dev/null +++ b/public/contact.html @@ -0,0 +1,15 @@ +

Contact Us

+

+Petit Teton +
+18601 Highway 128 +
+Yorkville, CA 95494 +
+707.684.4146 +
+Email Us +
+
+Google Map +

\ No newline at end of file diff --git a/public/eggs.html b/public/eggs.html new file mode 100644 index 0000000..34c3faa --- /dev/null +++ b/public/eggs.html @@ -0,0 +1,21 @@ +
+

Chickens & EGGS

+

+ The eggs in our cartons look as though they've come from an Easter basket - many shades of brown and green, and different sizes! + It's the result of our wide variety of hens, including Rhode Island Red & White, Plymouth Rock, Sexlink, Buff Orpington, Araucana, Barred Rock, Cochin, Maran, and Australorp. + And our chickens are truly “free range”. + Many grocery store eggs are billed as free range, but, in actuality, the hens are crammed into huge warehouses with a small door at one end leading to a concrete “outdoors”. + Not our birds! + They scrabble around in the fields all day every day. + We do supplement what the natural environment provides, with locally produced organic crumbles. +

+

+ The resulting eggs are of amazing quality. + The yolks are a brilliant orange, not the milky yellow found in many grocery store eggs, and the whites stand up on their own. + You can visit the farm to buy fresh eggs, or stop by one of our farmers' markets in San Francisco or Mendocino County. +

+
+
+ +$('.shadow').buildShadow(); + \ No newline at end of file diff --git a/public/eggs.styl b/public/eggs.styl new file mode 100644 index 0000000..e69de29 diff --git a/public/farm-made-fare.html b/public/farm-made-fare.html new file mode 100644 index 0000000..16d64be --- /dev/null +++ b/public/farm-made-fare.html @@ -0,0 +1,121 @@ +
+

FARM-MADE FARE

+

Our farm-made fare is created in our commercial kitchen from produce we grow on our farm. We purchase only what we haven't yet figured out how to grow (sugar, flour, salt, etc.). Our labels note which ingredients come from our farm. We save seeds and dry herbs, peppers, tomatoes, tomatillos and fruit for spicing and flavoring.

+

Production changes frequently based on the seasonal harvest, and every run is unique and small scale which means the availability changes regularly. Here are some of the hundreds of treats we have turned out over the years:

+ +
+ +
+

Soups:

+
    +
  • Fava Bean
  • +
  • Spring Onion Soup
  • +
  • Tomato Basil
  • +
+
+ +
+

Pickles and Relishes:

+
    +
  • Dilly Beans
  • +
  • Pickles
  • +
  • Pickled Beets
  • +
  • Spicy Pepper Relish Award
    Winning
  • +
+
+ +
+

Other:

+
    +
  • Bloody Mary Mix
  • +
  • Kimchi/Sauerkrauts
  • +
  • Syrups
  • +
+
+ +
+

Fruit Spreads:

+
    +
  • Pear Jams
  • +
  • Fig Jam
  • +
  • Quince Jam
  • +
  • Strawberry Jams
  • +
  • Blackberry Jams
  • +
  • Plum Jams
  • +
+
+ +
+

Sides:

+
    +
  • Applesauce
  • +
  • Ginger Peaches
  • +
  • Sweet Peppers
  • +
  • Sweet & Sour Red Cabbage
  • +
+
+ +
+

Chutneys:

+
    +
  • Apple Raisin Chutney
  • +
  • Bosc Pear Chutney
  • +
  • Quince Chutney
  • +
  • Tomatillo Chutney
  • +
+
+ +
+

Condiments:

+
    +
  • Heirloom Catsup
  • +
  • Hot Salsa
  • +
  • Salsa Verde
  • +
  • Spicy Adobo Sauce
  • +
+
+
+ + + +
+
+
+

+ To find out what we have available now, please call 707.684.4146 or email. +

+
+ +/* +if(window.matchMedia('@media (max-width: 549px)').matches) { + $('#vapPictures').width(190); + $('#vapPictures div').width(180).height(101); + $('#vapPicturesContainer img').width(180).height('101'); +} +*/ +//Note: Needed to encapsulate the slideshow (cycle) in its own div because the float right images were screwed up by the cycle plugin changing the containing div properties. +$('.miniSlideshowRight div,.miniSlideshowLeft div').cycle({fx: 'fade'}); +$('.miniSlideshowRight div,.miniSlideshowLeft div').unloaded = function() { + $('.miniSlideshowRight,.miniSlideshowLeft').cycle('destroy'); +} +$('.shadow').buildShadow(); + diff --git a/public/farm-made-fare.styl b/public/farm-made-fare.styl new file mode 100644 index 0000000..cd48966 --- /dev/null +++ b/public/farm-made-fare.styl @@ -0,0 +1,56 @@ + +/* farm-made-fare.html */ +@media(max-width: 509px) { + #farm-made-fare .columned { + width: 250px; + } +} +@media(min-width: 510px) and (max-width: 769px) { + #farm-made-fare .columned { + width: 510px; + } +} +@media(min-width: 770px) { /* and (max-width: 1029px)*/ + #farm-made-fare .columned { + width: 770px; + } +} +/* +@media(min-width: 1030px) { + #farm-made-fare .columned { + width: 1030px; + } +} +*/ +#farm-made-fare .columned { + -webkit-columns: 250px auto; + -moz-columns: 250px auto; + columns: 250px auto; + -webkit-column-gap: 10px; + -moz-column-gap: 10px; + column-gap: 10px; +} +#farm-made-fare .columned div { + display: inline-block; + min-width: 250px; +} +@media(max-width: 549px) { + #farm-made-fare #vapPicturesContainer img { + width: 170px; + height: 96px; + } + #farm-made-fare .vapPictures { + width: 180px; + height: 106px; + } +} +@media(min-width: 550px) { + #farm-made-fare #vapPicturesContainer img { + width: 580px; + height: 326px; + } + #farm-made-fare .vapPictures { + width: 590px; + height: 336px; + } +} \ No newline at end of file diff --git a/public/farm.html b/public/farm.html new file mode 100644 index 0000000..678999e --- /dev/null +++ b/public/farm.html @@ -0,0 +1,43 @@ + + + +$('.shadow').buildShadow(); + \ No newline at end of file diff --git a/public/farm.styl b/public/farm.styl new file mode 100644 index 0000000..edfbd79 --- /dev/null +++ b/public/farm.styl @@ -0,0 +1,2 @@ +#farm { +} \ No newline at end of file diff --git a/public/fonts/Grand_Hotel/GrandHotel-Regular.ttf b/public/fonts/Grand_Hotel/GrandHotel-Regular.ttf new file mode 100644 index 0000000..c330c92 Binary files /dev/null and b/public/fonts/Grand_Hotel/GrandHotel-Regular.ttf differ diff --git a/public/fonts/Grand_Hotel/OFL.txt b/public/fonts/Grand_Hotel/OFL.txt new file mode 100644 index 0000000..6cf9669 --- /dev/null +++ b/public/fonts/Grand_Hotel/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2012 by Brian J. Bonislawsky and Jim Lyles DBA Astigmatic +(AOETI) (astigma@astigmatic.com), with Reserved Font Name "Grand Hotel" +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/food.html b/public/food.html new file mode 100644 index 0000000..540f797 --- /dev/null +++ b/public/food.html @@ -0,0 +1,40 @@ + + +$('.shadow').buildShadow(); + \ No newline at end of file diff --git a/public/food.styl b/public/food.styl new file mode 100644 index 0000000..3d576c1 --- /dev/null +++ b/public/food.styl @@ -0,0 +1,2 @@ +#food { +} \ No newline at end of file diff --git a/public/grow-and-can.html b/public/grow-and-can.html new file mode 100644 index 0000000..f08a82d --- /dev/null +++ b/public/grow-and-can.html @@ -0,0 +1,8 @@ +
+

“We grow it. We can it.” Why this is our motto. What makes it important - to us & to you. How it came about. +

In the beginning of our farming life it quickly became clear that we produced far more than we consumed so we started selling fresh fruit, produce and eggs at farmers’ markets. There it quickly became apparent that we couldn’t sell everything we grew nor could we sustain a business on what we did sell. We next built a commercial kitchen on the farm to be able to preserve and add value to what we couldn’t eat or sell or feed to our animals or the compost. Our mantra has always been “NO WASTE”. +

The fact that we grow everything we preserve sets us apart from most value added product producers and defines our business since most canners purchase their ingredients. It also gives us control of the quality of our canned goods. Although the farm is not certified organic we use only organic practices and as few outside “inputs” as possible which are organic also, eg: incidental flavorings such as spices we cannot grow and necessary preservatives like sugar, vinegar and lemon juice (required to ensure acidity). A new California law requires that farmers’ markets be divided into two sections...agricultural products and crafts…so the other advantage to growing what we preserve is that we remain in the agricultural section. The canners who do not grow the produce they put in their jars are in the craft section. +

The art of canning has been honed in families for generations as a way to preserve the summer harvest for winter consumption. This is where we’ve kept it. Our family harvests, selects, hand cuts and cans the produce contained in our jars. There is no machinery or assembly line. All the work is done as you would do it in your kitchen…by hand. And all the food is preserved as it comes in from the fields. Each run of each item is only as large as the amount of the fruit or vegetable harvested that season from our six acres of fields and our aquaponic system. +

The art of farming, which has been practiced since time immemorial, demands diversity, resilience, self-reliance and creativity. Each year is different and each crop responds differently each year. One must be ready for some to fail and some to succeed and be flexible enough to take advantage of the successes and ride out the failures. This is where the “art” of what we are doing comes into play…if you have 50lbs of mint, what to do? Make mint jelly and pesto. Once the seeds are removed from the blackberries used for jam, soak them and make wine. We use what is available as creatively as we can. And what can’t be preserved is used by the plants and animals and compost. Nothing is wasted. +

The goal is to create an ever widening circle or spiral of connections and you, the consumer, are part of that circle. We welcome visitors to the farm and are happy to talk and answer questions. You have the freedom to wander and question to certify for yourselves that we are who we say we are, and that the food is what we say it is. +

diff --git a/public/grow-and-can.styl b/public/grow-and-can.styl new file mode 100644 index 0000000..35eae14 --- /dev/null +++ b/public/grow-and-can.styl @@ -0,0 +1,2 @@ +#grow-and-can { +} \ No newline at end of file diff --git a/public/holidays.html b/public/holidays.html new file mode 100644 index 0000000..37fbfd4 --- /dev/null +++ b/public/holidays.html @@ -0,0 +1,14 @@ +
+ + + +

+ Visit the main web site for more details. Call us at 707.684.4146, email us at farmer@petitteton.com, or stop by for a visit. +

+ +
+ +$('.shadow').buildShadow(); + \ No newline at end of file diff --git a/public/holidays.styl b/public/holidays.styl new file mode 100644 index 0000000..520fcfb --- /dev/null +++ b/public/holidays.styl @@ -0,0 +1,29 @@ + +/* Holidays.html */ +#holidays { + margin: 40px auto 0 auto; +} +#holidays #text { + text-align: center; +} +#holidays p { + font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; + font-size: .875em; + color: black; +} + +@media(min-width: 860px) { + #holidays { + width: 860px; + } + .holidayImage { + height: 444px; + width: 860px; + } +} +@media(max-width: 859px) { + .holidayImage { + width: 100%; + height: 100%; + } +} \ No newline at end of file diff --git a/public/images/AnimalsChickens_v1.jpg b/public/images/AnimalsChickens_v1.jpg new file mode 100644 index 0000000..add455f Binary files /dev/null and b/public/images/AnimalsChickens_v1.jpg differ diff --git a/public/images/AnimalsCows_v1.jpg b/public/images/AnimalsCows_v1.jpg new file mode 100644 index 0000000..d567b47 Binary files /dev/null and b/public/images/AnimalsCows_v1.jpg differ diff --git a/public/images/AnimalsYaks_v1.jpg b/public/images/AnimalsYaks_v1.jpg new file mode 100644 index 0000000..29cb075 Binary files /dev/null and b/public/images/AnimalsYaks_v1.jpg differ diff --git a/public/images/Animals_Fish_v1.jpg b/public/images/Animals_Fish_v1.jpg new file mode 100644 index 0000000..7d04272 Binary files /dev/null and b/public/images/Animals_Fish_v1.jpg differ diff --git a/public/images/Aquaponic1_v1.jpg b/public/images/Aquaponic1_v1.jpg new file mode 100644 index 0000000..badeb29 Binary files /dev/null and b/public/images/Aquaponic1_v1.jpg differ diff --git a/public/images/Bullet3_v1.jpg b/public/images/Bullet3_v1.jpg new file mode 100644 index 0000000..19626c4 Binary files /dev/null and b/public/images/Bullet3_v1.jpg differ diff --git a/public/images/CSA1_v2.jpg b/public/images/CSA1_v2.jpg new file mode 100644 index 0000000..6d81296 Binary files /dev/null and b/public/images/CSA1_v2.jpg differ diff --git a/public/images/Chicken.png b/public/images/Chicken.png new file mode 100644 index 0000000..9ccb152 Binary files /dev/null and b/public/images/Chicken.png differ diff --git a/public/images/Chicken_v1.jpg b/public/images/Chicken_v1.jpg new file mode 100644 index 0000000..624b5ff Binary files /dev/null and b/public/images/Chicken_v1.jpg differ diff --git a/public/images/Chickens_v1.jpg b/public/images/Chickens_v1.jpg new file mode 100644 index 0000000..587917d Binary files /dev/null and b/public/images/Chickens_v1.jpg differ diff --git a/public/images/Driveway1_v2.jpg b/public/images/Driveway1_v2.jpg new file mode 100644 index 0000000..fb1b08a Binary files /dev/null and b/public/images/Driveway1_v2.jpg differ diff --git a/public/images/Driveway2_v2.jpg b/public/images/Driveway2_v2.jpg new file mode 100644 index 0000000..86f61f5 Binary files /dev/null and b/public/images/Driveway2_v2.jpg differ diff --git a/public/images/Driveway3_v2.jpg b/public/images/Driveway3_v2.jpg new file mode 100644 index 0000000..2ecf8b9 Binary files /dev/null and b/public/images/Driveway3_v2.jpg differ diff --git a/public/images/Driveway4_v2.jpg b/public/images/Driveway4_v2.jpg new file mode 100644 index 0000000..e2a6a4c Binary files /dev/null and b/public/images/Driveway4_v2.jpg differ diff --git a/public/images/Driveway5_v2.jpg b/public/images/Driveway5_v2.jpg new file mode 100644 index 0000000..2a76044 Binary files /dev/null and b/public/images/Driveway5_v2.jpg differ diff --git a/public/images/Eggs1_v1.jpg b/public/images/Eggs1_v1.jpg new file mode 100644 index 0000000..7fd96fb Binary files /dev/null and b/public/images/Eggs1_v1.jpg differ diff --git a/public/images/Facebook_v2.png b/public/images/Facebook_v2.png new file mode 100644 index 0000000..cd45de9 Binary files /dev/null and b/public/images/Facebook_v2.png differ diff --git a/public/images/Farm_AboutUs_v1.jpg b/public/images/Farm_AboutUs_v1.jpg new file mode 100644 index 0000000..8c3647e Binary files /dev/null and b/public/images/Farm_AboutUs_v1.jpg differ diff --git a/public/images/Farm_Aquaponics_v1.jpg b/public/images/Farm_Aquaponics_v1.jpg new file mode 100644 index 0000000..64cdea9 Binary files /dev/null and b/public/images/Farm_Aquaponics_v1.jpg differ diff --git a/public/images/Farm_Land_v1.jpg b/public/images/Farm_Land_v1.jpg new file mode 100644 index 0000000..65cfd83 Binary files /dev/null and b/public/images/Farm_Land_v1.jpg differ diff --git a/public/images/Farm_Markets_v1.jpg b/public/images/Farm_Markets_v1.jpg new file mode 100644 index 0000000..7598fb2 Binary files /dev/null and b/public/images/Farm_Markets_v1.jpg differ diff --git a/public/images/FoodBeef_v1.jpg b/public/images/FoodBeef_v1.jpg new file mode 100644 index 0000000..d567b47 Binary files /dev/null and b/public/images/FoodBeef_v1.jpg differ diff --git a/public/images/FoodChicken_v1.jpg b/public/images/FoodChicken_v1.jpg new file mode 100644 index 0000000..4035a37 Binary files /dev/null and b/public/images/FoodChicken_v1.jpg differ diff --git a/public/images/FoodEggs_v1.jpg b/public/images/FoodEggs_v1.jpg new file mode 100644 index 0000000..1cb7fb1 Binary files /dev/null and b/public/images/FoodEggs_v1.jpg differ diff --git a/public/images/FoodFMF_v1.jpg b/public/images/FoodFMF_v1.jpg new file mode 100644 index 0000000..e899b6c Binary files /dev/null and b/public/images/FoodFMF_v1.jpg differ diff --git a/public/images/FoodPork_v1.jpg b/public/images/FoodPork_v1.jpg new file mode 100644 index 0000000..1e100d7 Binary files /dev/null and b/public/images/FoodPork_v1.jpg differ diff --git a/public/images/FoodVeggies_v1.jpg b/public/images/FoodVeggies_v1.jpg new file mode 100644 index 0000000..0f92163 Binary files /dev/null and b/public/images/FoodVeggies_v1.jpg differ diff --git a/public/images/GooglePlus_v2.png b/public/images/GooglePlus_v2.png new file mode 100644 index 0000000..297ffa7 Binary files /dev/null and b/public/images/GooglePlus_v2.png differ diff --git a/public/images/Grass-Fields.gif b/public/images/Grass-Fields.gif new file mode 100644 index 0000000..ce9ef17 Binary files /dev/null and b/public/images/Grass-Fields.gif differ diff --git a/public/images/Header_v1.jpg b/public/images/Header_v1.jpg new file mode 100644 index 0000000..0fd5499 Binary files /dev/null and b/public/images/Header_v1.jpg differ diff --git a/public/images/HolidayAdvert_v1.jpg b/public/images/HolidayAdvert_v1.jpg new file mode 100644 index 0000000..5ec506f Binary files /dev/null and b/public/images/HolidayAdvert_v1.jpg differ diff --git a/public/images/Land.gif b/public/images/Land.gif new file mode 100644 index 0000000..4f7c273 Binary files /dev/null and b/public/images/Land.gif differ diff --git a/public/images/Market1_v2.jpg b/public/images/Market1_v2.jpg new file mode 100644 index 0000000..e59d83c Binary files /dev/null and b/public/images/Market1_v2.jpg differ diff --git a/public/images/Market2_v2.jpg b/public/images/Market2_v2.jpg new file mode 100644 index 0000000..b4d4b05 Binary files /dev/null and b/public/images/Market2_v2.jpg differ diff --git a/public/images/Market3_v2.jpg b/public/images/Market3_v2.jpg new file mode 100644 index 0000000..3a5709c Binary files /dev/null and b/public/images/Market3_v2.jpg differ diff --git a/public/images/MenuBackground_v1.png b/public/images/MenuBackground_v1.png new file mode 100644 index 0000000..83e4f83 Binary files /dev/null and b/public/images/MenuBackground_v1.png differ diff --git a/public/images/PetitTetonLogo_v1.png b/public/images/PetitTetonLogo_v1.png new file mode 100644 index 0000000..6dd0346 Binary files /dev/null and b/public/images/PetitTetonLogo_v1.png differ diff --git a/public/images/PetitTetonLogo_v2.png b/public/images/PetitTetonLogo_v2.png new file mode 100644 index 0000000..8df96bc Binary files /dev/null and b/public/images/PetitTetonLogo_v2.png differ diff --git a/public/images/Planter-Construction.gif b/public/images/Planter-Construction.gif new file mode 100644 index 0000000..f25ea63 Binary files /dev/null and b/public/images/Planter-Construction.gif differ diff --git a/public/images/Services_Aquaponics_v1.jpg b/public/images/Services_Aquaponics_v1.jpg new file mode 100644 index 0000000..c6d0f89 Binary files /dev/null and b/public/images/Services_Aquaponics_v1.jpg differ diff --git a/public/images/Services_Tours_v1.jpg b/public/images/Services_Tours_v1.jpg new file mode 100644 index 0000000..7fba006 Binary files /dev/null and b/public/images/Services_Tours_v1.jpg differ diff --git a/public/images/Services_WeddingFlowers_v1.jpg b/public/images/Services_WeddingFlowers_v1.jpg new file mode 100644 index 0000000..68f06a2 Binary files /dev/null and b/public/images/Services_WeddingFlowers_v1.jpg differ diff --git a/public/images/Teton-Farm-View.gif b/public/images/Teton-Farm-View.gif new file mode 100644 index 0000000..4d4029b Binary files /dev/null and b/public/images/Teton-Farm-View.gif differ diff --git a/public/images/Twitter_v2.png b/public/images/Twitter_v2.png new file mode 100644 index 0000000..1c0ed04 Binary files /dev/null and b/public/images/Twitter_v2.png differ diff --git a/public/images/Us_Cam_v1.jpg b/public/images/Us_Cam_v1.jpg new file mode 100644 index 0000000..0be3d9d Binary files /dev/null and b/public/images/Us_Cam_v1.jpg differ diff --git a/public/images/Us_Cliff_v1.jpg b/public/images/Us_Cliff_v1.jpg new file mode 100644 index 0000000..0deb953 Binary files /dev/null and b/public/images/Us_Cliff_v1.jpg differ diff --git a/public/images/Us_Juan_v1.jpg b/public/images/Us_Juan_v1.jpg new file mode 100644 index 0000000..6c395cf Binary files /dev/null and b/public/images/Us_Juan_v1.jpg differ diff --git a/public/images/Us_NikkiSteve_v1.jpg b/public/images/Us_NikkiSteve_v1.jpg new file mode 100644 index 0000000..05ab313 Binary files /dev/null and b/public/images/Us_NikkiSteve_v1.jpg differ diff --git a/public/images/Us_Sarah_v1.jpg b/public/images/Us_Sarah_v1.jpg new file mode 100644 index 0000000..5d0f9a7 Binary files /dev/null and b/public/images/Us_Sarah_v1.jpg differ diff --git a/public/images/Us_Wynne_v1.jpg b/public/images/Us_Wynne_v1.jpg new file mode 100644 index 0000000..59b21aa Binary files /dev/null and b/public/images/Us_Wynne_v1.jpg differ diff --git a/public/images/Vaps1_v1.jpg b/public/images/Vaps1_v1.jpg new file mode 100644 index 0000000..ed3bb28 Binary files /dev/null and b/public/images/Vaps1_v1.jpg differ diff --git a/public/images/Vaps2_v1.jpg b/public/images/Vaps2_v1.jpg new file mode 100644 index 0000000..1cc8ceb Binary files /dev/null and b/public/images/Vaps2_v1.jpg differ diff --git a/public/images/Vaps3_v1.jpg b/public/images/Vaps3_v1.jpg new file mode 100644 index 0000000..0a7d413 Binary files /dev/null and b/public/images/Vaps3_v1.jpg differ diff --git a/public/images/Vaps4_v1.jpg b/public/images/Vaps4_v1.jpg new file mode 100644 index 0000000..988398d Binary files /dev/null and b/public/images/Vaps4_v1.jpg differ diff --git a/public/images/Vaps5_v1.jpg b/public/images/Vaps5_v1.jpg new file mode 100644 index 0000000..666a82b Binary files /dev/null and b/public/images/Vaps5_v1.jpg differ diff --git a/public/images/Vaps5_v2.jpg b/public/images/Vaps5_v2.jpg new file mode 100644 index 0000000..74127da Binary files /dev/null and b/public/images/Vaps5_v2.jpg differ diff --git a/public/images/Vaps6_v1.jpg b/public/images/Vaps6_v1.jpg new file mode 100644 index 0000000..558bc79 Binary files /dev/null and b/public/images/Vaps6_v1.jpg differ diff --git a/public/images/Vaps7_v1.jpg b/public/images/Vaps7_v1.jpg new file mode 100644 index 0000000..1986270 Binary files /dev/null and b/public/images/Vaps7_v1.jpg differ diff --git a/public/images/VapsV1_v1.jpg b/public/images/VapsV1_v1.jpg new file mode 100644 index 0000000..ca5309f Binary files /dev/null and b/public/images/VapsV1_v1.jpg differ diff --git a/public/images/VapsV2_v1.jpg b/public/images/VapsV2_v1.jpg new file mode 100644 index 0000000..09ca257 Binary files /dev/null and b/public/images/VapsV2_v1.jpg differ diff --git a/public/images/VapsV3_v1.jpg b/public/images/VapsV3_v1.jpg new file mode 100644 index 0000000..2af4607 Binary files /dev/null and b/public/images/VapsV3_v1.jpg differ diff --git a/public/images/Visit2_v1.jpg b/public/images/Visit2_v1.jpg new file mode 100644 index 0000000..26d6bc1 Binary files /dev/null and b/public/images/Visit2_v1.jpg differ diff --git a/public/images/Visit3_v1.jpg b/public/images/Visit3_v1.jpg new file mode 100644 index 0000000..bcc1fb5 Binary files /dev/null and b/public/images/Visit3_v1.jpg differ diff --git a/public/images/Visit4_v1.jpg b/public/images/Visit4_v1.jpg new file mode 100644 index 0000000..a49beb0 Binary files /dev/null and b/public/images/Visit4_v1.jpg differ diff --git a/public/images/Visit5_v1.jpg b/public/images/Visit5_v1.jpg new file mode 100644 index 0000000..202f9a6 Binary files /dev/null and b/public/images/Visit5_v1.jpg differ diff --git a/public/images/Windmill-Landscape.gif b/public/images/Windmill-Landscape.gif new file mode 100644 index 0000000..e1fde77 Binary files /dev/null and b/public/images/Windmill-Landscape.gif differ diff --git a/public/images/Yak-Grazing.gif b/public/images/Yak-Grazing.gif new file mode 100644 index 0000000..2068459 Binary files /dev/null and b/public/images/Yak-Grazing.gif differ diff --git a/public/images/Yaks1_v1.jpg b/public/images/Yaks1_v1.jpg new file mode 100644 index 0000000..da9428d Binary files /dev/null and b/public/images/Yaks1_v1.jpg differ diff --git a/public/images/arrow-grey-left.png b/public/images/arrow-grey-left.png new file mode 100644 index 0000000..5c11000 Binary files /dev/null and b/public/images/arrow-grey-left.png differ diff --git a/public/images/arrow-grey-right.png b/public/images/arrow-grey-right.png new file mode 100644 index 0000000..721617c Binary files /dev/null and b/public/images/arrow-grey-right.png differ diff --git a/public/images/egg.png b/public/images/egg.png new file mode 100644 index 0000000..3e4a9a9 Binary files /dev/null and b/public/images/egg.png differ diff --git a/public/images/facebook_v1.png b/public/images/facebook_v1.png new file mode 100644 index 0000000..d75edd3 Binary files /dev/null and b/public/images/facebook_v1.png differ diff --git a/public/images/flowers/flowers01_v1.jpg b/public/images/flowers/flowers01_v1.jpg new file mode 100644 index 0000000..0741980 Binary files /dev/null and b/public/images/flowers/flowers01_v1.jpg differ diff --git a/public/images/flowers/flowers01_v1_bak.jpg b/public/images/flowers/flowers01_v1_bak.jpg new file mode 100644 index 0000000..9055d26 Binary files /dev/null and b/public/images/flowers/flowers01_v1_bak.jpg differ diff --git a/public/images/flowers/flowers02_v1.jpg b/public/images/flowers/flowers02_v1.jpg new file mode 100644 index 0000000..3bedc17 Binary files /dev/null and b/public/images/flowers/flowers02_v1.jpg differ diff --git a/public/images/flowers/flowers02_v1_bak.jpg b/public/images/flowers/flowers02_v1_bak.jpg new file mode 100644 index 0000000..3f31b83 Binary files /dev/null and b/public/images/flowers/flowers02_v1_bak.jpg differ diff --git a/public/images/flowers/flowers03_v1.jpg b/public/images/flowers/flowers03_v1.jpg new file mode 100644 index 0000000..412ab62 Binary files /dev/null and b/public/images/flowers/flowers03_v1.jpg differ diff --git a/public/images/flowers/flowers03_v1_bak.jpg b/public/images/flowers/flowers03_v1_bak.jpg new file mode 100644 index 0000000..cd77d86 Binary files /dev/null and b/public/images/flowers/flowers03_v1_bak.jpg differ diff --git a/public/images/flowers/flowers04_v1.jpg b/public/images/flowers/flowers04_v1.jpg new file mode 100644 index 0000000..1014cda Binary files /dev/null and b/public/images/flowers/flowers04_v1.jpg differ diff --git a/public/images/flowers/flowers04_v1_bak.jpg b/public/images/flowers/flowers04_v1_bak.jpg new file mode 100644 index 0000000..7e31934 Binary files /dev/null and b/public/images/flowers/flowers04_v1_bak.jpg differ diff --git a/public/images/flowers/flowers05_v1.jpg b/public/images/flowers/flowers05_v1.jpg new file mode 100644 index 0000000..2aeb34d Binary files /dev/null and b/public/images/flowers/flowers05_v1.jpg differ diff --git a/public/images/flowers/flowers05_v1_bak.jpg b/public/images/flowers/flowers05_v1_bak.jpg new file mode 100644 index 0000000..8704ade Binary files /dev/null and b/public/images/flowers/flowers05_v1_bak.jpg differ diff --git a/public/images/flowers/flowers06_v1.jpg b/public/images/flowers/flowers06_v1.jpg new file mode 100644 index 0000000..91a1a07 Binary files /dev/null and b/public/images/flowers/flowers06_v1.jpg differ diff --git a/public/images/flowers/flowers06_v1_bak.jpg b/public/images/flowers/flowers06_v1_bak.jpg new file mode 100644 index 0000000..6ecf2b0 Binary files /dev/null and b/public/images/flowers/flowers06_v1_bak.jpg differ diff --git a/public/images/flowers/flowers07_v1.jpg b/public/images/flowers/flowers07_v1.jpg new file mode 100644 index 0000000..45f2e7b Binary files /dev/null and b/public/images/flowers/flowers07_v1.jpg differ diff --git a/public/images/flowers/flowers07_v1_bak.jpg b/public/images/flowers/flowers07_v1_bak.jpg new file mode 100644 index 0000000..84f4c9f Binary files /dev/null and b/public/images/flowers/flowers07_v1_bak.jpg differ diff --git a/public/images/flowers/flowers08_v1.jpg b/public/images/flowers/flowers08_v1.jpg new file mode 100644 index 0000000..4e5d0af Binary files /dev/null and b/public/images/flowers/flowers08_v1.jpg differ diff --git a/public/images/flowers/flowers08_v1_bak.jpg b/public/images/flowers/flowers08_v1_bak.jpg new file mode 100644 index 0000000..4c6d579 Binary files /dev/null and b/public/images/flowers/flowers08_v1_bak.jpg differ diff --git a/public/images/flowers/flowers09_v1.jpg b/public/images/flowers/flowers09_v1.jpg new file mode 100644 index 0000000..cbbca73 Binary files /dev/null and b/public/images/flowers/flowers09_v1.jpg differ diff --git a/public/images/flowers/flowers09_v1_bak.jpg b/public/images/flowers/flowers09_v1_bak.jpg new file mode 100644 index 0000000..e5e19f1 Binary files /dev/null and b/public/images/flowers/flowers09_v1_bak.jpg differ diff --git a/public/images/flowers/flowers10_v1.jpg b/public/images/flowers/flowers10_v1.jpg new file mode 100644 index 0000000..bdc25ca Binary files /dev/null and b/public/images/flowers/flowers10_v1.jpg differ diff --git a/public/images/flowers/flowers10_v1_bak.jpg b/public/images/flowers/flowers10_v1_bak.jpg new file mode 100644 index 0000000..fd8c956 Binary files /dev/null and b/public/images/flowers/flowers10_v1_bak.jpg differ diff --git a/public/images/flowers/flowers11_v1.jpg b/public/images/flowers/flowers11_v1.jpg new file mode 100644 index 0000000..c7f4a38 Binary files /dev/null and b/public/images/flowers/flowers11_v1.jpg differ diff --git a/public/images/flowers/flowers11_v1_bak.jpg b/public/images/flowers/flowers11_v1_bak.jpg new file mode 100644 index 0000000..9f438e7 Binary files /dev/null and b/public/images/flowers/flowers11_v1_bak.jpg differ diff --git a/public/images/google_plus_v2.png b/public/images/google_plus_v2.png new file mode 100644 index 0000000..b47365f Binary files /dev/null and b/public/images/google_plus_v2.png differ diff --git a/public/images/map_v1.jpg b/public/images/map_v1.jpg new file mode 100644 index 0000000..7ad2ce5 Binary files /dev/null and b/public/images/map_v1.jpg differ diff --git a/public/images/pig_close_up_v3.jpg b/public/images/pig_close_up_v3.jpg new file mode 100644 index 0000000..446b5e6 Binary files /dev/null and b/public/images/pig_close_up_v3.jpg differ diff --git a/public/images/shadow_b.png b/public/images/shadow_b.png new file mode 100644 index 0000000..f1c2a99 Binary files /dev/null and b/public/images/shadow_b.png differ diff --git a/public/images/shadow_bl.png b/public/images/shadow_bl.png new file mode 100644 index 0000000..53f0d44 Binary files /dev/null and b/public/images/shadow_bl.png differ diff --git a/public/images/shadow_br.png b/public/images/shadow_br.png new file mode 100644 index 0000000..eecd227 Binary files /dev/null and b/public/images/shadow_br.png differ diff --git a/public/images/shadow_r.png b/public/images/shadow_r.png new file mode 100644 index 0000000..5dfc405 Binary files /dev/null and b/public/images/shadow_r.png differ diff --git a/public/images/shadow_tr.png b/public/images/shadow_tr.png new file mode 100644 index 0000000..75b4382 Binary files /dev/null and b/public/images/shadow_tr.png differ diff --git a/public/images/sleepy_pig_v1.jpg b/public/images/sleepy_pig_v1.jpg new file mode 100644 index 0000000..f04b83a Binary files /dev/null and b/public/images/sleepy_pig_v1.jpg differ diff --git a/public/images/truck_tree_v2.jpg b/public/images/truck_tree_v2.jpg new file mode 100644 index 0000000..1003f6f Binary files /dev/null and b/public/images/truck_tree_v2.jpg differ diff --git a/public/images/twitter_v1.png b/public/images/twitter_v1.png new file mode 100644 index 0000000..1f0f086 Binary files /dev/null and b/public/images/twitter_v1.png differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..4dd4a9c --- /dev/null +++ b/public/index.html @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + Petit Teton Home + + + + + + + + + + + + + + + + +
+
+ + + + +
+ +
+
+ + +
+ Web Site By: Declarative Engineering LLC +
+
+ + \ No newline at end of file diff --git a/public/jquery.cycle2.js.map b/public/jquery.cycle2.js.map new file mode 100644 index 0000000..a686257 --- /dev/null +++ b/public/jquery.cycle2.js.map @@ -0,0 +1 @@ +{"version":3,"file":"build/jquery.cycle2.min.js","sources":["build/jquery.cycle2.js"],"names":["$","lowerCase","s","toLowerCase","version","fn","cycle","options","o","this","length","isReady","each","data","opts","shortName","val","container","log","noop","p","hasOwnProperty","test","match","replace","extend","defaults","timeoutId","paused","_maxZ","maxZ","API","_container","trigger","eventName","args","addInitialSlides","preInitSlideshow","slides","initSlideshow","selector","c","context","slideCount","jquery","find","random","sort","Math","add","tx","transitions","fx","isFunction","preInit","_preInitialized","postInitSlideshow","postInit","slideOpts","pauseObj","calcFirstSlide","css","currSlide","opacity","display","visibility","stackSlides","nextSlide","reverse","pauseOnHover","hover","pause","resume","timeout","getSlideOpts","queueTransition","delay","_initialized","updateView","alreadyPaused","hoverPaused","addClass","clearTimeout","_remainingTimeout","now","_lastQueue","isNaN","undefined","alreadyResumed","removeClass","filter","prepend","len","oldSlideCount","startSlideshow","type","trim","slide","append","buildSlideOpts","initSlide","firstSlideIndex","parseInt","startingSlide","calcNextSlide","roll","calcTx","manual","_tempFx","manualFx","fade","prepareTx","fwd","after","curr","next","busy","manualTrump","stopTransition","_tx","manualSpeed","speed","before","transition","doTransition","currEl","nextEl","callback","animate","animIn","easeIn","easing","cssBefore","animOut","easeOut","cssAfter","sync","specificTimeout","loop","setTimeout","continueAuto","stop","advanceSlide","slideNum","e","index","suggestedZindex","slideCss","speeds","_default","slideClass","isAfter","isDuring","slideActiveClass","eq","hideNonActive","getComponent","name","i","z","getSlideIndex","el","window","console","Array","prototype","join","call","arguments","custom","none","fadeout","scrollHorz","w","width","left","top","zIndex","allowWrap","autoSelector","position","document","ready","jQuery","initAutoHeight","clone","height","sentinelIndex","autoHeight","outerHeight","_autoHeightRatio","calcSentinelIndex","_sentinelIndex","_sentinel","remove","cloneNode","removeAttr","prependTo","max","h","onBefore","outgoing","incoming","autoHeightSpeed","autoHeightEasing","onDestroy","_autoHeightOnResize","off","on","onResize","ratio","t","resizeThrottle","caption","captionTemplate","overlay","overlayTemplate","captionModule","template","html","tmpl","show","hide","empty","c2","cmd","cmdFn","makeArray","cmdArgs","shift","apply","count","prev","destroy","clean","_data","removeData","retainStylesOnDestroy","jump","num","reinit","slideToRemove","push","preventDefault","command","onHashChange","setStartingSlide","hash","_hashFence","location","substring","_onHashChange","loader","addSlide","slideArr","sorter","addFn","a","b","appendTo","imageLoaded","images","is","complete","load","src","buildPagerLink","pagerLink","pagers","pager","pagerTemplate","markup","children","pagerEvent","pagerEventBubble","page","currentTarget","target","pagerFx","pagerActiveClass","slideAdded","nextEvent","disabledClass","prevEvent","swipe","swipeVert","swipeFx","cls","prevBoundry","_prevBoundry","nextBoundry","_nextBoundry","prop","progressive","scriptEl","nextFn","prevFn","prepareTxFn","parseJSON","err","split","RegExp","pop","slice","one","tmplRegex","str","regex","_","j","obj","names"],"mappings":";;;;;CAOC,SAAUA,GACX,YA8lBA,SAASC,GAAUC,GACf,OAAQA,GAAK,IAAIC,cA7lBrB,GAAIC,GAAU,OAEdJ,GAAEK,GAAGC,MAAQ,SAAUC,GAEnB,GAAIC,EACJ,OAAqB,KAAhBC,KAAKC,QAAiBV,EAAEW,QAStBF,KAAKG,KAAK,WACb,GAAIC,GAAMC,EAAMC,EAAWC,EACvBC,EAAYjB,EAAES,MACdS,EAAMlB,EAAEK,GAAGC,MAAMY,GAErB,KAAKD,EAAUJ,KAAK,cAApB,EAGKI,EAAUJ,KAAK,gBAAiB,GAC/BN,GAAWA,EAAQW,OAAQ,GAC3BJ,GAAQA,EAAKI,OAAQ,KACvBA,EAAMlB,EAAEmB,MAGZD,EAAI,eACJL,EAAOI,EAAUJ,MACjB,KAAK,GAAIO,KAAKP,GAENA,EAAKQ,eAAeD,IAAM,eAAeE,KAAKF,KAC9CJ,EAAMH,EAAKO,GACXL,EAAYK,EAAEG,MAAM,cAAc,GAAGC,QAAQ,SAAUvB,GACvDiB,EAAIH,EAAU,IAAKC,EAAK,UAAWA,GAAK,KACxCH,EAAKE,GAAaC,EAI1BF,GAAOd,EAAEyB,UAAYzB,EAAEK,GAAGC,MAAMoB,SAAUb,EAAMN,OAEhDO,EAAKa,UAAY,EACjBb,EAAKc,OAASd,EAAKc,SAAU,EAC7Bd,EAAKG,UAAYA,EACjBH,EAAKe,MAAQf,EAAKgB,KAElBhB,EAAKiB,IAAM/B,EAAEyB,QAAWO,WAAYf,GAAajB,EAAEK,GAAGC,MAAMyB,KAC5DjB,EAAKiB,IAAIb,IAAMA,EACfJ,EAAKiB,IAAIE,QAAU,SAAUC,EAAWC,GAEpC,MADArB,GAAKG,UAAUgB,QAASC,EAAWC,GAC5BrB,EAAKiB,KAGhBd,EAAUJ,KAAM,aAAcC,GAC9BG,EAAUJ,KAAM,YAAaC,EAAKiB,KAGlCjB,EAAKiB,IAAIE,QAAQ,mBAAqBnB,EAAMA,EAAKiB,MAEjDjB,EAAKiB,IAAIK,mBACTtB,EAAKiB,IAAIM,mBAEJvB,EAAKwB,OAAO5B,QACbI,EAAKiB,IAAIQ,oBA1Db/B,GAAMN,EAAGO,KAAK+B,SAAUC,EAAGhC,KAAKiC,SAChC1C,EAAEK,GAAGC,MAAMY,IAAI,uCACflB,EAAE,WACEA,EAAGQ,EAAEN,EAAGM,EAAEiC,GAAInC,MAAMC,KAEjBE,OAyDfT,EAAEK,GAAGC,MAAMyB,KACPjB,KAAM,WACF,MAAOL,MAAKuB,WAAWnB,KAAM,eAEjCuB,iBAAkB,WACd,GAAItB,GAAOL,KAAKK,OACZwB,EAASxB,EAAKwB,MAClBxB,GAAK6B,WAAa,EAClB7B,EAAKwB,OAAStC,IAGdsC,EAASA,EAAOM,OAASN,EAASxB,EAAKG,UAAU4B,KAAMP,GAElDxB,EAAKgC,QACNR,EAAOS,KAAK,WAAY,MAAOC,MAAKF,SAAW,KAGnDhC,EAAKiB,IAAIkB,IAAKX,IAGlBD,iBAAkB,WACd,GAAIvB,GAAOL,KAAKK,MAChBA,GAAKiB,IAAIE,QAAQ,wBAA0BnB,GAC3C,IAAIoC,GAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAKsC,GACjCF,IAAMlD,EAAEqD,WAAWH,EAAGI,UACtBJ,EAAGI,QAASxC,GAChBA,EAAKyC,iBAAkB,GAG3BC,kBAAmB,WACf,GAAI1C,GAAOL,KAAKK,MAChBA,GAAKiB,IAAIE,QAAQ,yBAA2BnB,GAC5C,IAAIoC,GAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAKsC,GACjCF,IAAMlD,EAAEqD,WAAWH,EAAGO,WACtBP,EAAGO,SAAU3C,IAGrByB,cAAe,WACX,GAEImB,GAFA5C,EAAOL,KAAKK,OACZ6C,EAAW7C,EAAKG,SAEpBH,GAAKiB,IAAI6B,iBAE8B,UAAlC9C,EAAKG,UAAU4C,IAAI,aACpB/C,EAAKG,UAAU4C,IAAI,WAAY,YAEnC7D,EAAEc,EAAKwB,OAAOxB,EAAKgD,YAAYD,KAC3BE,QAAS,EACTC,QAAS,QACTC,WAAY,YAEhBnD,EAAKiB,IAAImC,YAAapD,EAAKwB,OAAOxB,EAAKgD,WAAYhD,EAAKwB,OAAOxB,EAAKqD,YAAarD,EAAKsD,SAEjFtD,EAAKuD,eAEDvD,EAAKuD,gBAAiB,IACvBV,EAAW3D,EAAGc,EAAKuD,eAEvBV,EAASW,MACL,WAAYxD,EAAKiB,IAAIwC,OAAO,IAC5B,WAAYzD,EAAKiB,IAAIyC,QAAQ,MAKhC1D,EAAK2D,UACNf,EAAY5C,EAAKiB,IAAI2C,aAAc5D,EAAKgD,WACxChD,EAAKiB,IAAI4C,gBAAiBjB,EAAWA,EAAUe,QAAU3D,EAAK8D,QAGlE9D,EAAK+D,cAAe,EACpB/D,EAAKiB,IAAI+C,YAAY,GACrBhE,EAAKiB,IAAIE,QAAQ,qBAAuBnB,IACxCA,EAAKiB,IAAIyB,qBAGbe,MAAO,SAAUD,GACb,GAAIxD,GAAOL,KAAKK,OACZ4C,EAAY5C,EAAKiB,IAAI2C,eACrBK,EAAgBjE,EAAKkE,aAAelE,EAAKc,MAExC0C,GACDxD,EAAKkE,aAAc,EAEnBlE,EAAKc,QAAS,EAEXmD,IACHjE,EAAKG,UAAUgE,SAAS,gBACxBnE,EAAKiB,IAAIE,QAAQ,gBAAkBnB,IAAQI,IAAI,gBAE1CwC,EAAUe,UACXS,aAAcpE,EAAKa,WACnBb,EAAKa,UAAY,EAGjBb,EAAKqE,mBAAuBnF,EAAEoF,MAAQtE,EAAKuE,YACtCvE,EAAKqE,kBAAoB,GAAKG,MAAMxE,EAAKqE,sBAC1CrE,EAAKqE,kBAAoBI,WAKzCf,OAAQ,SAAUF,GACd,GAAIxD,GAAOL,KAAKK,OACZ0E,GAAkB1E,EAAKkE,cAAgBlE,EAAKc,MAG3C0C,GACDxD,EAAKkE,aAAc,EAEnBlE,EAAKc,QAAS,EAGX4D,IACH1E,EAAKG,UAAUwE,YAAY,gBAGqB,IAA3C3E,EAAKwB,OAAOoD,OAAO,aAAahF,QACjCI,EAAKiB,IAAI4C,gBAAiB7D,EAAKiB,IAAI2C,eAAgB5D,EAAKqE,mBAC5DrE,EAAKiB,IAAIE,QAAQ,iBAAmBnB,EAAMA,EAAKqE,oBAAsBjE,IAAI,mBAIjF+B,IAAK,SAAUX,EAAQqD,GACnB,GAGIC,GAHA9E,EAAOL,KAAKK,OACZ+E,EAAgB/E,EAAK6B,WACrBmD,GAAiB,CAGE,WAAlB9F,EAAE+F,KAAKzD,KACRA,EAAStC,EAAEgG,KAAM1D,IAErBtC,EAAGsC,GAAS1B,KAAK,WACb,GAAI8C,GACAuC,EAAQjG,EAAES,KAETkF,GACD7E,EAAKG,UAAU0E,QAASM,GAExBnF,EAAKG,UAAUiF,OAAQD,GAE3BnF,EAAK6B,aACLe,EAAY5C,EAAKiB,IAAIoE,eAAgBF,GAGjCnF,EAAKwB,OADJqD,EACa3F,EAAGiG,GAAQhD,IAAKnC,EAAKwB,QAErBxB,EAAKwB,OAAOW,IAAKgD,GAEnCnF,EAAKiB,IAAIqE,UAAW1C,EAAWuC,IAASnF,EAAKe,OAE7CoE,EAAMpF,KAAK,aAAc6C,GACzB5C,EAAKiB,IAAIE,QAAQ,qBAAuBnB,EAAM4C,EAAWuC,MAG7DnF,EAAKiB,IAAI+C,YAAY,GAErBgB,EAAiBhF,EAAKyC,iBAAoC,EAAhBsC,GAAqB/E,EAAK6B,YAAc,EAC7EmD,IACKhF,EAAK+D,aAED/D,EAAK2D,UACXmB,EAAM9E,EAAKwB,OAAO5B,OAClBI,EAAKqD,UAAYrD,EAAKsD,QAAUwB,EAAM,EAAI,EACpC9E,EAAKa,WACPb,EAAKiB,IAAI4C,gBAAiB7D,IAL9BA,EAAKiB,IAAIQ,kBAWrBqB,eAAgB,WACZ,GACIyC,GADAvF,EAAOL,KAAKK,MAEhBuF,GAAkBC,SAAUxF,EAAKyF,eAAiB,EAAG,KACjDF,GAAmBvF,EAAKwB,OAAO5B,QAA4B,EAAlB2F,KACzCA,EAAkB,GAEtBvF,EAAKgD,UAAYuC,EACZvF,EAAKsD,SACNtD,EAAKqD,UAAYkC,EAAkB,EAC/BvF,EAAKqD,UAAY,IACjBrD,EAAKqD,UAAYrD,EAAKwB,OAAO5B,OAAS,KAG1CI,EAAKqD,UAAYkC,EAAkB,EAC/BvF,EAAKqD,WAAarD,EAAKwB,OAAO5B,SAC9BI,EAAKqD,UAAY,KAI7BqC,cAAe,WACX,GACIC,GADA3F,EAAOL,KAAKK,MAEXA,GAAKsD,SACNqC,EAAQ3F,EAAKqD,UAAY,EAAK,EAC9BrD,EAAKqD,UAAYsC,EAAO3F,EAAK6B,WAAa,EAAI7B,EAAKqD,UAAU,EAC7DrD,EAAKgD,UAAY2C,EAAO,EAAI3F,EAAKqD,UAAU,IAG3CsC,EAAQ3F,EAAKqD,UAAY,GAAMrD,EAAKwB,OAAO5B,OAC3CI,EAAKqD,UAAYsC,EAAO,EAAI3F,EAAKqD,UAAU,EAC3CrD,EAAKgD,UAAY2C,EAAO3F,EAAKwB,OAAO5B,OAAO,EAAII,EAAKqD,UAAU,IAItEuC,OAAQ,SAAUhD,EAAWiD,GACzB,GACIzD,GADApC,EAAO4C,CAkBX,OAfK5C,GAAK8F,QACN1D,EAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAK8F,SAC3BD,GAAU7F,EAAK+F,WACrB3D,EAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAK+F,WAE/B3D,IACFA,EAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAKsC,KAErCtC,EAAK8F,QAAU,KACfnG,KAAKK,OAAO8F,QAAU,KAEjB1D,IACDA,EAAKlD,EAAEK,GAAGC,MAAM6C,YAAY2D,KAC5BhG,EAAKiB,IAAIb,IAAI,eAAiBJ,EAAKsC,GAAK,8BAErCF,GAGX6D,UAAW,SAAUJ,EAAQK,GACzB,GACIC,GAAOC,EAAMC,EAAMzD,EAAWR,EAD9BpC,EAAOL,KAAKK,MAGhB,OAAKA,GAAK6B,WAAa,OACnB7B,EAAKa,UAAY,KAGhBgF,GAAa7F,EAAKsG,OAAQtG,EAAKuG,cAChCvG,EAAKiB,IAAIuF,iBACTxG,EAAKsG,MAAO,EACZlC,aAAapE,EAAKa,WAClBb,EAAKa,UAAY,QAEhBb,EAAKsG,OAEc,IAAnBtG,EAAKa,WAAoBgF,KAG9BO,EAAOpG,EAAKwB,OAAOxB,EAAKgD,WACxBqD,EAAOrG,EAAKwB,OAAOxB,EAAKqD,WACxBT,EAAY5C,EAAKiB,IAAI2C,aAAc5D,EAAKqD,WACxCjB,EAAKpC,EAAKiB,IAAI2E,OAAQhD,EAAWiD,GAEjC7F,EAAKyG,IAAMrE,EAENyD,GAAoCpB,SAA1B7B,EAAU8D,cACrB9D,EAAU+D,MAAQ/D,EAAU8D,aAS3B1G,EAAKqD,WAAarD,EAAKgD,YACvB6C,IAAY7F,EAAKc,SAAWd,EAAKkE,aAAelE,EAAK2D,UAEtD3D,EAAKiB,IAAIE,QAAQ,gBAAkByB,EAAWwD,EAAMC,EAAMH,IACrD9D,EAAGwE,QACJxE,EAAGwE,OAAQhE,EAAWwD,EAAMC,EAAMH,GAEtCC,EAAQ,WACJnG,EAAKsG,MAAO,EAENtG,EAAKG,UAAUJ,KAAM,gBAGvBqC,EAAG+D,OACH/D,EAAG+D,MAAOvD,EAAWwD,EAAMC,EAAMH,GACrClG,EAAKiB,IAAIE,QAAQ,eAAiByB,EAAWwD,EAAMC,EAAMH,IACzDlG,EAAKiB,IAAI4C,gBAAiBjB,GAC1B5C,EAAKiB,IAAI+C,YAAY,KAGzBhE,EAAKsG,MAAO,EACRlE,EAAGyE,WACHzE,EAAGyE,WAAWjE,EAAWwD,EAAMC,EAAMH,EAAKC,GAE1CnG,EAAKiB,IAAI6F,aAAclE,EAAWwD,EAAMC,EAAMH,EAAKC,GAEvDnG,EAAKiB,IAAIyE,gBACT1F,EAAKiB,IAAI+C,cAEThE,EAAKiB,IAAI4C,gBAAiBjB,OAKlCkE,aAAc,SAAUlE,EAAWmE,EAAQC,EAAQd,EAAKe,GACpD,GAAIjH,GAAO4C,EACPwD,EAAOlH,EAAE6H,GAASV,EAAOnH,EAAE8H,GAC3BzH,EAAK,WAEL8G,EAAKa,QAAQlH,EAAKmH,SAAYlE,QAAS,GAAIjD,EAAK2G,MAAO3G,EAAKoH,QAAUpH,EAAKqH,OAAQJ,GAGvFZ,GAAKtD,IAAI/C,EAAKsH,eACdlB,EAAKc,QAAQlH,EAAKuH,YAAevH,EAAK2G,MAAO3G,EAAKwH,SAAWxH,EAAKqH,OAAQ,WACtEjB,EAAKrD,IAAI/C,EAAKyH,cACTzH,EAAK0H,MACNnI,MAGJS,EAAK0H,MACLnI,KAIRsE,gBAAiB,SAAUjB,EAAW+E,GAClC,GAAI3H,GAAOL,KAAKK,OACZ2D,EAA8Bc,SAApBkD,EAAgCA,EAAkB/E,EAAUe,OAC1E,OAAuB,KAAnB3D,EAAKqD,WAAmC,MAAdrD,EAAK4H,MAC/B5H,EAAKiB,IAAIb,IAAI,uBACbJ,EAAK2D,QAAU,EACVA,EACDkE,WAAW,WACP7H,EAAKiB,IAAIE,QAAQ,kBAAoBnB,KACtC2D,GAGH3D,EAAKiB,IAAIE,QAAQ,kBAAoBnB,SAGzCA,EAAKqD,UAAYrD,EAAKgD,YAGCyB,SAAtBzE,EAAK8H,eACD9H,EAAK8H,gBAAiB,GACtB5I,EAAEqD,WAAWvC,EAAK8H,eAAiB9H,EAAK8H,kBAAmB,IAC5D9H,EAAKiB,IAAIb,IAAI,qCACbJ,EAAK2D,QAAU,OACV3D,EAAKa,WACNuD,aAAapE,EAAKa,kBAIzB8C,IACD3D,EAAKuE,WAAarF,EAAEoF,MACKG,SAApBkD,IACD3H,EAAKqE,kBAAoBzB,EAAUe,SAEjC3D,EAAKc,QAAYd,EAAKkE,cACxBlE,EAAKa,UAAYgH,WAAW,WACxB7H,EAAKiB,IAAIgF,WAAW,GAAQjG,EAAKsD,UAClCK,OAKf6C,eAAgB,WACZ,GAAIxG,GAAOL,KAAKK,MACXA,GAAKwB,OAAOoD,OAAO,aAAahF,SACjCI,EAAKwB,OAAOuG,MAAK,GAAO,GACxB/H,EAAKiB,IAAIE,QAAQ,4BAA8BnB,KAG9CA,EAAKyG,KAAOzG,EAAKyG,IAAID,gBACtBxG,EAAKyG,IAAID,eAAgBxG,IAIjCgI,aAAc,SAAU9H,GACpB,GAAIF,GAAOL,KAAKK,MAWhB,OAVAoE,cAAapE,EAAKa,WAClBb,EAAKa,UAAY,EACjBb,EAAKqD,UAAYrD,EAAKgD,UAAY9C,EAE9BF,EAAKqD,UAAY,EACjBrD,EAAKqD,UAAYrD,EAAKwB,OAAO5B,OAAS,EACjCI,EAAKqD,WAAarD,EAAKwB,OAAO5B,SACnCI,EAAKqD,UAAY,GAErBrD,EAAKiB,IAAIgF,WAAW,EAAO/F,GAAO,IAC3B,GAGXmF,eAAgB,SAAUF,GACtB,GACIjF,GAAKD,EADLD,EAAOL,KAAKK,OAEZ4C,EAAYuC,EAAMpF,UACtB,KAAK,GAAIO,KAAKsC,GAENA,EAAUrC,eAAeD,IAAM,eAAeE,KAAKF,KACnDJ,EAAM0C,EAAUtC,GAChBL,EAAYK,EAAEG,MAAM,cAAc,GAAGC,QAAQ,SAAUvB,GACvDa,EAAKiB,IAAIb,IAAI,KAAKJ,EAAK6B,WAAW,GAAG,IAAK5B,EAAU,IAAKC,EAAK,UAAWA,GAAK,KAC9E0C,EAAU3C,GAAaC,EAI/B0C,GAAY1D,EAAEyB,UAAYzB,EAAEK,GAAGC,MAAMoB,SAAUZ,EAAM4C,GACrDA,EAAUqF,SAAWjI,EAAK6B,UAE1B,WAEWe,GAAU3B,UACV2B,GAAUf,iBACVe,GAAUI,gBACVJ,GAAUS,gBACVT,GAAUpB,OACnB,MAAM0G,IAGR,MAAOtF,IAGXgB,aAAc,SAAUuE,GACpB,GAAInI,GAAOL,KAAKK,MACDyE,UAAV0D,IACDA,EAAQnI,EAAKgD,UAEjB,IAAImC,GAAQnF,EAAKwB,OAAO2G,GACpBvF,EAAY1D,EAAEiG,GAAOpF,KAAK,aAC9B,OAAOb,GAAEyB,UAAYX,EAAM4C,IAG/B0C,UAAW,SAAU1C,EAAWuC,EAAOiD,GACnC,GAAIpI,GAAOL,KAAKK,MAChBmF,GAAMpC,IAAKH,EAAUyF,cAChBD,EAAkB,GACnBjD,EAAMpC,IAAK,SAAUqF,GAGpB5D,MAAO5B,EAAU+D,SAClB/D,EAAU+D,MAAQzH,EAAEoD,GAAGgG,OAAO1F,EAAU+D,QAAUzH,EAAEoD,GAAGgG,OAAOC,UAC5D3F,EAAU8E,OACZ9E,EAAU+D,MAAQ/D,EAAU+D,MAAQ,GAExCxB,EAAMhB,SAAUnE,EAAKwI,aAGzBxE,WAAY,SAAUyE,EAASC,GAC3B,GAAI1I,GAAOL,KAAKK,MAChB,IAAMA,EAAK+D,aAAX,CAEA,GAAInB,GAAY5C,EAAKiB,IAAI2C,eACrBZ,EAAYhD,EAAKwB,OAAQxB,EAAKgD,YAE3ByF,GAAWC,KAAa,IAC3B1I,EAAKiB,IAAIE,QAAQ,4BAA8BnB,EAAM4C,EAAWI,IAC3DhD,EAAKgE,WAAa,KAItBhE,EAAK2I,kBACN3I,EAAKwB,OAAOmD,YAAa3E,EAAK2I,kBACzBC,GAAI5I,EAAKgD,WAAYmB,SAAUnE,EAAK2I,kBAGxCF,GAAWzI,EAAK6I,eACjB7I,EAAKwB,OAAOoD,OAAQ,SAAW5E,EAAK2I,iBAAmB,KAAM5F,IAAI,aAAc,UAE1D,IAApB/C,EAAKgE,YACN6D,WAAW,WACP7H,EAAKiB,IAAIE,QAAQ,qBAAuBnB,EAAM4C,EAAWI,EAAWyF,KACrE7F,EAAU+D,OAAS3G,EAAK0H,KAAO,EAAI,IAGjB,IAApB1H,EAAKgE,YACNhE,EAAKiB,IAAIE,QAAQ,qBAAuBnB,EAAM4C,EAAWI,EAAWyF,IAEnEA,GACDzI,EAAKiB,IAAIE,QAAQ,2BAA6BnB,EAAM4C,EAAWI,OAGvE8F,aAAc,SAAUC,GACpB,GAAI/I,GAAOL,KAAKK,OACZ0B,EAAW1B,EAAK+I,EACpB,OAAwB,gBAAbrH,GAEA,gBAAkBlB,KAAMkB,GAAa1B,EAAKG,UAAU4B,KAAML,GAAaxC,EAAGwC,GAEjFA,EAASI,OACFJ,EAEJxC,EAAEwC,IAGb0B,YAAa,SAAUgD,EAAMC,EAAMH,GAC/B,GAAIlG,GAAOL,KAAKK,MACVoG,KACFA,EAAOpG,EAAKwB,OAAOxB,EAAKgD,WACxBqD,EAAOrG,EAAKwB,OAAOxB,EAAKqD,WACxB6C,GAAOlG,EAAKsD,SAKhBpE,EAAEkH,GAAMrD,IAAI,SAAU/C,EAAKgB,KAE3B,IAAIgI,GACAC,EAAIjJ,EAAKgB,KAAO,EAChB8D,EAAM9E,EAAK6B,UACf,IAAIqE,EAAK,CACL,IAAM8C,EAAIhJ,EAAKgD,UAAY,EAAO8B,EAAJkE,EAASA,IACnC9J,EAAGc,EAAKwB,OAAOwH,IAAKjG,IAAK,SAAUkG,IACvC,KAAMD,EAAI,EAAGA,EAAIhJ,EAAKgD,UAAWgG,IAC7B9J,EAAGc,EAAKwB,OAAOwH,IAAKjG,IAAK,SAAUkG,SAEtC,CACD,IAAMD,EAAIhJ,EAAKgD,UAAY,EAAGgG,GAAK,EAAGA,IAClC9J,EAAGc,EAAKwB,OAAOwH,IAAKjG,IAAK,SAAUkG,IACvC,KAAMD,EAAIlE,EAAM,EAAGkE,EAAIhJ,EAAKgD,UAAWgG,IACnC9J,EAAGc,EAAKwB,OAAOwH,IAAKjG,IAAK,SAAUkG,KAG3C/J,EAAEmH,GAAMtD,IAAI,SAAU/C,EAAKgB,KAAO,IAGtCkI,cAAe,SAAUC,GACrB,MAAOxJ,MAAKK,OAAOwB,OAAO2G,MAAOgB,KAMzCjK,EAAEK,GAAGC,MAAMY,IAAM,WAETgJ,OAAOC,SAAWA,QAAQjJ,KAC1BiJ,QAAQjJ,IAAI,YAAckJ,MAAMC,UAAUC,KAAKC,KAAKC,UAAW,OAGvExK,EAAEK,GAAGC,MAAMF,QAAU,WAAa,MAAO,WAAaA,GAStDJ,EAAEK,GAAGC,MAAM6C,aACPsH,UAEAC,MACIhD,OAAQ,SAAU5G,EAAMoG,EAAMC,EAAMH,GAChClG,EAAKiB,IAAImC,YAAaiD,EAAMD,EAAMF,GAClClG,EAAKsH,WAAcrE,QAAS,EAAGE,WAAY,UAAWD,QAAS,WAGvE8C,MACIY,OAAQ,SAAU5G,EAAMoG,EAAMC,EAAMH,GAChC,GAAInD,GAAM/C,EAAKiB,IAAI2C,aAAc5D,EAAKqD,WAAYgF,YAClDrI,GAAKiB,IAAImC,YAAagD,EAAMC,EAAMH,GAClClG,EAAKsH,UAAYpI,EAAEyB,OAAOoC,GAAOE,QAAS,EAAGE,WAAY,UAAWD,QAAS,UAC7ElD,EAAKmH,QAAWlE,QAAS,GACzBjD,EAAKuH,SAAYtE,QAAS,KAGlC4G,SACIjD,OAAQ,SAAU5G,EAAOoG,EAAMC,EAAMH,GACjC,GAAInD,GAAM/C,EAAKiB,IAAI2C,aAAc5D,EAAKqD,WAAYgF,YAClDrI,GAAKiB,IAAImC,YAAagD,EAAMC,EAAMH,GAClClG,EAAKsH,UAAYpI,EAAEyB,OAAOoC,GAAOE,QAAS,EAAGE,WAAY,UAAWD,QAAS,UAC7ElD,EAAKuH,SAAYtE,QAAS,KAGlC6G,YACIlD,OAAQ,SAAU5G,EAAMoG,EAAMC,EAAMH,GAChClG,EAAKiB,IAAImC,YAAagD,EAAMC,EAAMH,EAClC,IAAI6D,GAAI/J,EAAKG,UAAU4C,IAAI,WAAW,UAAUiH,OAChDhK,GAAKsH,WAAc2C,KAAM/D,EAAM6D,GAAMA,EAAGG,IAAK,EAAGjH,QAAS,EAAGE,WAAY,UAAWD,QAAS,SAC5FlD,EAAKyH,UAAa0C,OAAQnK,EAAKe,MAAQ,EAAGkJ,KAAM,GAChDjK,EAAKmH,QAAW8C,KAAM,GACtBjK,EAAKuH,SAAY0C,KAAM/D,GAAO6D,EAAIA,MAM9C7K,EAAEK,GAAGC,MAAMoB,UACPwJ,WAAkB,EAClBC,aAAkB,gDAClBvG,MAAkB,EAClBuD,OAAkB,KAClB/E,GAAiB,OACjBuG,eAAkB,EAClBjB,KAAkB,EAClB7B,SAAkBtB,OAClBiC,YAAkBjC,OAClB8B,aAAkB,EAClBvF,KAAkB,IAClBuC,cAAkB,EAClBD,SAAkB,EAClBqF,iBAAkB,qBAClBH,WAAkB,cAClBH,UAAoBiC,SAAU,WAAYJ,IAAK,EAAGD,KAAM,GACxDzI,OAAiB,QACjBmF,MAAkB,IAClBlB,cAAkB,EAClBiC,MAAkB,EAClB/D,QAAkB,IAClBK,WAAkB,GAItB9E,EAAEqL,UAAUC,MAAM,WACdtL,EAAGA,EAAEK,GAAGC,MAAMoB,SAASyJ,cAAe7K,WAGvCiL;AAGH,SAAUvL,GACV,YAkDA,SAASwL,GAAgBxC,EAAGlI,GACxB,GAAI2K,GAAOC,EAAQC,EACfC,EAAa9K,EAAK8K,UAEtB,IAAmB,aAAdA,EACDF,EAAS1L,EAAGc,EAAKwB,OAAQxB,EAAKgD,YAAc+H,cAC5C/K,EAAKG,UAAUyK,OAAQA,OAEtB,IAAK5K,EAAKgL,iBACXhL,EAAKG,UAAUyK,OAAQ5K,EAAKG,UAAU6J,QAAUhK,EAAKgL,sBAEpD,IAAoB,SAAfF,GAAmD,UAAxB5L,EAAE+F,KAAM6F,IAA4BA,GAAc,EAAM,CASzF,GAPID,EADgB,SAAfC,EACeG,EAAmB/C,EAAGlI,GAChC8K,GAAc9K,EAAKwB,OAAO5B,OAChB,EAEAkL,EAGfD,GAAiB7K,EAAKkL,eACvB,MAEJlL,GAAKkL,eAAiBL,EACjB7K,EAAKmL,WACNnL,EAAKmL,UAAUC,SAGnBT,EAAQzL,EAAGc,EAAKwB,OAAQqJ,GAAgBQ,WAAU,IAGlDV,EAAMW,WAAY,eAAgBvJ,KAAM,qBAAsBuJ,WAAY,eAE1EX,EAAM5H,KACFuH,SAAU,SACVnH,WAAY,SACZD,QAAS,UACVqI,UAAWvL,EAAKG,WAAYgE,SAAS,8BAA8BQ,YAAY,sBAClFgG,EAAM5I,KAAM,KAAMgB,IAAK,aAAc,UAErC/C,EAAKmL,UAAYR,GAIzB,QAASM,GAAmB/C,EAAGlI,GAC3B,GAAImI,GAAQ,EAAGqD,EAAM,EAUrB,OAPAxL,GAAKwB,OAAO1B,KAAK,SAASkJ,GACtB,GAAIyC,GAAIvM,EAAES,MAAMiL,QACXa,GAAID,IACLA,EAAMC,EACNtD,EAAQa,KAGTb,EAGX,QAASuD,GAAUxD,EAAGlI,EAAM2L,EAAUC,GAClC,GAAIH,GAAIvM,EAAE0M,GAAUb,aACpB/K,GAAKG,UAAU+G,SAAW0D,OAAQa,GAAKzL,EAAK6L,gBAAiB7L,EAAK8L,kBAGtE,QAASC,GAAW7D,EAAGlI,GACdA,EAAKgM,sBACN9M,EAAEkK,QAAQ6C,IAAK,2BAA4BjM,EAAKgM,qBAChDhM,EAAKgM,oBAAsB,MAE/BhM,EAAKG,UAAU8L,IAAK,wCAAyCvB,GAC7D1K,EAAKG,UAAU8L,IAAK,kBAAmBF,GACvC/L,EAAKG,UAAU8L,IAAK,eAAgBP,GAE/B1L,EAAKmL,YACNnL,EAAKmL,UAAUC,SACfpL,EAAKmL,UAAY,MA1HzBjM,EAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChBkK,WAAY,EACZe,gBAAiB,IACjBC,iBAAkB,OAGtB5M,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,GAqC9C,QAASmM,KACLzB,EAAgBxC,EAAGlI,GArCvB,GAGIoM,GAHAtB,EAAa9K,EAAK8K,WAClBuB,EAAInN,EAAE+F,KAAM6F,GACZwB,EAAiB,MAGV,WAAND,GAAwB,WAANA,KAIvBrM,EAAKG,UAAU+L,GAAI,wCAAyCxB,GAC5D1K,EAAKG,UAAU+L,GAAI,kBAAmBH,GAEnB,aAAdjB,EACD9K,EAAKG,UAAU+L,GAAI,eAAgBR,GAEvB,WAANW,GAAkB,WAAW7L,KAAMsK,KAEzCsB,EAAQtB,EAAWrK,MAAM,gBACzB2L,EAAQA,EAAM,GAAKA,EAAM,GACzBpM,EAAKgL,iBAAmBoB,GAKjB,WAANC,IAEDrM,EAAKgM,oBAAsB,WACvB5H,aAAckI,GACdA,EAAiBzE,WAAYsE,EAAU,KAG3CjN,EAAEkK,QAAQ8C,GAAI,2BAA4BlM,EAAKgM,sBAGnDnE,WAAYsE,EAAU,QAqFvB1B;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChB2L,QAAkB,mBAClBC,gBAAkB,gCAClBC,QAAkB,mBAClBC,gBAAkB,0CAClBC,cAAkB,YAGtBzN,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,EAAM4C,EAAWI,GAC/D,GAA4B,YAAvBhD,EAAK2M,cAAV,CAGAzN,EAAEY,MAAM,UAAU,WAAY,WAC1B,GAAIiJ,GAAOpJ,KACPiN,EAAWhK,EAAUmG,EAAK,YAC1BI,EAAKnJ,EAAKiB,IAAI6H,aAAcC,EAC5BI,GAAGvJ,QAAUgN,GACbzD,EAAG0D,KAAM7M,EAAKiB,IAAI6L,KAAMF,EAAUhK,EAAW5C,EAAMgD,IACnDmG,EAAG4D,QAGH5D,EAAG6D,YAKf9N,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GAC5C,GAAImJ,EACJjK,GAAEY,MAAM,UAAU,WAAY,WAC1B,GAAIiJ,GAAOpJ,KAAMiN,EAAW5M,EAAK+I,EAAK,WACjC/I,GAAK+I,IAAS6D,IACfzD,EAAKnJ,EAAKiB,IAAI6H,aAAc,WAC5BK,EAAG8D,cAKZxC;AAGH,SAAUvL,GACV,YAEA,IAAIgO,GAAKhO,EAAEK,GAAGC,KAEdN,GAAEK,GAAGC,MAAQ,SAAUC,GACnB,GAAI0N,GAAKC,EAAOpN,EACZqB,EAAOnC,EAAEmO,UAAW3D,UAExB,OAA0B,UAArBxK,EAAE+F,KAAMxF,GACFE,KAAKH,MAAO,OAAQC,GAGL,UAArBP,EAAE+F,KAAMxF,GACFE,KAAKG,KAAK,WACb,GAAIwN,EAIJ,OAHAH,GAAM1N,EACNO,EAAOd,EAAES,MAAMI,KAAK,cAEN0E,SAATzE,MACDkN,GAAG9M,IAAI,2DAA6D+M,EAAM,cAI1EA,EAAa,QAAPA,EAAgB,OAASA,EAC/BC,EAAQpN,EAAKiB,IAAKkM,GACbjO,EAAEqD,WAAY6K,IACfE,EAAUpO,EAAEmO,UAAWhM,GACvBiM,EAAQC,QACDH,EAAMI,MAAOxN,EAAKiB,IAAKqM,QAG9BJ,GAAG9M,IAAK,oBAAqB+M,MAMlCD,EAAGM,MAAO7N,KAAM+J,YAK/BxK,EAAEyB,OAAQzB,EAAEK,GAAGC,MAAO0N,GAEtBhO,EAAEyB,OAAQuM,EAAGjM,KACToF,KAAM,WACF,GAAIrG,GAAOL,KAAKK,MAChB,KAAKA,EAAKsG,MAAUtG,EAAKuG,YAAzB,CAGA,GAAIkH,GAAQzN,EAAKsD,QAAU,GAAK,CAC3BtD,GAAKoK,aAAc,GAAWpK,EAAKgD,UAAYyK,GAAWzN,EAAK6B,aAGpE7B,EAAKiB,IAAI+G,aAAcyF,GACvBzN,EAAKiB,IAAIE,QAAQ,cAAgBnB,IAAQI,IAAI,iBAGjDsN,KAAM,WACF,GAAI1N,GAAOL,KAAKK,MAChB,KAAKA,EAAKsG,MAAUtG,EAAKuG,YAAzB,CAEA,GAAIkH,GAAQzN,EAAKsD,QAAU,EAAI,EAC1BtD,GAAKoK,aAAc,GAAWpK,EAAKgD,UAAYyK,EAAU,IAG9DzN,EAAKiB,IAAI+G,aAAcyF,GACvBzN,EAAKiB,IAAIE,QAAQ,cAAgBnB,IAAQI,IAAI,iBAGjDuN,QAAS,WACLhO,KAAKoI,MAEL,IAAI/H,GAAOL,KAAKK,OACZ4N,EAAQ1O,EAAEqD,WAAYrD,EAAE2O,OAAU3O,EAAE2O,MAAQ3O,EAAEmB,IAClD+D,cAAapE,EAAKa,WAClBb,EAAKa,UAAY,EACjBb,EAAKiB,IAAI8G,OACT/H,EAAKiB,IAAIE,QAAS,mBAAqBnB,IAASI,IAAI,mBACpDJ,EAAKG,UAAU2N,aACfF,EAAO5N,EAAKG,UAAU,GAAI,eAAe,GAGlCH,EAAK+N,wBACR/N,EAAKG,UAAUmL,WAAY,SAC3BtL,EAAKwB,OAAO8J,WAAY,SACxBtL,EAAKwB,OAAOmD,YAAa3E,EAAK2I,mBAElC3I,EAAKwB,OAAO1B,KAAK,WACb,GAAIqF,GAAQjG,EAAES,KACdwF,GAAM2I,aACN3I,EAAMR,YAAa3E,EAAKwI,YACxBoF,EAAOjO,KAAM,eAAe,MAIpCqO,KAAM,SAAU7F,EAAO7F,GAEnB,GAAI4D,GACAlG,EAAOL,KAAKK,MAChB,KAAKA,EAAKsG,MAAUtG,EAAKuG,YAAzB,CAEA,GAAI0H,GAAMzI,SAAU2C,EAAO,GAC3B,IAAI3D,MAAMyJ,IAAc,EAANA,GAAWA,GAAOjO,EAAKwB,OAAO5B,OAE5C,WADAI,GAAKiB,IAAIb,IAAI,8BAAgC6N,EAGjD,IAAIA,GAAOjO,EAAKgD,UAEZ,WADAhD,GAAKiB,IAAIb,IAAI,mCAAoC6N,EAGrDjO,GAAKqD,UAAY4K,EACjB7J,aAAapE,EAAKa,WAClBb,EAAKa,UAAY,EACjBb,EAAKiB,IAAIb,IAAI,SAAU6N,EAAK,iBAC5B/H,EAAMlG,EAAKgD,UAAYhD,EAAKqD,UAC5BrD,EAAK8F,QAAUxD,EACftC,EAAKiB,IAAIgF,WAAW,EAAMC,KAG9B6B,KAAM,WACF,GAAI/H,GAAOL,KAAKK,OACZ6C,EAAW7C,EAAKG,SACpBiE,cAAapE,EAAKa,WAClBb,EAAKa,UAAY,EACjBb,EAAKiB,IAAIuF,iBACJxG,EAAKuD,eACDvD,EAAKuD,gBAAiB,IACvBV,EAAW3D,EAAGc,EAAKuD,eACvBV,EAASoJ,IAAI,0BAEjBjM,EAAKiB,IAAIE,QAAQ,iBAAmBnB,IAAQI,IAAI,kBAGpD8N,OAAQ,WACJ,GAAIlO,GAAOL,KAAKK,MAChBA,GAAKiB,IAAI0M,UACT3N,EAAKG,UAAUX,SAGnB4L,OAAQ,SAAUjD,GAGd,IAAM,GADFhD,GAAOgJ,EADPnO,EAAOL,KAAKK,OACUwB,KAAayG,EAAW,EACxCe,EAAE,EAAGA,EAAIhJ,EAAKwB,OAAO5B,OAAQoJ,IACnC7D,EAAQnF,EAAKwB,OAAOwH,GACfA,GAAKb,EACNgG,EAAgBhJ,GAGhB3D,EAAO4M,KAAMjJ,GACbjG,EAAGiG,GAAQpF,KAAK,cAAckI,SAAWA,EACzCA,IAGHkG,KACDnO,EAAKwB,OAAStC,EAAGsC,GACjBxB,EAAK6B,aACL3C,EAAGiP,GAAgB/C,SACfjD,GAASnI,EAAKgD,UACdhD,EAAKiB,IAAI+G,aAAc,GACjBG,EAAQnI,EAAKgD,UACnBhD,EAAKgD,YAELhD,EAAKgD,YAEThD,EAAKiB,IAAIE,QAAQ,uBAAyBnB,EAAMmI,EAAOgG,IAAiB/N,IAAI,uBAC5EJ,EAAKiB,IAAI+C,iBAOrB9E,EAAEqL,UAAU2B,GAAG,cAAe,mBAAoB,SAAShE,GAEvDA,EAAEmG,gBACF,IAAIlF,GAAKjK,EAAES,MACP2O,EAAUnF,EAAGpJ,KAAK,aAClB6B,EAAUuH,EAAGpJ,KAAK,kBAAoB,kBAC1Cb,GAAE0C,GAASpC,MAAM8O,EAASnF,EAAGpJ,KAAK,iBAInC0K;AAGH,SAAUvL,GACV,YAyBA,SAASqP,GAAcvO,EAAMwO,GACzB,GAAIC,EACJ,OAAKzO,GAAK0O,gBACN1O,EAAK0O,YAAa,IAItBD,EAAOrF,OAAOuF,SAASF,KAAKG,UAAU,OAEtC5O,GAAKwB,OAAO1B,KAAK,SAASkJ,GACtB,GAAK9J,EAAES,MAAMI,KAAM,eAAkB0O,EAAO,CACxC,GAAKD,KAAqB,EACtBxO,EAAKyF,cAAgBuD,MAEpB,CACD,GAAI9C,GAAMlG,EAAKgD,UAAYgG,CAC3BhJ,GAAKqD,UAAY2F,EACjBhJ,EAAKiB,IAAIgF,WAAW,EAAMC,GAE9B,OAAO,MA1CnBhH,EAAEqL,UAAU2B,GAAI,uBAAwB,SAAUhE,EAAGlI,GACjDuO,EAAcvO,GAAM,GAEpBA,EAAK6O,cAAgB,WACjBN,EAAcvO,GAAM,IAGxBd,EAAGkK,QAAS8C,GAAI,aAAclM,EAAK6O,iBAGvC3P,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,EAAM4C,GAC/CA,EAAU6L,MAAU,IAAM7L,EAAU6L,MAAUrF,OAAOuF,SAASF,OAC/DzO,EAAK0O,YAAa,EAClBtF,OAAOuF,SAASF,KAAO7L,EAAU6L,QAIzCvP,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GACvCA,EAAK6O,eACN3P,EAAGkK,QAAS6C,IAAK,aAAcjM,EAAK6O,kBA4BzCpE;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChBkO,QAAQ,IAGZ5P,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GAU5C,QAASmC,GAAKX,EAAQqD,GA6DlB,QAASkK,GAAU5J,GACf,GAAIiB,EACgB,SAAfpG,EAAK8O,QACNE,EAASZ,KAAMjJ,GACK,IAAftD,IAEDmN,EAAS/M,KAAMgN,GACfC,EAAM1B,MAAOxN,EAAKiB,KAAO+N,EAAUnK,IACnC7E,EAAKG,UAAUwE,YAAY,oBAI/ByB,EAAOlH,EAAEc,EAAKwB,OAAOxB,EAAKgD,YAC1BkM,EAAM1B,MAAOxN,EAAKiB,KAAOkE,EAAON,IAChCuB,EAAK2G,OACL/M,EAAKG,UAAUwE,YAAY,kBAInC,QAASsK,GAAOE,EAAGC,GACf,MAAOD,GAAEpP,KAAK,SAAWqP,EAAErP,KAAK,SAhFpC,GAAIiP,KACJ,IAAyB,UAApB9P,EAAE+F,KAAMzD,GACTA,EAAStC,EAAEgG,KAAM1D,OAChB,IAAyB,UAApBtC,EAAE+F,KAAMzD,GACd,IAAK,GAAIwH,GAAE,EAAGA,EAAIxH,EAAO5B,OAAQoJ,IAC7BxH,EAAOwH,GAAK9J,EAAEsC,EAAOwH,IAAI,EAGjCxH,GAAStC,EAAGsC,EACZ,IAAIK,GAAaL,EAAO5B,MAEjBiC,KAGPL,EAAOuB,IAAI,aAAa,UAAUsM,SAAS,QAAQvP,KAAK,SAASkJ,GAkC7D,QAASsG,KACY,MAAV7B,MACD5L,EACFkN,EAAU5J,IApClB,GAAIsI,GAAQ,EACRtI,EAAQjG,EAAES,MACV4P,EAASpK,EAAMqK,GAAG,OAASrK,EAAQA,EAAMpD,KAAK,MAIlD,OAHAoD,GAAMpF,KAAK,QAASiJ,GAEpBuG,EAASA,EAAO3K,OAAO,8BAA8BA,OAAO,kBACrD2K,EAAO3P,QAMd6N,EAAQ8B,EAAO3P,WACf2P,GAAOzP,KAAK,WAEHH,KAAK8P,SACNH,IAGApQ,EAAES,MAAM+P,KAAK,WACTJ,MACDpD,GAAG,QAAS,WACM,MAAVuB,IAEHzN,EAAKiB,IAAIb,IAAI,iCAAkCT,KAAKgQ,KAC9B,MAAf9N,GAAmC,QAAf7B,EAAK8O,QAC5BI,EAAM1B,MAAOxN,EAAKiB,KAAO+N,EAAUnK,aAnBjDhD,MACFmN,GAASZ,KAAMjJ,MAiClBtD,GACD7B,EAAKG,UAAUgE,SAAS,kBAnEhC,GAAI+K,EAEElP,GAAK8O,SAIXI,EAAQlP,EAAKiB,IAAIkB,IACjBnC,EAAKiB,IAAIkB,IAAMA,MAwFhBsI;AAGH,SAAUvL,GACV,YAsDA,SAAS0Q,GAAgB5P,EAAM4C,EAAWuC,GACtC,GAAI0K,GACAC,EAAS9P,EAAKiB,IAAI6H,aAAc,QACpCgH,GAAOhQ,KAAK,WACR,GAAIiQ,GAAQ7Q,EAAES,KACd,IAAKiD,EAAUoN,cAAgB,CAC3B,GAAIC,GAASjQ,EAAKiB,IAAI6L,KAAMlK,EAAUoN,cAAepN,EAAW5C,EAAMmF,EAAM,GAC5E0K,GAAY3Q,EAAG+Q,GAASZ,SAAUU,OAGlCF,GAAYE,EAAMG,WAAWtH,GAAI5I,EAAK6B,WAAa,EAEvDgO,GAAU3D,GAAIlM,EAAKmQ,WAAY,SAASjI,GAC7BlI,EAAKoQ,kBACRlI,EAAEmG,iBACNrO,EAAKiB,IAAIoP,KAAMN,EAAO7H,EAAEoI,mBAKpC,QAASD,GAAMN,EAAOQ,GAElB,GAAIvQ,GAAOL,KAAKK,MAChB,KAAKA,EAAKsG,MAAUtG,EAAKuG,YAAzB,CAGA,GAAI4B,GAAQ4H,EAAMG,WAAW/H,MAAOoI,GAChClN,EAAY8E,EACZjC,EAAMlG,EAAKgD,UAAYK,CACvBrD,GAAKgD,WAAaK,IAGtBrD,EAAKqD,UAAYA,EACjBrD,EAAK8F,QAAU9F,EAAKwQ,QACpBxQ,EAAKiB,IAAIgF,WAAW,EAAMC,GAC1BlG,EAAKiB,IAAIE,QAAQ,yBAA0BnB,EAAM+P,EAAOQ,MAvF5DrR,EAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChBmP,MAAkB,iBAClBU,iBAAkB,qBAClBN,WAAkB,cAClBC,iBAAkB3L,OAClBuL,cAAkB,wBAGtB9Q,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,EAAMiB,GAElDA,EAAI2O,eAAiBA,IAGzB1Q,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,EAAM4C,EAAW8N,GAC1D1Q,EAAK+P,QACN/P,EAAKiB,IAAI2O,eAAiB5P,EAAM4C,EAAW8N,GAC3C1Q,EAAKiB,IAAIoP,KAAOA,KAIxBnR,EAAEqL,UAAU2B,GAAI,sBAAuB,SAAUhE,EAAGlI,EAAMmI,GACtD,GAAKnI,EAAK+P,MAAQ,CACd,GAAID,GAAS9P,EAAKiB,IAAI6H,aAAc,QACpCgH,GAAOhQ,KAAK,WACR,GAAIiQ,GAAQ7Q,EAAES,KACdT,GAAG6Q,EAAMG,WAAW/H,IAASiD,cAKzClM,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,GAC9C,GAAI8P,EAEC9P,GAAK+P,QACND,EAAS9P,EAAKiB,IAAI6H,aAAc,SAChCgH,EAAOhQ,KAAK,WACTZ,EAAES,MAAMuQ,WAAWvL,YAAa3E,EAAKyQ,kBACnC7H,GAAI5I,EAAKgD,WAAYmB,SAAUnE,EAAKyQ,uBAKjDvR,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GAC5C,GAAI+P,GAAQ/P,EAAKiB,IAAI6H,aAAc,QAE9BiH,KACDA,EAAMG,WAAWjE,IAAKjM,EAAKmQ,YACtBnQ,EAAKgQ,eACND,EAAM9C,YA0CfxC;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChByF,KAAgB,gBAChBsK,UAAgB,cAChBC,cAAgB,WAChBlD,KAAgB,gBAChBmD,UAAgB,cAChBC,OAAgB,IAGpB5R,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,GAW9C,GAVAA,EAAKiB,IAAI6H,aAAc,QAASoD,GAAIlM,EAAK2Q,UAAW,SAASzI,GACzDA,EAAEmG,iBACFrO,EAAKiB,IAAIoF,SAGbrG,EAAKiB,IAAI6H,aAAc,QAASoD,GAAIlM,EAAK6Q,UAAW,SAAS3I,GACzDA,EAAEmG,iBACFrO,EAAKiB,IAAIyM,SAGR1N,EAAK8Q,MAAQ,CACd,GAAIH,GAAY3Q,EAAK+Q,UAAY,gBAAkB,kCAC/CF,EAAY7Q,EAAK+Q,UAAY,kBAAoB,mCACrD/Q,GAAKG,UAAU+L,GAAIyE,EAAW,WAC1B3Q,EAAK8F,QAAU9F,EAAKgR,QACpBhR,EAAKiB,IAAIoF,SAEbrG,EAAKG,UAAU+L,GAAI2E,EAAW,WAC1B7Q,EAAK8F,QAAU9F,EAAKgR,QACpBhR,EAAKiB,IAAIyM,YAKrBxO,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,GAC9C,IAAKA,EAAKoK,UAAV,CAGA,GAAI6G,GAAMjR,EAAK4Q,cACXvK,EAAOrG,EAAKiB,IAAI6H,aAAc,QAC9B4E,EAAO1N,EAAKiB,IAAI6H,aAAc,QAC9BoI,EAAclR,EAAKmR,cAAgB,EACnCC,EAAqC3M,SAAtBzE,EAAKqR,aAA4BrR,EAAKqR,aAAarR,EAAK6B,WAAa,CAEnF7B,GAAKgD,WAAaoO,EACnB/K,EAAKlC,SAAU8M,GAAMK,KAAM,YAAY,GAEvCjL,EAAK1B,YAAasM,GAAMK,KAAM,YAAY,GAEzCtR,EAAKgD,YAAckO,EACpBxD,EAAKvJ,SAAU8M,GAAMK,KAAM,YAAY,GAEvC5D,EAAK/I,YAAasM,GAAMK,KAAM,YAAY,MAIlDpS,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GAC5CA,EAAKiB,IAAI6H,aAAc,QAASmD,IAAKjM,EAAK2Q,WAC1C3Q,EAAKiB,IAAI6H,aAAc,QAASmD,IAAKjM,EAAK6Q,WAC1C7Q,EAAKG,UAAU8L,IAAK,sGAGrBxB;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChB2Q,aAAa,IAGjBrS,EAAEqL,UAAU2B,GAAI,uBAAwB,SAAUhE,EAAGlI,GACjD,GAAMA,EAAKuR,YAAX,CAGA,GAKI/P,GAAQgQ,EALRvQ,EAAMjB,EAAKiB,IACXwQ,EAASxQ,EAAIoF,KACbqL,EAASzQ,EAAIyM,KACbiE,EAAc1Q,EAAIgF,UAClBhB,EAAO/F,EAAE+F,KAAMjF,EAAKuR,YAGxB,IAAa,SAARtM,EACDzD,EAASxB,EAAKuR,gBAEb,IAAIrS,EAAEqD,WAAYvC,EAAKuR,aACxB/P,EAASxB,EAAKuR,YAAavR,OAE1B,IAAa,UAARiF,EAAmB,CAGzB,GAFAuM,EAAWtS,EAAGc,EAAKuR,aACnB/P,EAAStC,EAAEgG,KAAMsM,EAAS3E,SACpBrL,EACF,MAEJ,IAAK,QAAQhB,KAAMgB,GACf,IACIA,EAAStC,EAAE0S,UAAWpQ,GAE1B,MAAMqQ,GAEF,WADA5Q,GAAIb,IAAK,mCAAoCyR,OAMjDrQ,GAASA,EAAOsQ,MAAO,GAAIC,QAAQP,EAASzR,KAAK,gBAAkB,OAG5DyB,EAAQA,EAAO5B,OAAS,IAC3B4B,EAAOwQ,MAMdL,IACD1Q,EAAIgF,UAAY,SAAUJ,EAAQK,GAC9B,GAAIiC,GAAOhD,CAEX,OAAKU,IAA4B,IAAlBrE,EAAO5B,WAClB+R,GAAYnE,MAAOxN,EAAKiB,KAAO4E,EAAQK,SAItCA,GAAOlG,EAAKgD,WAAehD,EAAK6B,WAAW,GAC5CsD,EAAQ3D,EAAQ,GAChBA,EAASA,EAAOyQ,MAAO,GACvBjS,EAAKG,UAAU+R,IAAI,oBAAqB,SAAShK,EAAGlI,GAChD6H,WAAW,WACP7H,EAAKiB,IAAI+G,aAAc,IACzB,MAENhI,EAAKiB,IAAIkB,IAAKgD,IAEPe,GAA0B,IAAnBlG,EAAKgD,UAanB2O,EAAYnE,MAAOxN,EAAKiB,KAAO4E,EAAQK,KAZvCiC,EAAQ3G,EAAO5B,OAAO,EACtBuF,EAAQ3D,EAAQ2G,GAChB3G,EAASA,EAAOyQ,MAAO,EAAG9J,GAC1BnI,EAAKG,UAAU+R,IAAI,oBAAqB,SAAShK,EAAGlI,GAChD6H,WAAW,WACP7H,EAAKgD,UAAY,EACjBhD,EAAKiB,IAAI+G,aAAc,KACzB,MAENhI,EAAKiB,IAAIkB,IAAKgD,GAAO,OAQ5BsM,IACDxQ,EAAIoF,KAAO,WACP,GAAIrG,GAAOL,KAAKK,MAChB,IAAKwB,EAAO5B,QAAUI,EAAKgD,WAAehD,EAAK6B,WAAa,EAAM,CAC9D,GAAIsD,GAAQ3D,EAAQ,EACpBA,GAASA,EAAOyQ,MAAO,GACvBjS,EAAKG,UAAU+R,IAAI,oBAAqB,SAAShK,EAAGlI,GAChDyR,EAAOjE,MAAOxN,EAAKiB,KACnBjB,EAAKG,UAAUwE,YAAY,mBAE/B3E,EAAKG,UAAUgE,SAAS,iBACxBnE,EAAKiB,IAAIkB,IAAKgD,OAGdsM,GAAOjE,MAAOxN,EAAKiB,OAK1ByQ,IACDzQ,EAAIyM,KAAO,WACP,GAAI1N,GAAOL,KAAKK,MAChB,IAAKwB,EAAO5B,QAA6B,IAAnBI,EAAKgD,UAAkB,CACzC,GAAImF,GAAQ3G,EAAO5B,OAAO,EACtBuF,EAAQ3D,EAAQ2G,EACpB3G,GAASA,EAAOyQ,MAAO,EAAG9J,GAC1BnI,EAAKG,UAAU+R,IAAI,oBAAqB,SAAShK,EAAGlI,GAChDA,EAAKgD,UAAY,EACjBhD,EAAKiB,IAAI+G,aAAc,IACvBhI,EAAKG,UAAUwE,YAAY,mBAE/B3E,EAAKG,UAAUgE,SAAS,iBACxBnE,EAAKiB,IAAIkB,IAAKgD,GAAO,OAGrBuM,GAAOlE,MAAOxN,EAAKiB,WAMhCwJ;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChBuR,UAAW,kBAGfjT,EAAEyB,OAAOzB,EAAEK,GAAGC,MAAMyB,KAChB6L,KAAM,SAAUsF,EAAKpS,GACjB,GAAIqS,GAAQ,GAAIN,QAAQ/R,EAAKmS,WAAajT,EAAEK,GAAGC,MAAMoB,SAASuR,UAAW,KACrE9Q,EAAOnC,EAAEmO,UAAW3D,UAExB,OADArI,GAAKkM,QACE6E,EAAI1R,QAAQ2R,EAAO,SAASC,EAAGF,GAClC,GAAIpJ,GAAGuJ,EAAGC,EAAKlB,EAAMmB,EAAQL,EAAIN,MAAM,IACvC,KAAK9I,EAAE,EAAGA,EAAI3H,EAAKzB,OAAQoJ,IAEvB,GADAwJ,EAAMnR,EAAK2H,GACX,CAEA,GAAIyJ,EAAM7S,OAAS,EAEf,IADA0R,EAAOkB,EACFD,EAAE,EAAGA,EAAIE,EAAM7S,OAAQ2S,IACxBC,EAAMlB,EACNA,EAAOA,EAAMmB,EAAMF,KAAQH,MAG/Bd,GAAOkB,EAAIJ,EAGf,IAAIlT,EAAEqD,WAAW+O,GACb,MAAOA,GAAK9D,MAAMgF,EAAKnR,EAC3B,IAAaoD,SAAT6M,GAA+B,OAATA,GAAiBA,GAAQc,EAC/C,MAAOd,GAEf,MAAOc,SAKhB3H","sourceRoot":"http://malsup.github.io/"} \ No newline at end of file diff --git a/public/js/dialog.js b/public/js/dialog.js new file mode 100644 index 0000000..685ec5d --- /dev/null +++ b/public/js/dialog.js @@ -0,0 +1,160 @@ +// +// Requires jquery at a minimum. +// +function Dialog() { +} +Dialog.prototype.constructor = Dialog; +Dialog.prototype.currentId = null; //Currently displayed dialog division ID.// +Dialog.prototype.currentReset = null; //Called after the dialog is closed to reset the dialog for the next opening.// +Dialog.prototype.postCloseHandler = null; //Called after the dialog is closed to perform any post close operation.// +Dialog.prototype.topOffset = 40; //Number of pixels of padding between the dialog top and the window top.// + +// +// Shows the dialog with the given dialogId (the ID of the hidden div containing the dialog content). +// @param dialogId The identifier of the dialog. +// @param reset The optional function called when the dialog is closed (for cleanup). +// +Dialog.prototype.open = function(dialogId, reset) { + //Ensure the dialog isn't already open. Note: We are not currently counting the calls to open it as this is not expected to be a needed feature. This is more of a precaution.// + if(this.currentId != dialogId && dialogId) { + //If a dialog is already showing then hide it without altering the dialog background, otherwise create the dialog background.// + if(this.currentId) { + try { + var oldDialog = $('#' + this.currentId); + + oldDialog.parent().children('.dialogClose').remove(); + oldDialog.unwrap(); + oldDialog.hide(); + + //Call the reset if available.// + if(this.currentReset) { + this.currentReset(); + } + } + catch(err) { + alert(err); + } + } + else { + //Create the background div and display it.// + $('body').prepend("
"); + } + + //Create wrapper divs around the dialog div to display a close box and provide some padding and give it a background.// + var dialog = $('#' + dialogId); + dialog.wrap("
"); + dialog.parent().prepend("
"); + dialog.parent().prepend("
"); + dialog.parent().prepend("
"); + dialog.parent().prepend("
"); + dialog.parent().prepend("
"); + dialog.wrap("
"); // style='background: " + dialog.css('background') + ";' //This would take the background from the parent, but this works differently on different browsers (firefox returns nothing if nothing is set, chrome returns a clear background - which overrides the default css settings in dialog.css). + dialog.parent().prepend("
"); + //Show the dialog.// + dialog.show(); + //Store a reference to the currently displayed dialog & reset function for later use.// + this.currentId = dialogId; + this.currentReset = reset; + //Initialize the resize handler and call it.// + $(window).resize(this.resize).resize(); + } +}; + +// +// Closes the currently open dialog. +// +Dialog.prototype.close = function() { + //Ensure a dialog is open.// + if(this.currentId) { + try { + var dialog = $('#' + this.currentId); + + //Remove the wrappering divs from the dialog.// + dialog.parent().children('.dialogClose').remove(); + dialog.unwrap(); + dialog.parent().children('.dialogShadowTopRight').remove(); + dialog.parent().children('.dialogShadowRight').remove(); + dialog.parent().children('.dialogShadowBottomRight').remove(); + dialog.parent().children('.dialogShadowBottom').remove(); + dialog.parent().children('.dialogShadowBottomLeft').remove(); + dialog.unwrap(); + //Hide the dialog.// + dialog.hide(); + //Delete the background div.// + $('#dialogBackground').remove(); + //Remove the resize handler.// + $(window).unbind('resize', this.resize); + + //Call the reset if available.// + if(this.currentReset) { + try { + this.currentReset(); + } + catch(err) { + alert(err); + } + + this.currentReset = null; + } + + //Call the post close handler if available.// + if(this.postCloseHandler) { + try { + this.postCloseHandler(); + } + catch(err) { + alert(err); + } + + this.postCloseHandler = null; + } + + //Cleanup the dialog references.// + this.currentId = null; + this.currentReset = null; + } + catch(err) { + alert(err); + } + } +}; + +// +// Closes the currently open dialog. +// +Dialog.prototype.resize = function() { + if(dialog.currentId) { + var windowHeight = 0; + var windowWidth = 0; + var dialogContent = $('#' + dialog.currentId); + var dialogWindow = dialogContent.parent().parent(); + var background = $('#dialogBackground'); + + if(navigator.appName.indexOf("Microsoft") != -1) { + var htmlHeight = document.body.parentNode.clientHeight; + + windowHeight = htmlHeight < window.screen.height ? htmlHeight : window.screen.height; + windowWidth = document.body.offsetWidth; + } + else { + windowHeight = window.innerHeight; + windowWidth = window.innerWidth; + } + + var dialogHeight = dialogContent.height() + 62; //10 for the shadow, 20 for the insets, 1 for the border (x2).// + var dialogWidth = dialogContent.width() + 62; + background.css({'top': 0, 'left': 0, 'bottom': windowHeight, 'right': windowWidth, 'height': windowHeight, 'width': windowWidth}); + + dialogWindow.css( + { + 'top': + (dialogHeight > windowHeight ? "0px" : dialogHeight + (dialog.topOffset * 2) < windowHeight ? dialog.topOffset + 'px' : Math.round((windowHeight - dialogHeight) / 2) + "px"), + 'left': + (dialogWidth > windowWidth ? "0px" : Math.round((windowWidth - dialogWidth) / 2) + "px"), + 'height': dialogHeight + 'px', 'width': dialogWidth + 'px' + } + ); + } +}; + +var dialog = new Dialog(); \ No newline at end of file diff --git a/public/js/framework.js b/public/js/framework.js new file mode 100644 index 0000000..1dd04ce --- /dev/null +++ b/public/js/framework.js @@ -0,0 +1,489 @@ +// +// Requires jquery at a minimum. +// + +var framework = new BrainstormFramework(); +var brainstormFramework = framework; + +function BrainstormFramework() { + //The set of open views. The data for each view is an object containing the: + // divId of the view's outer HTML tag; and the + // displayId used to reference the view on the server. + var openViews = []; + //The display ID last used from the client side sequence. The server has its own sequence (negative numbers) that it can issue from.// + var nextDisplayId = 1; + var cleanupStarted = false; + var clientId = 0; + //Set by the application - a function that is called (no parameters) when a call to retrieve a view is not allowed due to the user not being logged in or not having sufficient permissions. + this.disallowedHandler = null; + + // + // The function called every N seconds to cleanup after orphaned views. + // + this.cleanup = function() { + if(openViews) { + for(var index = 0; index < openViews.length; index++) { + var next = openViews[index]; + + if(!$('#frameworkViewContent' + next.id)) { + //Close the view.// + closeViewInternal(next); + //Remove the metadata from the open views array.// + openViews.splice(index--, 1); + } + } + } + + //Re-call cleanup every minute.// + setTimeout("brainstormFramework.cleanup()", 60000); + }; + + // + // Loads the html at the given URL into the container. The container will be emptied of all content prior to loading. Any scripts inside .. tags will be removed and executed as soon as the html is loaded. + // @param containerRef The jquery reference to the container for the html. This can be for example 'body' to reference the body node, or '#body' to reference the node with the ID of 'body'. + // @param url The URL of the html to be loaded. + // + this.append = function(containerRef, url) { + var _this = this; + var container = containerRef ? $(containerRef) : null; + + $.ajax({url: url, dataType: 'html', async: false, success: function(data) { + data = _this.extractViewData(data); + + if(data.view) { + if(container) { + container.append(data.view); + } + else { + htmlHandler(data.view); + } + } + + if(data.script && data.script.length > 0) { + try { + eval(data.script); + } catch(err) { + alert(err); + } + } + }}); + } + + // + // Loads the html at the given URL into the container. The container will be emptied of all content prior to loading. Any scripts inside .. tags will be removed and executed as soon as the html is loaded. + // @param containerRef The jquery reference to the container for the html. This can be for example 'body' to reference the body node, or '#body' to reference the node with the ID of 'body'. + // @param url The URL of the html to be loaded. + // @param htmlHandler The optional handler to be called to place the html. This may be specified in place of the container ID. The handler will be passed the HTML for the view as a string. + // + this.load = function(containerRef, url, htmlHandler) { + var _this = this; + var container = containerRef ? $(containerRef) : null; + + if(container) { + container.empty(); + } + + $.ajax({url: url, dataType: 'html', async: false, success: function(data) { + data = _this.extractViewData(data); + + if(data.view) { + if(container) { + container.html(data.view); + } + else { + htmlHandler(data.view); + } + } + + if(data.script && data.script.length > 0) { + try { + eval(data.script); + } catch(err) { + alert(err); + } + } + }}); + } + + // + // Opens a view given the container for the view and the view controller's class name. + // @param displayContainerId The ID of the container that the view will be appended to. + // @param viewController The java class name for the view controller. + // + this.openView = function(displayContainerId, viewController) { + var displayId = nextDisplayId++; + var divId = "frameworkViewContent" + displayId; + var success = false; + var _this = this; + var displayContainer = $('#' + displayContainerId); + + $.ajax({url: "/FrameworkController.java?Request=OpenView&ClientId=" + clientId + "&Controller=" + viewController + "&DisplayId=" + displayId, dataType: 'json', async: false, success: function(data) { + if(data) { + try { + if(data.result == 'client-switch') { + + //TODO: Send the client stored view controller metadata to the server, then re-run this call. + + //For now we will simply refresh the display, causing us to rebuild everything and get a new client id.// + location.reload(); + } + else if(data.result == "success") { + var viewData = _this.extractViewData(data.content); + + //Setup the container for the view.// + displayContainer.append("
" + "
"); + //Place the contents of the view.// + $('#' + divId).append(viewData.view); + //TODO: Store any cleanup script? + + openViews[openViews.length] = {'divId': divId, 'displayId': displayId}; + + if(!brainstormFramework.cleanupStarted) { + brainstormFramework.cleanupStarted = true; + brainstormFramework.cleanup(); + } + + success = true; + + //Run the script if one came with the view.// + if(viewData.script.length > 0) { + try { + eval(viewData.script); + } catch(err) { + alert(err); + } + } + } + else if(data.result == "disallowed") { + if(_this.disallowedHandler) _this.disallowedHandler(); + } + else { + //TODO: Properly handle this. + alert(data.result); + } + } catch(err) { + alert(err); + } + } + else { + //Error: View creation failed. + } + }}); + + return success ? displayId : 0; + }; + + // + // Refreshes the given view by reloading the view's HTML. + // @param frameworkContainer The DIV jquery object that encloses the view's contents. This can be obtained by calling parent() on the jquery object for any root element in the view being refreshed. Note that this is the FRAMEWORK's container which is in turn placed in the container supplied when opening the view. + // + this.refreshView = function(frameworkContainer) { + var frameworkContainerId = frameworkContainer.attr("id"); + var _this = this; + + frameworkContainer.empty(); + + for(var index = 0; index < openViews.length; index++) { + var next = openViews[index]; + + if(next.divId == frameworkContainerId) { + $.ajax({url: "/FrameworkController.java?Request=RefreshView&ClientId=" + clientId + "&DisplayId=" + next.displayId, dataType: 'json', async: false, success: function(data) { + if(data) { + if(data.result == 'client-switch') { + + //TODO: Send the client stored view controller metadata to the server, then re-run this call. + + //For now we will simply refresh the display, causing us to rebuild everything and get a new client id.// + location.reload(); + } + else if(data.result == "success") { + var viewData = _this.extractViewData(data.content); + + frameworkContainer.append(viewData.view); + + //Run the script if one came with the view.// + if(viewData.script.length > 0) { + try { + eval(viewData.script); + } catch(err) { + alert(err); + } + } + } + } + }}); + break; + } + } + }; + + // + // Gets the URL to call a view for use within a form. Sometimes a form submittal requires a URL string and can't call the BrainstormFramework.callView() method. + // @param displayId The ID number of the view controller (not the view's outer div's id attribute). + // @param query The function to be called on the view controller. + // @param parameters The parameters to add to the call. The parameters should be in URL format with & characters separating parameters. Example: "param1=abc¶m2=xyz". + // + this.getCallViewUrl = function(displayId, query, parameters) { + return "/FrameworkController.java?Request=CallView&ClientId=" + clientId + "&DisplayId=" + displayId + "&Query=" + query + (parameters ? "&" + parameters: ""); + } + + // + // Calls the view controller. If the view controller opens another view, it will use a view id from the server (different range) and return {view: ..., viewId: xx}. + // @param displayId The ID number of the view controller (not the view's outer div's id attribute). + // @param query The function to be called on the view controller. + // @param parameters The parameters to add to the call. The parameters should be in URL format with & characters separating parameters. Example: "param1=abc¶m2=xyz". + // @param isAsync Whether the call should be asynchronous. + // @param resultViewContainer The jquery view container where the view resulting from this call will be placed. If this is not specified and a view is returned then a dialog will be created. + // @param resultHandler The function called passing the result if specified. Otherwise the result is returned. + // @return The result if one is generated by the call, otherwise the dialog object if a view is the result, otherwise null. + // + this.callView = function(displayId, query, parameters, isAsync, resultViewContainer, resultHandler) { + var _this = this; + var result; + + $.ajax({url: "/FrameworkController.java?Request=CallView&ClientId=" + clientId + "&DisplayId=" + displayId + "&Query=" + query + (parameters ? "&" + parameters: ""), dataType: 'json', cache: false, async: false, success: function(data, statusText, jqXHR) { + if(data) { + if(data.error) { + alert(data.error); + } + + if(data.result == 'client-switch') { + + //TODO: Send the client stored view controller metadata to the server, then re-run this call. + + //For now we will simply refresh the display, causing us to rebuild everything and get a new client id.// + location.reload(); + } + else { + try { + if(data.view) { + var viewData = _this.extractViewData(data.view); + + if(resultViewContainer) { + var newDisplayId = data.displayId; + var divId = "frameworkViewContent_" + (newDisplayId < 0 ? '_' + Math.abs(newDisplayId) : newDisplayId); + + //Save the view data.// + openViews[openViews.length] = {'divId': divId, 'displayId': newDisplayId}; + + if(!brainstormFramework.cleanupStarted) { + brainstormFramework.cleanupStarted = true; + brainstormFramework.cleanup(); + } + + //Create the container for the view.// + resultViewContainer.append("
"); + + //Append the view HTML to the container.// + $('#' + divId).append(viewData.view); + //TODO: Setup cleanup code. + + //Store the result as the div id.// + result = divId; + + //Run the script if one came with the view.// + if(viewData.script.length > 0) { + try { + eval(viewData.script); + } catch(err) { + alert(err); + } + } + } + else { + var newDisplayId = data.displayId; + var divId = "frameworkViewContent_" + Math.abs(newDisplayId); + var metadata = viewData.metadata ? $(viewData.metadata).find('metadata') : undefined; + + //Save the view data.// + openViews[openViews.length] = {'divId': divId, 'displayId': newDisplayId}; + + if(!brainstormFramework.cleanupStarted) { + brainstormFramework.cleanupStarted = true; + brainstormFramework.cleanup(); + } + + //Create the container for the dialog.// + $("body").append("
"); + + //Populate the dialog contents.// + $('#' + divId).append(viewData.view); + //Open the dialog and cleanup when it closes.// + dialog.open(divId, function() { + brainstormFramework.closeView(divId); + $('#' + divId).remove(); + }); + //result = divId; + result = dialog; + + //Run the script if one came with the view.// + if(viewData.script && viewData.script.length > 0) { + try { + eval(viewData.script); + } catch(err) { + alert(err); + } + } + } + } + + if(data.result) { + result = data.result; + } + + if(resultHandler) { + resultHandler(result); + } + } catch(err) { + alert(err); + } + } + } + else { + //Error: Call failed. + } + }, error: function(jqXHR, textStatus, errorThrown) { + alert("Failed"); + }}); + + return result; + }; + + this.extractViewData = function(viewData) { + var data = {script: "", metadata: undefined, view: ""}; + var start; + + //Remove the escaping that allowed it to be sent as part of a JSON response.// + viewData = this.unescape(viewData); + + //Strip out any run-once scripts to be run after loading the html.// + while(viewData.indexOf("") != -1) { + //extract the script.// + data.script += viewData.substring(viewData.indexOf("") + 9, viewData.indexOf("")).replace("", ""); + //Remove the script from the view data.// + viewData = viewData.substring(0, viewData.indexOf("")) + viewData.substring(viewData.indexOf("") + 10); + } + + //Detect and remove any metadata.// + if((start = viewData.indexOf('')) != -1) { + var end = viewData.indexOf('', start + 10); + var metadata = viewData.substring(start, end + 11); + + //Remove the metadata from the document.// + viewData = viewData.substring(0, start) + viewData.substring(end + 11); + //Parse the metadata XML.// + data.metadata = $.parseXML(metadata); + } + else if((start = viewData.indexOf('', start + 10); + var metadata = viewData.substring(start, end + 2); + + //Remove the metadata from the document.// + viewData = viewData.substring(0, start) + viewData.substring(end + 2); + //Parse the metadata XML.// + data.metadata = $.parseXML(metadata); + } + else if((start = viewData.indexOf('')) != -1) { + viewData = viewData.substring(0, start) + viewData.substring(start + 11); + } + + //Strip out any comments.// + while(viewData.indexOf("") + 3); + } + + data.view = viewData; + + return data; + } + + // + // Closes the view given the view's div ID (the div is created to wrapper the view content and is the only child of the container passed when creating the view, the div's ID is returned by the call to openView(..)). + // @param id The view's div's ID, or display ID. + // + this.closeView = function(id) { + for(var index = 0; index < openViews.length; index++) { + var next = openViews[index]; + + //Allow the passed id to be either the div ID or the display ID.// + if(next.divId == id || next.displayId == id) { + //Remove the metadata from the open views array.// + openViews.splice(index, 1); + //Close the actual view.// + this.closeViewInternal(next); + break; + } + } + }; + + // + // Closes the view given the view metadata. The caller is expected to remove the metadata from the view set. + // @param metadata The metadata for the view being removed. + // + this.closeViewInternal = function(metadata) { + //Remove the view HTML from the DOM.// + $('#' + metadata.divId).remove(); + + //Notify the server that the view has closed.// + $.ajax({url: "/FrameworkController.java?Request=CloseView&ClientId=" + clientId + "&DisplayId=" + metadata.displayId, dataType: 'json', async: true, success: function(data) { + if(data) { + if(data.success == "true") { + //Do nothing? + } + else if(data.result == 'client-switch') { + //Do nothing for now. Ideally this call failing can be ignored since this close view code should remove the server view controller metadata stored on the client which will be used at some future time to restore the client's session on the server.// + } + else { + //TODO: + } + } + else { + //Error: View removal failed. + } + }}); + }; + + // + // Removes escape characters from text. + // @param text The text whose escape characters are to be removed. + // + this.unescape = function(text) { + var result = text.replace(/\x7C1/g, "\\").replace(/\x7C2/g, "'").replace(/\x7C3/g, "\"").replace(/\x7C4/g, "\x0D").replace(/\x7C5/g, "\x09").replace(/\x7C7/g, "&").replace(/\x7C8/g, "<").replace(/\x7C9/g, ">").replace(/\x7C6/g, "\x7C"); + return result; + }; + + // + // Adds escape characters to text. + // @param text The text whose escape characters are to be added. If this is undefined then the result will be an empty string. + // + this.escape = function(text) { + var result; + + if(text) { + result = text.replace(/\x0A\x0D/g, "\n").replace(/\x7C/g, "\x7C6").replace(/\\/g, "\x7C1").replace(/\'/g, "\x7C2").replace(/\"/g, "\x7C3").replace(/\n/g, "\x7C4").replace(/\x09/g, "\x7C5").replace(/%/g, "\x7C6").replace(/&/g, "\x7C7").replace(/\x3C/g, "\x7C8").replace(/\x3E/g, "\x7C9"); + } + else { + result = ""; + } + + return result; + }; + + + //Get this view's client id. Each window/tab or refresh requires a new client ID from the server so it can track which set of displays belongs to which view.// + $.ajax({url: "/FrameworkController.java?Request=CreateId", dataType: 'json', async: false, success: function(data) { + if(data) { + clientId = data.result; + } + }}); + $(window).onunload = function() { + while(openViews.length > 0) { + var next = openViews[openViews.length - 1]; + + closeViewInternal(next); + openViews.splice(openViews.length - 1, 1); + } + }; + this.cleanup(); +} \ No newline at end of file diff --git a/public/js/jquery-1.11.1.min.js b/public/js/jquery-1.11.1.min.js new file mode 100644 index 0000000..ab28a24 --- /dev/null +++ b/public/js/jquery-1.11.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("