EVOLUTION-MANAGER
Edit File: profiling.html
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="generator" content="pandoc" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="author" content="Thomas Lin Pedersen" /> <title>Profiling Performance</title> <script>(function() { // If window.HTMLWidgets is already defined, then use it; otherwise create a // new object. This allows preceding code to set options that affect the // initialization process (though none currently exist). window.HTMLWidgets = window.HTMLWidgets || {}; // See if we're running in a viewer pane. If not, we're in a web browser. var viewerMode = window.HTMLWidgets.viewerMode = /\bviewer_pane=1\b/.test(window.location); // See if we're running in Shiny mode. If not, it's a static document. // Note that static widgets can appear in both Shiny and static modes, but // obviously, Shiny widgets can only appear in Shiny apps/documents. var shinyMode = window.HTMLWidgets.shinyMode = typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; // We can't count on jQuery being available, so we implement our own // version if necessary. function querySelectorAll(scope, selector) { if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { return scope.find(selector); } if (scope.querySelectorAll) { return scope.querySelectorAll(selector); } } function asArray(value) { if (value === null) return []; if ($.isArray(value)) return value; return [value]; } // Implement jQuery's extend function extend(target /*, ... */) { if (arguments.length == 1) { return target; } for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var prop in source) { if (source.hasOwnProperty(prop)) { target[prop] = source[prop]; } } } return target; } // IE8 doesn't support Array.forEach. function forEach(values, callback, thisArg) { if (values.forEach) { values.forEach(callback, thisArg); } else { for (var i = 0; i < values.length; i++) { callback.call(thisArg, values[i], i, values); } } } // Replaces the specified method with the return value of funcSource. // // Note that funcSource should not BE the new method, it should be a function // that RETURNS the new method. funcSource receives a single argument that is // the overridden method, it can be called from the new method. The overridden // method can be called like a regular function, it has the target permanently // bound to it so "this" will work correctly. function overrideMethod(target, methodName, funcSource) { var superFunc = target[methodName] || function() {}; var superFuncBound = function() { return superFunc.apply(target, arguments); }; target[methodName] = funcSource(superFuncBound); } // Add a method to delegator that, when invoked, calls // delegatee.methodName. If there is no such method on // the delegatee, but there was one on delegator before // delegateMethod was called, then the original version // is invoked instead. // For example: // // var a = { // method1: function() { console.log('a1'); } // method2: function() { console.log('a2'); } // }; // var b = { // method1: function() { console.log('b1'); } // }; // delegateMethod(a, b, "method1"); // delegateMethod(a, b, "method2"); // a.method1(); // a.method2(); // // The output would be "b1", "a2". function delegateMethod(delegator, delegatee, methodName) { var inherited = delegator[methodName]; delegator[methodName] = function() { var target = delegatee; var method = delegatee[methodName]; // The method doesn't exist on the delegatee. Instead, // call the method on the delegator, if it exists. if (!method) { target = delegator; method = inherited; } if (method) { return method.apply(target, arguments); } }; } // Implement a vague facsimilie of jQuery's data method function elementData(el, name, value) { if (arguments.length == 2) { return el["htmlwidget_data_" + name]; } else if (arguments.length == 3) { el["htmlwidget_data_" + name] = value; return el; } else { throw new Error("Wrong number of arguments for elementData: " + arguments.length); } } // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex function escapeRegExp(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); } function hasClass(el, className) { var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); return re.test(el.className); } // elements - array (or array-like object) of HTML elements // className - class name to test for // include - if true, only return elements with given className; // if false, only return elements *without* given className function filterByClass(elements, className, include) { var results = []; for (var i = 0; i < elements.length; i++) { if (hasClass(elements[i], className) == include) results.push(elements[i]); } return results; } function on(obj, eventName, func) { if (obj.addEventListener) { obj.addEventListener(eventName, func, false); } else if (obj.attachEvent) { obj.attachEvent(eventName, func); } } function off(obj, eventName, func) { if (obj.removeEventListener) obj.removeEventListener(eventName, func, false); else if (obj.detachEvent) { obj.detachEvent(eventName, func); } } // Translate array of values to top/right/bottom/left, as usual with // the "padding" CSS property // https://developer.mozilla.org/en-US/docs/Web/CSS/padding function unpackPadding(value) { if (typeof(value) === "number") value = [value]; if (value.length === 1) { return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; } if (value.length === 2) { return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; } if (value.length === 3) { return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; } if (value.length === 4) { return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; } } // Convert an unpacked padding object to a CSS value function paddingToCss(paddingObj) { return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; } // Makes a number suitable for CSS function px(x) { if (typeof(x) === "number") return x + "px"; else return x; } // Retrieves runtime widget sizing information for an element. // The return value is either null, or an object with fill, padding, // defaultWidth, defaultHeight fields. function sizingPolicy(el) { var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); if (!sizingEl) return null; var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); if (viewerMode) { return sp.viewer; } else { return sp.browser; } } // @param tasks Array of strings (or falsy value, in which case no-op). // Each element must be a valid JavaScript expression that yields a // function. Or, can be an array of objects with "code" and "data" // properties; in this case, the "code" property should be a string // of JS that's an expr that yields a function, and "data" should be // an object that will be added as an additional argument when that // function is called. // @param target The object that will be "this" for each function // execution. // @param args Array of arguments to be passed to the functions. (The // same arguments will be passed to all functions.) function evalAndRun(tasks, target, args) { if (tasks) { forEach(tasks, function(task) { var theseArgs = args; if (typeof(task) === "object") { theseArgs = theseArgs.concat([task.data]); task = task.code; } var taskFunc = eval("(" + task + ")"); if (typeof(taskFunc) !== "function") { throw new Error("Task must be a function! Source:\n" + task); } taskFunc.apply(target, theseArgs); }); } } function initSizing(el) { var sizing = sizingPolicy(el); if (!sizing) return; var cel = document.getElementById("htmlwidget_container"); if (!cel) return; if (typeof(sizing.padding) !== "undefined") { document.body.style.margin = "0"; document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); } if (sizing.fill) { document.body.style.overflow = "hidden"; document.body.style.width = "100%"; document.body.style.height = "100%"; document.documentElement.style.width = "100%"; document.documentElement.style.height = "100%"; if (cel) { cel.style.position = "absolute"; var pad = unpackPadding(sizing.padding); cel.style.top = pad.top + "px"; cel.style.right = pad.right + "px"; cel.style.bottom = pad.bottom + "px"; cel.style.left = pad.left + "px"; el.style.width = "100%"; el.style.height = "100%"; } return { getWidth: function() { return cel.offsetWidth; }, getHeight: function() { return cel.offsetHeight; } }; } else { el.style.width = px(sizing.width); el.style.height = px(sizing.height); return { getWidth: function() { return el.offsetWidth; }, getHeight: function() { return el.offsetHeight; } }; } } // Default implementations for methods var defaults = { find: function(scope) { return querySelectorAll(scope, "." + this.name); }, renderError: function(el, err) { var $el = $(el); this.clearError(el); // Add all these error classes, as Shiny does var errClass = "shiny-output-error"; if (err.type !== null) { // use the classes of the error condition as CSS class names errClass = errClass + " " + $.map(asArray(err.type), function(type) { return errClass + "-" + type; }).join(" "); } errClass = errClass + " htmlwidgets-error"; // Is el inline or block? If inline or inline-block, just display:none it // and add an inline error. var display = $el.css("display"); $el.data("restore-display-mode", display); if (display === "inline" || display === "inline-block") { $el.hide(); if (err.message !== "") { var errorSpan = $("<span>").addClass(errClass); errorSpan.text(err.message); $el.after(errorSpan); } } else if (display === "block") { // If block, add an error just after the el, set visibility:none on the // el, and position the error to be on top of the el. // Mark it with a unique ID and CSS class so we can remove it later. $el.css("visibility", "hidden"); if (err.message !== "") { var errorDiv = $("<div>").addClass(errClass).css("position", "absolute") .css("top", el.offsetTop) .css("left", el.offsetLeft) // setting width can push out the page size, forcing otherwise // unnecessary scrollbars to appear and making it impossible for // the element to shrink; so use max-width instead .css("maxWidth", el.offsetWidth) .css("height", el.offsetHeight); errorDiv.text(err.message); $el.after(errorDiv); // Really dumb way to keep the size/position of the error in sync with // the parent element as the window is resized or whatever. var intId = setInterval(function() { if (!errorDiv[0].parentElement) { clearInterval(intId); return; } errorDiv .css("top", el.offsetTop) .css("left", el.offsetLeft) .css("maxWidth", el.offsetWidth) .css("height", el.offsetHeight); }, 500); } } }, clearError: function(el) { var $el = $(el); var display = $el.data("restore-display-mode"); $el.data("restore-display-mode", null); if (display === "inline" || display === "inline-block") { if (display) $el.css("display", display); $(el.nextSibling).filter(".htmlwidgets-error").remove(); } else if (display === "block"){ $el.css("visibility", "inherit"); $(el.nextSibling).filter(".htmlwidgets-error").remove(); } }, sizing: {} }; // Called by widget bindings to register a new type of widget. The definition // object can contain the following properties: // - name (required) - A string indicating the binding name, which will be // used by default as the CSS classname to look for. // - initialize (optional) - A function(el) that will be called once per // widget element; if a value is returned, it will be passed as the third // value to renderValue. // - renderValue (required) - A function(el, data, initValue) that will be // called with data. Static contexts will cause this to be called once per // element; Shiny apps will cause this to be called multiple times per // element, as the data changes. window.HTMLWidgets.widget = function(definition) { if (!definition.name) { throw new Error("Widget must have a name"); } if (!definition.type) { throw new Error("Widget must have a type"); } // Currently we only support output widgets if (definition.type !== "output") { throw new Error("Unrecognized widget type '" + definition.type + "'"); } // TODO: Verify that .name is a valid CSS classname // Support new-style instance-bound definitions. Old-style class-bound // definitions have one widget "object" per widget per type/class of // widget; the renderValue and resize methods on such widget objects // take el and instance arguments, because the widget object can't // store them. New-style instance-bound definitions have one widget // object per widget instance; the definition that's passed in doesn't // provide renderValue or resize methods at all, just the single method // factory(el, width, height) // which returns an object that has renderValue(x) and resize(w, h). // This enables a far more natural programming style for the widget // author, who can store per-instance state using either OO-style // instance fields or functional-style closure variables (I guess this // is in contrast to what can only be called C-style pseudo-OO which is // what we required before). if (definition.factory) { definition = createLegacyDefinitionAdapter(definition); } if (!definition.renderValue) { throw new Error("Widget must have a renderValue function"); } // For static rendering (non-Shiny), use a simple widget registration // scheme. We also use this scheme for Shiny apps/documents that also // contain static widgets. window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; // Merge defaults into the definition; don't mutate the original definition. var staticBinding = extend({}, defaults, definition); overrideMethod(staticBinding, "find", function(superfunc) { return function(scope) { var results = superfunc(scope); // Filter out Shiny outputs, we only want the static kind return filterByClass(results, "html-widget-output", false); }; }); window.HTMLWidgets.widgets.push(staticBinding); if (shinyMode) { // Shiny is running. Register the definition with an output binding. // The definition itself will not be the output binding, instead // we will make an output binding object that delegates to the // definition. This is because we foolishly used the same method // name (renderValue) for htmlwidgets definition and Shiny bindings // but they actually have quite different semantics (the Shiny // bindings receive data that includes lots of metadata that it // strips off before calling htmlwidgets renderValue). We can't // just ignore the difference because in some widgets it's helpful // to call this.renderValue() from inside of resize(), and if // we're not delegating, then that call will go to the Shiny // version instead of the htmlwidgets version. // Merge defaults with definition, without mutating either. var bindingDef = extend({}, defaults, definition); // This object will be our actual Shiny binding. var shinyBinding = new Shiny.OutputBinding(); // With a few exceptions, we'll want to simply use the bindingDef's // version of methods if they are available, otherwise fall back to // Shiny's defaults. NOTE: If Shiny's output bindings gain additional // methods in the future, and we want them to be overrideable by // HTMLWidget binding definitions, then we'll need to add them to this // list. delegateMethod(shinyBinding, bindingDef, "getId"); delegateMethod(shinyBinding, bindingDef, "onValueChange"); delegateMethod(shinyBinding, bindingDef, "onValueError"); delegateMethod(shinyBinding, bindingDef, "renderError"); delegateMethod(shinyBinding, bindingDef, "clearError"); delegateMethod(shinyBinding, bindingDef, "showProgress"); // The find, renderValue, and resize are handled differently, because we // want to actually decorate the behavior of the bindingDef methods. shinyBinding.find = function(scope) { var results = bindingDef.find(scope); // Only return elements that are Shiny outputs, not static ones var dynamicResults = results.filter(".html-widget-output"); // It's possible that whatever caused Shiny to think there might be // new dynamic outputs, also caused there to be new static outputs. // Since there might be lots of different htmlwidgets bindings, we // schedule execution for later--no need to staticRender multiple // times. if (results.length !== dynamicResults.length) scheduleStaticRender(); return dynamicResults; }; // Wrap renderValue to handle initialization, which unfortunately isn't // supported natively by Shiny at the time of this writing. shinyBinding.renderValue = function(el, data) { Shiny.renderDependencies(data.deps); // Resolve strings marked as javascript literals to objects if (!(data.evals instanceof Array)) data.evals = [data.evals]; for (var i = 0; data.evals && i < data.evals.length; i++) { window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); } if (!bindingDef.renderOnNullValue) { if (data.x === null) { el.style.visibility = "hidden"; return; } else { el.style.visibility = "inherit"; } } if (!elementData(el, "initialized")) { initSizing(el); elementData(el, "initialized", true); if (bindingDef.initialize) { var result = bindingDef.initialize(el, el.offsetWidth, el.offsetHeight); elementData(el, "init_result", result); } } bindingDef.renderValue(el, data.x, elementData(el, "init_result")); evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); }; // Only override resize if bindingDef implements it if (bindingDef.resize) { shinyBinding.resize = function(el, width, height) { // Shiny can call resize before initialize/renderValue have been // called, which doesn't make sense for widgets. if (elementData(el, "initialized")) { bindingDef.resize(el, width, height, elementData(el, "init_result")); } }; } Shiny.outputBindings.register(shinyBinding, bindingDef.name); } }; var scheduleStaticRenderTimerId = null; function scheduleStaticRender() { if (!scheduleStaticRenderTimerId) { scheduleStaticRenderTimerId = setTimeout(function() { scheduleStaticRenderTimerId = null; window.HTMLWidgets.staticRender(); }, 1); } } // Render static widgets after the document finishes loading // Statically render all elements that are of this widget's class window.HTMLWidgets.staticRender = function() { var bindings = window.HTMLWidgets.widgets || []; forEach(bindings, function(binding) { var matches = binding.find(document.documentElement); forEach(matches, function(el) { var sizeObj = initSizing(el, binding); if (hasClass(el, "html-widget-static-bound")) return; el.className = el.className + " html-widget-static-bound"; var initResult; if (binding.initialize) { initResult = binding.initialize(el, sizeObj ? sizeObj.getWidth() : el.offsetWidth, sizeObj ? sizeObj.getHeight() : el.offsetHeight ); elementData(el, "init_result", initResult); } if (binding.resize) { var lastSize = { w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, h: sizeObj ? sizeObj.getHeight() : el.offsetHeight }; var resizeHandler = function(e) { var size = { w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, h: sizeObj ? sizeObj.getHeight() : el.offsetHeight }; if (size.w === 0 && size.h === 0) return; if (size.w === lastSize.w && size.h === lastSize.h) return; lastSize = size; binding.resize(el, size.w, size.h, initResult); }; on(window, "resize", resizeHandler); // This is needed for cases where we're running in a Shiny // app, but the widget itself is not a Shiny output, but // rather a simple static widget. One example of this is // an rmarkdown document that has runtime:shiny and widget // that isn't in a render function. Shiny only knows to // call resize handlers for Shiny outputs, not for static // widgets, so we do it ourselves. if (window.jQuery) { window.jQuery(document).on( "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", resizeHandler ); window.jQuery(document).on( "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", resizeHandler ); } // This is needed for the specific case of ioslides, which // flips slides between display:none and display:block. // Ideally we would not have to have ioslide-specific code // here, but rather have ioslides raise a generic event, // but the rmarkdown package just went to CRAN so the // window to getting that fixed may be long. if (window.addEventListener) { // It's OK to limit this to window.addEventListener // browsers because ioslides itself only supports // such browsers. on(document, "slideenter", resizeHandler); on(document, "slideleave", resizeHandler); } } var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); if (scriptData) { var data = JSON.parse(scriptData.textContent || scriptData.text); // Resolve strings marked as javascript literals to objects if (!(data.evals instanceof Array)) data.evals = [data.evals]; for (var k = 0; data.evals && k < data.evals.length; k++) { window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); } binding.renderValue(el, data.x, initResult); evalAndRun(data.jsHooks.render, initResult, [el, data.x]); } }); }); invokePostRenderHandlers(); } // Wait until after the document has loaded to render the widgets. if (document.addEventListener) { document.addEventListener("DOMContentLoaded", function() { document.removeEventListener("DOMContentLoaded", arguments.callee, false); window.HTMLWidgets.staticRender(); }, false); } else if (document.attachEvent) { document.attachEvent("onreadystatechange", function() { if (document.readyState === "complete") { document.detachEvent("onreadystatechange", arguments.callee); window.HTMLWidgets.staticRender(); } }); } window.HTMLWidgets.getAttachmentUrl = function(depname, key) { // If no key, default to the first item if (typeof(key) === "undefined") key = 1; var link = document.getElementById(depname + "-" + key + "-attachment"); if (!link) { throw new Error("Attachment " + depname + "/" + key + " not found in document"); } return link.getAttribute("href"); }; window.HTMLWidgets.dataframeToD3 = function(df) { var names = []; var length; for (var name in df) { if (df.hasOwnProperty(name)) names.push(name); if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { throw new Error("All fields must be arrays"); } else if (typeof(length) !== "undefined" && length !== df[name].length) { throw new Error("All fields must be arrays of the same length"); } length = df[name].length; } var results = []; var item; for (var row = 0; row < length; row++) { item = {}; for (var col = 0; col < names.length; col++) { item[names[col]] = df[names[col]][row]; } results.push(item); } return results; }; window.HTMLWidgets.transposeArray2D = function(array) { if (array.length === 0) return array; var newArray = array[0].map(function(col, i) { return array.map(function(row) { return row[i] }) }); return newArray; }; // Split value at splitChar, but allow splitChar to be escaped // using escapeChar. Any other characters escaped by escapeChar // will be included as usual (including escapeChar itself). function splitWithEscape(value, splitChar, escapeChar) { var results = []; var escapeMode = false; var currentResult = ""; for (var pos = 0; pos < value.length; pos++) { if (!escapeMode) { if (value[pos] === splitChar) { results.push(currentResult); currentResult = ""; } else if (value[pos] === escapeChar) { escapeMode = true; } else { currentResult += value[pos]; } } else { currentResult += value[pos]; escapeMode = false; } } if (currentResult !== "") { results.push(currentResult); } return results; } // Function authored by Yihui/JJ Allaire window.HTMLWidgets.evaluateStringMember = function(o, member) { var parts = splitWithEscape(member, '.', '\\'); for (var i = 0, l = parts.length; i < l; i++) { var part = parts[i]; // part may be a character or 'numeric' member name if (o !== null && typeof o === "object" && part in o) { if (i == (l - 1)) { // if we are at the end of the line then evalulate if (typeof o[part] === "string") o[part] = eval("(" + o[part] + ")"); } else { // otherwise continue to next embedded object o = o[part]; } } } }; // Retrieve the HTMLWidget instance (i.e. the return value of an // HTMLWidget binding's initialize() or factory() function) // associated with an element, or null if none. window.HTMLWidgets.getInstance = function(el) { return elementData(el, "init_result"); }; // Finds the first element in the scope that matches the selector, // and returns the HTMLWidget instance (i.e. the return value of // an HTMLWidget binding's initialize() or factory() function) // associated with that element, if any. If no element matches the // selector, or the first matching element has no HTMLWidget // instance associated with it, then null is returned. // // The scope argument is optional, and defaults to window.document. window.HTMLWidgets.find = function(scope, selector) { if (arguments.length == 1) { selector = scope; scope = document; } var el = scope.querySelector(selector); if (el === null) { return null; } else { return window.HTMLWidgets.getInstance(el); } }; // Finds all elements in the scope that match the selector, and // returns the HTMLWidget instances (i.e. the return values of // an HTMLWidget binding's initialize() or factory() function) // associated with the elements, in an array. If elements that // match the selector don't have an associated HTMLWidget // instance, the returned array will contain nulls. // // The scope argument is optional, and defaults to window.document. window.HTMLWidgets.findAll = function(scope, selector) { if (arguments.length == 1) { selector = scope; scope = document; } var nodes = scope.querySelectorAll(selector); var results = []; for (var i = 0; i < nodes.length; i++) { results.push(window.HTMLWidgets.getInstance(nodes[i])); } return results; }; var postRenderHandlers = []; function invokePostRenderHandlers() { while (postRenderHandlers.length) { var handler = postRenderHandlers.shift(); if (handler) { handler(); } } } // Register the given callback function to be invoked after the // next time static widgets are rendered. window.HTMLWidgets.addPostRenderHandler = function(callback) { postRenderHandlers.push(callback); }; // Takes a new-style instance-bound definition, and returns an // old-style class-bound definition. This saves us from having // to rewrite all the logic in this file to accomodate both // types of definitions. function createLegacyDefinitionAdapter(defn) { var result = { name: defn.name, type: defn.type, initialize: function(el, width, height) { return defn.factory(el, width, height); }, renderValue: function(el, x, instance) { return instance.renderValue(x); }, resize: function(el, width, height, instance) { return instance.resize(width, height); } }; if (defn.find) result.find = defn.find; if (defn.renderError) result.renderError = defn.renderError; if (defn.clearError) result.clearError = defn.clearError; return result; } })(); </script> <script>/*! jQuery v1.12.4 | (c) jQuery Foundation | 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=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.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()},push:g,sort:c.sort,splice:c.splice},n.extend=n.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||n.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&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.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,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=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)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(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 oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(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"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.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===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!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 fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.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},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.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=fa.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=fa.selectors={cacheLength:50,createPseudo:ha,match:W,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(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===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]||fa.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]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.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(ba,ca).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("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.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.replace(P," ")+" ").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,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(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),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).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 Y.test(a.nodeName)},input:function(a){return X.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:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(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,k=[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(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(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 ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(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 va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(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?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(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 va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.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(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.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(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(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&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.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=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; }return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.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()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.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=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.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 n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;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},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.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?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!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&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._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++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.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)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.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 n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{ marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({ padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n}); </script> <script>!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function r(n){return null===n?0/0:+n}function u(n){return!isNaN(n)}function i(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function c(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function l(){this._=Object.create(null)}function s(n){return(n+="")===pa||n[0]===va?va+n:n}function f(n){return(n+="")[0]===va?n.slice(1):n}function h(n){return s(n)in this._}function g(n){return(n=s(n))in this._&&delete this._[n]}function p(){var n=[];for(var t in this._)n.push(f(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function m(){this._=Object.create(null)}function y(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=da.length;r>e;++e){var u=da[e]+t;if(u in n)return u}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new l;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function S(){ta.event.preventDefault()}function k(){for(var n,t=ta.event;n=t.sourceEvent;)t=n;return t}function E(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=ta.event;u.target=n,ta.event=u,t[u.type].apply(e,r)}finally{ta.event=i}}},t}function A(n){return ya(n,_a),n}function N(n){return"function"==typeof n?n:function(){return Ma(n,this)}}function C(n){return"function"==typeof n?n:function(){return xa(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ta.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function q(n){return n.trim().replace(/\s+/g," ")}function L(n){return new RegExp("(?:^|\\s+)"+ta.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=T(n).map(D);var u=n.length;return"function"==typeof t?r:e}function D(n){var t=L(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",q(u+" "+n))):e.setAttribute("class",q(u.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e?t.createElementNS(e,n):t.createElement(n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ta.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return ba(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function Z(n){return ya(n,Sa),n}function V(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,ra(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+ta.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=$;a>0&&(n=n.slice(0,a));var l=ka.get(n);return l&&(n=l,c=B),a?t?u:r:t?b:i}function $(n,t){return function(e){var r=ta.event;ta.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ta.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Aa,u="click"+r,i=ta.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ea&&(Ea="onselectstart"in e?!1:x(e.style,"userSelect")),Ea){var o=n(e).style,a=o[Ea];o[Ea]="none"}return function(n){if(i.on(r,null),Ea&&(o[Ea]=a),n){var t=function(){i.on(u,null)};i.on(u,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var u=r.createSVGPoint();if(0>Na){var i=t(n);if(i.scrollX||i.scrollY){r=ta.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Na=!(o.f||o.e),r.remove()}}return Na?(u.x=e.pageX,u.y=e.pageY):(u.x=e.clientX,u.y=e.clientY),u=u.matrixTransform(n.getScreenCTM().inverse()),[u.x,u.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ta.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nt(n){return n>1?0:-1>n?qa:Math.acos(n)}function tt(n){return n>1?Ra:-1>n?-Ra:Math.asin(n)}function et(n){return((n=Math.exp(n))-1/n)/2}function rt(n){return((n=Math.exp(n))+1/n)/2}function ut(n){return((n=Math.exp(2*n))-1)/(n+1)}function it(n){return(n=Math.sin(n/2))*n}function ot(){}function at(n,t,e){return this instanceof at?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof at?new at(n.h,n.s,n.l):bt(""+n,_t,at):new at(n,t,e)}function ct(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new mt(u(n+120),u(n),u(n-120))}function lt(n,t,e){return this instanceof lt?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof lt?new lt(n.h,n.c,n.l):n instanceof ft?gt(n.l,n.a,n.b):gt((n=wt((n=ta.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new lt(n,t,e)}function st(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new ft(e,Math.cos(n*=Da)*t,Math.sin(n)*t)}function ft(n,t,e){return this instanceof ft?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof ft?new ft(n.l,n.a,n.b):n instanceof lt?st(n.h,n.c,n.l):wt((n=mt(n)).r,n.g,n.b):new ft(n,t,e)}function ht(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=pt(u)*Xa,r=pt(r)*$a,i=pt(i)*Ba,new mt(dt(3.2404542*u-1.5371385*r-.4985314*i),dt(-.969266*u+1.8760108*r+.041556*i),dt(.0556434*u-.2040259*r+1.0572252*i))}function gt(n,t,e){return n>0?new lt(Math.atan2(e,t)*Pa,Math.sqrt(t*t+e*e),n):new lt(0/0,0/0,n)}function pt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function vt(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function dt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mt(n,t,e){return this instanceof mt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mt?new mt(n.r,n.g,n.b):bt(""+n,mt,ct):new mt(n,t,e)}function yt(n){return new mt(n>>16,n>>8&255,255&n)}function Mt(n){return yt(n)+""}function xt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function bt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(kt(u[0]),kt(u[1]),kt(u[2]))}return(i=Ga.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function _t(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new at(r,u,c)}function wt(n,t,e){n=St(n),t=St(t),e=St(e);var r=vt((.4124564*n+.3575761*t+.1804375*e)/Xa),u=vt((.2126729*n+.7151522*t+.072175*e)/$a),i=vt((.0193339*n+.119192*t+.9503041*e)/Ba);return ft(116*u-16,500*(r-u),200*(u-i))}function St(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function kt(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function Et(n){return"function"==typeof n?n:function(){return n}}function At(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Nt(t,e,n,r)}}function Nt(n,t,e,r){function u(){var n,t=c.status;if(!t&&zt(c)||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return void o.error.call(i,r)}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=ta.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,l=null;return!this.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=ta.event;ta.event=n;try{o.progress.call(i,c)}finally{ta.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(l=n,i):l},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(ra(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var s in a)c.setRequestHeader(s,a[s]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},ta.rebind(i,o,"on"),null==r?i:i.get(Ct(r))}function Ct(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function zt(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qt(){var n=Lt(),t=Tt()-n;t>24?(isFinite(t)&&(clearTimeout(tc),tc=setTimeout(qt,t)),nc=0):(nc=1,rc(qt))}function Lt(){var n=Date.now();for(ec=Ka;ec;)n>=ec.t&&(ec.f=ec.c(n-ec.t)),ec=ec.n;return n}function Tt(){for(var n,t=Ka,e=1/0;t;)t.f?t=n?n.n=t.n:Ka=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return Qa=n,e}function Rt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Dt(n,t){var e=Math.pow(10,3*ga(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Pt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r&&e?function(n,t){for(var u=n.length,i=[],o=0,a=r[0],c=0;u>0&&a>0&&(c+a+1>t&&(a=Math.max(1,t-c)),i.push(n.substring(u-=a,u+a)),!((c+=a+1)>t));)a=r[o=(o+1)%r.length];return i.reverse().join(e)}:y;return function(n){var e=ic.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",c=e[4]||"",l=e[5],s=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1,y=!0;switch(h&&(h=+h.substring(1)),(l||"0"===r&&"="===o)&&(l=r="0",o="="),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":y=!1;case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=oc.get(g)||Ut;var M=l&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>p){var c=ta.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=y?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!l&&f&&(x=i(x,1/0));var S=v.length+x.length+b.length+(M?0:u.length),k=s>S?new Array(S=s-S+1).join(r):"";return M&&(x=i(k+x,k.length?s-b.length:1/0)),u+=v,n=x+b,("<"===o?u+n+k:">"===o?k+u+n:"^"===o?k.substring(0,S>>=1)+u+n+k.substring(S):u+(M?n:k+n))+e}}}function Ut(n){return n+""}function jt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ft(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new cc(e-1)),1),e}function i(n,e){return t(n=new cc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{cc=jt;var r=new jt;return r._=n,o(r,t,e)}finally{cc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Ht(n);return c.floor=c,c.round=Ht(r),c.ceil=Ht(u),c.offset=Ht(i),c.range=a,n}function Ht(n){return function(t,e){try{cc=jt;var r=new jt;return r._=t,n(r,e)._}finally{cc=Date}}}function Ot(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(c,a)),null!=(u=sc[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=N[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.slice(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&cc!==jt,o=new(i?jt:cc);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,l=e.length;c>a;){if(r>=l)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=C[o in sc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.slice(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,N.c.toString(),t,r)}function c(n,t,r){return e(n,N.x.toString(),t,r)}function l(n,t,r){return e(n,N.X.toString(),t,r)}function s(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{cc=jt;var t=new cc;return t._=n,r(t)}finally{cc=Date}}var r=t(n);return e.parse=function(n){try{cc=jt;var t=r.parse(n);return t&&t._}finally{cc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ae;var M=ta.map(),x=Yt(v),b=Zt(v),_=Yt(d),w=Zt(d),S=Yt(m),k=Zt(m),E=Yt(y),A=Zt(y);p.forEach(function(n,t){M.set(n.toLowerCase(),t)});var N={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return It(n.getDate(),t,2)},e:function(n,t){return It(n.getDate(),t,2)},H:function(n,t){return It(n.getHours(),t,2)},I:function(n,t){return It(n.getHours()%12||12,t,2)},j:function(n,t){return It(1+ac.dayOfYear(n),t,3)},L:function(n,t){return It(n.getMilliseconds(),t,3)},m:function(n,t){return It(n.getMonth()+1,t,2)},M:function(n,t){return It(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return It(n.getSeconds(),t,2)},U:function(n,t){return It(ac.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return It(ac.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return It(n.getFullYear()%100,t,2)},Y:function(n,t){return It(n.getFullYear()%1e4,t,4)},Z:ie,"%":function(){return"%"}},C={a:r,A:u,b:i,B:o,c:a,d:Qt,e:Qt,H:te,I:te,j:ne,L:ue,m:Kt,M:ee,p:s,S:re,U:Xt,w:Vt,W:$t,x:c,X:l,y:Wt,Y:Bt,Z:Jt,"%":oe};return t}function It(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function Yt(n){return new RegExp("^(?:"+n.map(ta.requote).join("|")+")","i")}function Zt(n){for(var t=new l,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Vt(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Xt(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function $t(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Bt(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Wt(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+2));return r?(n.y=Gt(+r[0]),e+r[0].length):-1}function Jt(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Gt(n){return n+(n>68?1900:2e3)}function Kt(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Qt(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function ne(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function te(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function ee(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function re(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ue(n,t,e){fc.lastIndex=0;var r=fc.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ie(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=ga(t)/60|0,u=ga(t)%60;return e+It(r,"0",2)+It(u,"0",2)}function oe(n,t,e){hc.lastIndex=0;var r=hc.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ae(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ce(){}function le(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function se(n,t){n&&dc.hasOwnProperty(n.type)&&dc[n.type](n,t)}function fe(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function he(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)fe(n[e],t,1);t.polygonEnd()}function ge(){function n(n,t){n*=Da,t=t*Da/2+qa/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),l=Math.sin(t),s=i*l,f=u*c+s*Math.cos(a),h=s*o*Math.sin(a);yc.add(Math.atan2(h,f)),r=n,u=c,i=l}var t,e,r,u,i;Mc.point=function(o,a){Mc.point=n,r=(t=o)*Da,u=Math.cos(a=(e=a)*Da/2+qa/4),i=Math.sin(a)},Mc.lineEnd=function(){n(t,e)}}function pe(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function ve(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function de(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function me(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function ye(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function Me(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function xe(n){return[Math.atan2(n[1],n[0]),tt(n[2])]}function be(n,t){return ga(n[0]-t[0])<Ca&&ga(n[1]-t[1])<Ca}function _e(n,t){n*=Da;var e=Math.cos(t*=Da);we(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function we(n,t,e){++xc,_c+=(n-_c)/xc,wc+=(t-wc)/xc,Sc+=(e-Sc)/xc}function Se(){function n(n,u){n*=Da;var i=Math.cos(u*=Da),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),l=Math.atan2(Math.sqrt((l=e*c-r*a)*l+(l=r*o-t*c)*l+(l=t*a-e*o)*l),t*o+e*a+r*c);bc+=l,kc+=l*(t+(t=o)),Ec+=l*(e+(e=a)),Ac+=l*(r+(r=c)),we(t,e,r)}var t,e,r;qc.point=function(u,i){u*=Da;var o=Math.cos(i*=Da);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),qc.point=n,we(t,e,r)}}function ke(){qc.point=_e}function Ee(){function n(n,t){n*=Da;var e=Math.cos(t*=Da),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),l=u*c-i*a,s=i*o-r*c,f=r*a-u*o,h=Math.sqrt(l*l+s*s+f*f),g=r*o+u*a+i*c,p=h&&-nt(g)/h,v=Math.atan2(h,g);Nc+=p*l,Cc+=p*s,zc+=p*f,bc+=v,kc+=v*(r+(r=o)),Ec+=v*(u+(u=a)),Ac+=v*(i+(i=c)),we(r,u,i)}var t,e,r,u,i;qc.point=function(o,a){t=o,e=a,qc.point=n,o*=Da;var c=Math.cos(a*=Da);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),we(r,u,i)},qc.lineEnd=function(){n(t,e),qc.lineEnd=ke,qc.point=_e}}function Ae(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function Ne(){return!0}function Ce(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(be(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return void u.lineEnd()}var c=new qe(e,n,null,!0),l=new qe(e,null,c,!1);c.o=l,i.push(c),o.push(l),c=new qe(r,n,null,!1),l=new qe(r,null,c,!0),c.o=l,i.push(c),o.push(l)}}),o.sort(t),ze(i),ze(o),i.length){for(var a=0,c=e,l=o.length;l>a;++a)o[a].e=c=!c;for(var s,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;s=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,l=s.length;l>a;++a)u.point((f=s[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){s=g.p.z;for(var a=s.length-1;a>=0;--a)u.point((f=s[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,s=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ze(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function qe(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Le(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function l(){y.point=o,d.lineEnd()}function s(n,t){v.push([n,t]);var e=u(n,t);x.point(e[0],e[1])}function f(){x.lineStart(),v=[]}function h(){s(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r)if(1&t){n=e[0];var u,r=n.length-1,o=-1;if(r>0){for(b||(i.polygonStart(),b=!0),i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);i.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Te))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:l,polygonStart:function(){y.point=s,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=l,g=ta.merge(g);var n=Fe(m,p);g.length?(b||(i.polygonStart(),b=!0),Ce(g,De,n,e,i)):n&&(b||(i.polygonStart(),b=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),b&&(i.polygonEnd(),b=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},M=Re(),x=t(M),b=!1;return y}}function Te(n){return n.length>1}function Re(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function De(n,t){return((n=n.x)[0]<0?n[1]-Ra-Ca:Ra-n[1])-((t=t.x)[0]<0?t[1]-Ra-Ca:Ra-t[1])}function Pe(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?qa:-qa,c=ga(i-e);ga(c-qa)<Ca?(n.point(e,r=(r+o)/2>0?Ra:-Ra),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=qa&&(ga(e-u)<Ca&&(e-=u*Ca),ga(i-a)<Ca&&(i-=a*Ca),r=Ue(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function Ue(n,t,e,r){var u,i,o=Math.sin(n-e);return ga(o)>Ca?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function je(n,t,e,r){var u;if(null==n)u=e*Ra,r.point(-qa,u),r.point(0,u),r.point(qa,u),r.point(qa,0),r.point(qa,-u),r.point(0,-u),r.point(-qa,-u),r.point(-qa,0),r.point(-qa,u);else if(ga(n[0]-t[0])>Ca){var i=n[0]<t[0]?qa:-qa;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function Fe(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;yc.reset();for(var a=0,c=t.length;c>a;++a){var l=t[a],s=l.length;if(s)for(var f=l[0],h=f[0],g=f[1]/2+qa/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===s&&(d=0),n=l[d];var m=n[0],y=n[1]/2+qa/4,M=Math.sin(y),x=Math.cos(y),b=m-h,_=b>=0?1:-1,w=_*b,S=w>qa,k=p*M;if(yc.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),i+=S?b+_*La:b,S^h>=e^m>=e){var E=de(pe(f),pe(n));Me(E);var A=de(u,E);Me(A);var N=(S^b>=0?-1:1)*tt(A[2]);(r>N||r===N&&(E[0]||E[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=m,p=M,v=x,f=n}}return(-Ca>i||Ca>i&&0>yc)^1&o}function He(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,l,s;return{lineStart:function(){l=c=!1,s=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?qa:-qa),h):0;if(!e&&(l=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(be(e,g)||be(p,g))&&(p[0]+=Ca,p[1]+=Ca,v=t(p[0],p[1]))),v!==c)s=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&be(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return s|(l&&c)<<1}}}function r(n,t,e){var r=pe(n),u=pe(t),o=[1,0,0],a=de(r,u),c=ve(a,a),l=a[0],s=c-l*l;if(!s)return!e&&n;var f=i*c/s,h=-i*l/s,g=de(o,a),p=ye(o,f),v=ye(a,h);me(p,v);var d=g,m=ve(p,d),y=ve(d,d),M=m*m-y*(ve(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=ye(d,(-m-x)/y);if(me(b,p),b=xe(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=ga(A-qa)<Ca,C=N||Ca>A;if(!N&&k>E&&(_=k,k=E,E=_),C?N?k+E>0^b[1]<(ga(b[0]-w)<Ca?k:E):k<=b[1]&&b[1]<=E:A>qa^(w<=b[0]&&b[0]<=S)){var z=ye(d,(-m+x)/y);return me(z,p),[b,xe(z)]}}}function u(t,e){var r=o?n:qa-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=ga(i)>Ca,c=gr(n,6*Da);return Le(t,e,c,o?[0,-n]:[-qa,n-qa])}function Oe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,l=o.y,s=a.x,f=a.y,h=0,g=1,p=s-c,v=f-l;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-l,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-l,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:l+h*v}),1>g&&(u.b={x:c+g*p,y:l+g*v}),u}}}}}}function Ie(n,t,e,r){function u(r,u){return ga(r[0]-n)<Ca?u>0?0:3:ga(r[0]-e)<Ca?u>0?2:1:ga(r[1]-t)<Ca?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,l=a[0];c>o;++o)i=a[o],l[1]<=r?i[1]>r&&Q(l,i,n)>0&&++t:i[1]<=r&&Q(l,i,n)<0&&--t,l=i;return 0!==t}function l(i,a,c,l){var s=0,f=0;if(null==i||(s=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(a[0],a[1])}function s(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){s(n,t)&&a.point(n,t)}function h(){C.point=p,d&&d.push(m=[]),S=!0,w=!1,b=_=0/0}function g(){v&&(p(y,M),x&&w&&A.rejoin(),v.push(A.buffer())),C.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Tc,Math.min(Tc,n)),t=Math.max(-Tc,Math.min(Tc,t));var e=s(n,t);if(d&&m.push([n,t]),S)y=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};N(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,m,y,M,x,b,_,w,S,k,E=a,A=Re(),N=Oe(n,t,e,r),C={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=ta.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),l(null,null,1,a),a.lineEnd()),u&&Ce(v,i,t,l,a),a.polygonEnd()),v=d=m=null}};return C}}function Ye(n){var t=0,e=qa/3,r=ir(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*qa/180,e=n[1]*qa/180):[t/qa*180,e/qa*180]},u}function Ze(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,tt((i-(n*n+e*e)*u*u)/(2*u))]},e}function Ve(){function n(n,t){Dc+=u*n-r*t,r=n,u=t}var t,e,r,u;Hc.point=function(i,o){Hc.point=n,t=r=i,e=u=o},Hc.lineEnd=function(){n(t,e)}}function Xe(n,t){Pc>n&&(Pc=n),n>jc&&(jc=n),Uc>t&&(Uc=t),t>Fc&&(Fc=t)}function $e(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Be(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Be(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Be(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function We(n,t){_c+=n,wc+=t,++Sc}function Je(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);kc+=o*(t+n)/2,Ec+=o*(e+r)/2,Ac+=o,We(t=n,e=r)}var t,e;Ic.point=function(r,u){Ic.point=n,We(t=r,e=u)}}function Ge(){Ic.point=We}function Ke(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);kc+=o*(r+n)/2,Ec+=o*(u+t)/2,Ac+=o,o=u*n-r*t,Nc+=o*(r+n),Cc+=o*(u+t),zc+=3*o,We(r=n,u=t)}var t,e,r,u;Ic.point=function(i,o){Ic.point=n,We(t=r=i,e=u=o)},Ic.lineEnd=function(){n(t,e)}}function Qe(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,La)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function nr(n){function t(n){return(a?r:e)(n)}function e(t){return rr(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=0/0,S.point=i,t.lineStart()}function i(e,r){var i=pe([e,r]),o=n(e,r);u(M,x,y,b,_,w,M=o[0],x=o[1],y=e,b=i[0],_=i[1],w=i[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=l,S.lineEnd=s}function l(n,t){i(f=n,h=t),g=M,p=x,v=b,d=_,m=w,S.point=i}function s(){u(M,x,y,b,_,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c },polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,l,s,f,h,g,p,v,d,m){var y=s-t,M=f-e,x=y*y+M*M;if(x>4*i&&d--){var b=a+g,_=c+p,w=l+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),E=ga(ga(w)-1)<Ca||ga(r-h)<Ca?(r+h)/2:Math.atan2(_,b),A=n(E,k),N=A[0],C=A[1],z=N-t,q=C-e,L=M*z-y*q;(L*L/x>i||ga((y*z+M*q)/x-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,N,C,E,b/=S,_/=S,w,d,m),m.point(N,C),u(N,C,E,b,_,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Da),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function tr(n){var t=nr(function(t,e){return n([t*Pa,e*Pa])});return function(n){return or(t(n))}}function er(n){this.stream=n}function rr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ur(n){return ir(function(){return n})()}function ir(n){function t(n){return n=a(n[0]*Da,n[1]*Da),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Pa,n[1]*Pa]}function r(){a=Ae(o=lr(m,M,x),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=nr(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,M=0,x=0,b=Lc,_=y,w=null,S=null;return t.stream=function(n){return s&&(s.valid=!1),s=or(b(o,f(_(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Lc):He((w=+n)*Da),u()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Ie(n[0][0],n[0][1],n[1][0],n[1][1]):y,u()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Da,d=n[1]%360*Da,r()):[v*Pa,d*Pa]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Da,M=n[1]%360*Da,x=n.length>2?n[2]%360*Da:0,r()):[m*Pa,M*Pa,x*Pa]},ta.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function or(n){return rr(n,function(t,e){n.point(t*Da,e*Da)})}function ar(n,t){return[n,t]}function cr(n,t){return[n>qa?n-La:-qa>n?n+La:n,t]}function lr(n,t,e){return n?t||e?Ae(fr(n),hr(t,e)):fr(n):t||e?hr(t,e):cr}function sr(n){return function(t,e){return t+=n,[t>qa?t-La:-qa>t?t+La:t,e]}}function fr(n){var t=sr(n);return t.invert=sr(-n),t}function hr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),tt(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),tt(s*r-a*u)]},e}function gr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=pr(e,u),i=pr(e,i),(o>0?i>u:u>i)&&(u+=o*La)):(u=n+o*La,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=xe([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function pr(n,t){var e=pe(t);e[0]-=n,Me(e);var r=nt(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ca)%(2*Math.PI)}function vr(n,t,e){var r=ta.range(n,t-Ca,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function dr(n,t,e){var r=ta.range(n,t-Ca,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function mr(n){return n.source}function yr(n){return n.target}function Mr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(it(r-t)+u*o*it(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Pa,Math.atan2(o,Math.sqrt(r*r+u*u))*Pa]}:function(){return[n*Pa,t*Pa]};return p.distance=h,p}function xr(){function n(n,u){var i=Math.sin(u*=Da),o=Math.cos(u),a=ga((n*=Da)-t),c=Math.cos(a);Yc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Zc.point=function(u,i){t=u*Da,e=Math.sin(i*=Da),r=Math.cos(i),Zc.point=n},Zc.lineEnd=function(){Zc.point=Zc.lineEnd=b}}function br(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function _r(n,t){function e(n,t){o>0?-Ra+Ca>t&&(t=-Ra+Ca):t>Ra-Ca&&(t=Ra-Ca);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(qa/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=K(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-Ra]},e):Sr}function wr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return ga(u)<Ca?ar:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-K(u)*Math.sqrt(n*n+e*e)]},e)}function Sr(n,t){return[n,Math.log(Math.tan(qa/4+t/2))]}function kr(n){var t,e=ur(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=qa*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Er(n,t){return[Math.log(Math.tan(qa/4+t/2)),-n]}function Ar(n){return n[0]}function Nr(n){return n[1]}function Cr(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function zr(n,t){return n[0]-t[0]||n[1]-t[1]}function qr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Lr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(a*(c-l)-f*(u-i))/(f*o-a*s);return[u+h*o,c+h*s]}function Tr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Rr(){tu(this),this.edge=this.site=this.circle=null}function Dr(n){var t=el.pop()||new Rr;return t.site=n,t}function Pr(n){Xr(n),Qc.remove(n),el.push(n),tu(n)}function Ur(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Pr(n);for(var c=i;c.circle&&ga(e-c.circle.x)<Ca&&ga(r-c.circle.cy)<Ca;)i=c.P,a.unshift(c),Pr(c),c=i;a.unshift(c),Xr(c);for(var l=o;l.circle&&ga(e-l.circle.x)<Ca&&ga(r-l.circle.cy)<Ca;)o=l.N,a.push(l),Pr(l),l=o;a.push(l),Xr(l);var s,f=a.length;for(s=1;f>s;++s)l=a[s],c=a[s-1],Kr(l.edge,c.site,l.site,u);c=a[0],l=a[f-1],l.edge=Jr(c.site,l.site,null,u),Vr(c),Vr(l)}function jr(n){for(var t,e,r,u,i=n.x,o=n.y,a=Qc._;a;)if(r=Fr(a,o)-i,r>Ca)a=a.L;else{if(u=i-Hr(a,o),!(u>Ca)){r>-Ca?(t=a.P,e=a):u>-Ca?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Dr(n);if(Qc.insert(t,c),t||e){if(t===e)return Xr(t),e=Dr(t.site),Qc.insert(c,e),c.edge=e.edge=Jr(t.site,c.site),Vr(t),void Vr(e);if(!e)return void(c.edge=Jr(t.site,c.site));Xr(t),Xr(e);var l=t.site,s=l.x,f=l.y,h=n.x-s,g=n.y-f,p=e.site,v=p.x-s,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,M=v*v+d*d,x={x:(d*y-g*M)/m+s,y:(h*M-v*y)/m+f};Kr(e.edge,l,p,x),c.edge=Jr(l,n,null,x),e.edge=Jr(n,p,null,x),Vr(t),Vr(e)}}function Fr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,l=c-t;if(!l)return a;var s=a-r,f=1/i-1/l,h=s/l;return f?(-h+Math.sqrt(h*h-2*f*(s*s/(-2*l)-c+l/2+u-i/2)))/f+r:(r+a)/2}function Hr(n,t){var e=n.N;if(e)return Fr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Or(n){this.site=n,this.edges=[]}function Ir(n){for(var t,e,r,u,i,o,a,c,l,s,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Kc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)s=a[o].end(),r=s.x,u=s.y,l=a[++o%c].start(),t=l.x,e=l.y,(ga(r-t)>Ca||ga(u-e)>Ca)&&(a.splice(o,0,new Qr(Gr(i.site,s,ga(r-f)<Ca&&p-u>Ca?{x:f,y:ga(t-f)<Ca?e:p}:ga(u-p)<Ca&&h-r>Ca?{x:ga(e-p)<Ca?t:h,y:p}:ga(r-h)<Ca&&u-g>Ca?{x:h,y:ga(t-h)<Ca?e:g}:ga(u-g)<Ca&&r-f>Ca?{x:ga(e-g)<Ca?t:f,y:g}:null),i.site,null)),++c)}function Yr(n,t){return t.angle-n.angle}function Zr(){tu(this),this.x=this.y=this.arc=this.site=this.cy=null}function Vr(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,l=r.y-a,s=i.x-o,f=i.y-a,h=2*(c*f-l*s);if(!(h>=-za)){var g=c*c+l*l,p=s*s+f*f,v=(f*g-l*p)/h,d=(c*p-s*g)/h,f=d+a,m=rl.pop()||new Zr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,M=tl._;M;)if(m.y<M.y||m.y===M.y&&m.x<=M.x){if(!M.L){y=M.P;break}M=M.L}else{if(!M.R){y=M;break}M=M.R}tl.insert(y,m),y||(nl=m)}}}}function Xr(n){var t=n.circle;t&&(t.P||(nl=t.N),tl.remove(t),rl.push(t),tu(t),n.circle=null)}function $r(n){for(var t,e=Gc,r=Oe(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Br(t,n)||!r(t)||ga(t.a.x-t.b.x)<Ca&&ga(t.a.y-t.b.y)<Ca)&&(t.a=t.b=null,e.splice(u,1))}function Br(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],l=t[1][1],s=n.l,f=n.r,h=s.x,g=s.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=l)return}else i={x:d,y:c};e={x:d,y:l}}else{if(i){if(i.y<c)return}else i={x:d,y:l};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=l)return}else i={x:(c-u)/r,y:c};e={x:(l-u)/r,y:l}}else{if(i){if(i.y<c)return}else i={x:(l-u)/r,y:l};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Wr(n,t){this.l=n,this.r=t,this.a=this.b=null}function Jr(n,t,e,r){var u=new Wr(n,t);return Gc.push(u),e&&Kr(u,n,t,e),r&&Kr(u,t,n,r),Kc[n.i].edges.push(new Qr(u,n,t)),Kc[t.i].edges.push(new Qr(u,t,n)),u}function Gr(n,t,e){var r=new Wr(n,null);return r.a=t,r.b=e,Gc.push(r),r}function Kr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function Qr(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function nu(){this._=null}function tu(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function eu(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ru(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function uu(n){for(;n.L;)n=n.L;return n}function iu(n,t){var e,r,u,i=n.sort(ou).pop();for(Gc=[],Kc=new Array(n.length),Qc=new nu,tl=new nu;;)if(u=nl,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(Kc[i.i]=new Or(i),jr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;Ur(u.arc)}t&&($r(t),Ir(t));var o={cells:Kc,edges:Gc};return Qc=tl=Gc=Kc=null,o}function ou(n,t){return t.y-n.y||t.x-n.x}function au(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function cu(n){return n.x}function lu(n){return n.y}function su(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function fu(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&fu(n,c[0],e,r,o,a),c[1]&&fu(n,c[1],o,r,u,a),c[2]&&fu(n,c[2],e,a,o,i),c[3]&&fu(n,c[3],o,a,u,i)}}function hu(n,t,e,r,u,i,o){var a,c=1/0;return function l(n,s,f,h,g){if(!(s>i||f>o||r>h||u>g)){if(p=n.point){var p,v=t-n.x,d=e-n.y,m=v*v+d*d;if(c>m){var y=Math.sqrt(c=m);r=t-y,u=e-y,i=t+y,o=e+y,a=p}}for(var M=n.nodes,x=.5*(s+h),b=.5*(f+g),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:l(n,s,f,x,b);break;case 1:l(n,x,f,h,b);break;case 2:l(n,s,b,x,g);break;case 3:l(n,x,b,h,g)}}}(n,r,u,i,o),a}function gu(n,t){n=ta.rgb(n),t=ta.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+xt(Math.round(e+i*n))+xt(Math.round(r+o*n))+xt(Math.round(u+a*n))}}function pu(n,t){var e,r={},u={};for(e in n)e in t?r[e]=mu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function vu(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function du(n,t){var e,r,u,i=il.lastIndex=ol.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=il.exec(n))&&(r=ol.exec(t));)(u=r.index)>i&&(u=t.slice(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:vu(e,r)})),i=ol.lastIndex;return i<t.length&&(u=t.slice(i),a[o]?a[o]+=u:a[++o]=u),a.length<2?c[0]?(t=c[0].x,function(n){return t(n)+""}):function(){return t}:(t=c.length,function(n){for(var e,r=0;t>r;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function mu(n,t){for(var e,r=ta.interpolators.length;--r>=0&&!(e=ta.interpolators[r](n,t)););return e}function yu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(mu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function Mu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function xu(n){return function(t){return 1-n(1-t)}}function bu(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function _u(n){return n*n}function wu(n){return n*n*n}function Su(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function ku(n){return function(t){return Math.pow(t,n)}}function Eu(n){return 1-Math.cos(n*Ra)}function Au(n){return Math.pow(2,10*(n-1))}function Nu(n){return 1-Math.sqrt(1-n*n)}function Cu(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/La*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*La/t)}}function zu(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function qu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Lu(n,t){n=ta.hcl(n),t=ta.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return st(e+i*n,r+o*n,u+a*n)+""}}function Tu(n,t){n=ta.hsl(n),t=ta.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ct(e+i*n,r+o*n,u+a*n)+""}}function Ru(n,t){n=ta.lab(n),t=ta.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ht(e+i*n,r+o*n,u+a*n)+""}}function Du(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Pu(n){var t=[n.a,n.b],e=[n.c,n.d],r=ju(t),u=Uu(t,e),i=ju(Fu(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Pa,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Pa:0}function Uu(n,t){return n[0]*t[0]+n[1]*t[1]}function ju(n){var t=Math.sqrt(Uu(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Fu(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Hu(n,t){var e,r=[],u=[],i=ta.transform(n),o=ta.transform(t),a=i.translate,c=o.translate,l=i.rotate,s=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:vu(a[0],c[0])},{i:3,x:vu(a[1],c[1])})):r.push(c[0]||c[1]?"translate("+c+")":""),l!=s?(l-s>180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:vu(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:vu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:vu(g[0],p[0])},{i:e-2,x:vu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Ou(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Iu(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Yu(n){for(var t=n.source,e=n.target,r=Vu(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Zu(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Vu(n,t){if(n===t)return n;for(var e=Zu(n),r=Zu(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function Xu(n){n.fixed|=2}function $u(n){n.fixed&=-7}function Bu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Wu(n){n.fixed&=-5}function Ju(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Ju(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var l=t*e[n.point.index];n.charge+=n.pointCharge=l,r+=l*n.point.x,u+=l*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function Gu(n,t){return ta.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=ri,n}function Ku(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(u=n.children)&&(r=u.length))for(var r,u;--r>=0;)e.push(u[r])}function Qu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++o<u;)e.push(i[o]);for(;null!=(n=r.pop());)t(n)}function ni(n){return n.children}function ti(n){return n.value}function ei(n,t){return t.value-n.value}function ri(n){return ta.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function ui(n){return n.x}function ii(n){return n.y}function oi(n,t,e){n.y0=t,n.y=e}function ai(n){return ta.range(n.length)}function ci(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function li(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function si(n){return n.reduce(fi,0)}function fi(n,t){return n+t[1]}function hi(n,t){return gi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function gi(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function pi(n){return[ta.min(n),ta.max(n)]}function vi(n,t){return n.value-t.value}function di(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function mi(n,t){n._pack_next=t,t._pack_prev=n}function yi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function Mi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,u,i,o,a,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(xi),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(u=e[1],u.x=u.r,u.y=0,t(u),l>2))for(i=e[2],wi(r,u,i),t(i),di(r,i),r._pack_prev=i,di(i,u),u=r._pack_next,o=3;l>o;o++){wi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(yi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!yi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?mi(r,u=a):mi(r=c,u),o--):(di(r,i),u=i,t(i))}var m=(s+f)/2,y=(h+g)/2,M=0;for(o=0;l>o;o++)i=e[o],i.x-=m,i.y-=y,M=Math.max(M,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=M,e.forEach(bi)}}function xi(n){n._pack_next=n._pack_prev=n}function bi(n){delete n._pack_next,delete n._pack_prev}function _i(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)_i(u[i],t,e,r)}function wi(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),l=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+l*i,e.y=n.y+c*i-l*u}else e.x=n.x+r,e.y=n.y}function Si(n,t){return n.parent==t.parent?1:2}function ki(n){var t=n.children;return t.length?t[0]:n.t}function Ei(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ai(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Ni(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Ci(n,t,e){return n.a.parent===t.parent?n.a:e}function zi(n){return 1+ta.max(n,function(n){return n.y})}function qi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Li(n){var t=n.children;return t&&t.length?Li(t[0]):n}function Ti(n){var t,e=n.children;return e&&(t=e.length)?Ti(e[t-1]):n}function Ri(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Di(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Pi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ui(n){return n.rangeExtent?n.rangeExtent():Pi(n.range())}function ji(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Fi(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Hi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:ml}function Oi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=ta.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Ii(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Oi:ji,c=r?Iu:Ou;return o=u(n,t,c,e),a=u(t,n,c,mu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Du)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Xi(n,t)},i.tickFormat=function(t,e){return $i(n,t,e)},i.nice=function(t){return Zi(n,t),u()},i.copy=function(){return Ii(n,t,e,r)},u()}function Yi(n,t){return ta.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Zi(n,t){return Fi(n,Hi(Vi(n,t)[2]))}function Vi(n,t){null==t&&(t=10);var e=Pi(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Xi(n,t){return ta.range.apply(ta,Vi(n,t))}function $i(n,t,e){var r=Vi(n,t);if(e){var u=ic.exec(e);if(u.shift(),"s"===u[8]){var i=ta.formatPrefix(Math.max(ga(r[0]),ga(r[1])));return u[7]||(u[7]="."+Bi(i.scale(r[2]))),u[8]="f",e=ta.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Wi(u[8],r)),e=u.join("")}else e=",."+Bi(r[2])+"f";return ta.format(e)}function Bi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Wi(n,t){var e=Bi(t[2]);return n in yl?Math.abs(e-Bi(Math.max(ga(t[0]),ga(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Ji(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Fi(r.map(u),e?Math:xl);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Pi(r),o=[],a=n[0],c=n[1],l=Math.floor(u(a)),s=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(s-l)){if(e){for(;s>l;l++)for(var h=1;f>h;h++)o.push(i(l)*h);o.push(i(l))}else for(o.push(i(l));l++<s;)for(var h=f-1;h>0;h--)o.push(i(l)*h);for(l=0;o[l]<a;l++);for(s=o.length;o[s-1]>c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return Ml;arguments.length<2?t=Ml:"function"!=typeof t&&(t=ta.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Ji(n.copy(),t,e,r)},Yi(o,n)}function Gi(n,t,e){function r(t){return n(u(t))}var u=Ki(t),i=Ki(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Xi(e,n)},r.tickFormat=function(n,t){return $i(e,n,t)},r.nice=function(n){return r.domain(Zi(e,n))},r.exponent=function(o){return arguments.length?(u=Ki(t=o),i=Ki(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Gi(n.copy(),t,e)},Yi(r,n)}function Ki(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Qi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return ta.range(n.length).map(function(n){return t+e*n})}var u,i,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new l;for(var i,o=-1,a=r.length;++o<a;)u.has(i=r[o])||u.set(i,n.push(i));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(i=n,o=0,t={t:"range",a:arguments},e):i},e.rangePoints=function(u,a){arguments.length<2&&(a=0);var c=u[0],l=u[1],s=n.length<2?(c=(c+l)/2,0):(l-c)/(n.length-1+a);return i=r(c+s*a/2,s),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(u,a){arguments.length<2&&(a=0);var c=u[0],l=u[1],s=n.length<2?(c=l=Math.round((c+l)/2),0):(l-c)/(n.length-1+a)|0;return i=r(c+Math.round(s*a/2+(l-c-(n.length-1+a)*s)/2),s),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(u,a,c){arguments.length<2&&(a=0),arguments.length<3&&(c=a);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=(f-s)/(n.length-a+2*c);return i=r(s+h*c,h),l&&i.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,a,c){arguments.length<2&&(a=0),arguments.length<3&&(c=a);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=Math.floor((f-s)/(n.length-a+2*c));return i=r(s+Math.round((f-s-(n.length-a)*h)/2),h),l&&i.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Pi(t.a[0])},e.copy=function(){return Qi(n,t)},e.domain(n)}function no(n,t){function i(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ta.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ta.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(u).sort(e),i()):n},o.range=function(n){return arguments.length?(t=n,i()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[0/0,0/0]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return no(n,t)},i()}function to(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return to(n,t,e)},u()}function eo(n,t){function e(e){return e>=e?t[ta.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return eo(n,t)},e}function ro(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Xi(n,t)},t.tickFormat=function(t,e){return $i(n,t,e)},t.copy=function(){return ro(n)},t}function uo(){return 0}function io(n){return n.innerRadius}function oo(n){return n.outerRadius}function ao(n){return n.startAngle}function co(n){return n.endAngle}function lo(n){return n&&n.padAngle}function so(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function fo(n,t,e,r,u){var i=n[0]-t[0],o=n[1]-t[1],a=(u?r:-r)/Math.sqrt(i*i+o*o),c=a*o,l=-a*i,s=n[0]+c,f=n[1]+l,h=t[0]+c,g=t[1]+l,p=(s+h)/2,v=(f+g)/2,d=h-s,m=g-f,y=d*d+m*m,M=e-r,x=s*g-h*f,b=(0>m?-1:1)*Math.sqrt(M*M*y-x*x),_=(x*m-d*b)/y,w=(-x*d-m*b)/y,S=(x*m+d*b)/y,k=(-x*d+m*b)/y,E=_-p,A=w-v,N=S-p,C=k-v;return E*E+A*A>N*N+C*C&&(_=S,w=k),[[_-c,w-l],[_*e/M,w*e/M]]}function ho(n){function t(t){function o(){l.push("M",i(n(s),a))}for(var c,l=[],s=[],f=-1,h=t.length,g=Et(e),p=Et(r);++f<h;)u.call(this,c=t[f],f)?s.push([+g.call(this,c,f),+p.call(this,c,f)]):s.length&&(o(),s=[]);return s.length&&o(),l.length?l.join(""):null}var e=Ar,r=Nr,u=Ne,i=go,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=El.get(n)||go).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function go(n){return n.join("L")}function po(n){return go(n)+"Z"}function vo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function mo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function yo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function Mo(n,t){return n.length<4?go(n):n[1]+_o(n.slice(1,-1),wo(n,t))}function xo(n,t){return n.length<3?go(n):n[0]+_o((n.push(n[0]),n),wo([n[n.length-2]].concat(n,[n[1]]),t))}function bo(n,t){return n.length<3?go(n):n[0]+_o(n,wo(n,t))}function _o(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return go(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var l=2;l<t.length;l++,c++)i=n[c],a=t[l],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var s=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+s[0]+","+s[1]}return r}function wo(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function So(n){if(n.length<3)return go(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",No(Cl,o),",",No(Cl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Co(c,o,a);return n.pop(),c.push("L",r),c.join("")}function ko(n){if(n.length<4)return go(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(No(Cl,i)+","+No(Cl,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),Co(e,i,o);return e.join("")}function Eo(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[No(Cl,o),",",No(Cl,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Co(t,o,a);return t.join("")}function Ao(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,l=-1;++l<=e;)r=n[l],u=l/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return So(n)}function No(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Co(n,t,e){n.push("C",No(Al,t),",",No(Al,e),",",No(Nl,t),",",No(Nl,e),",",No(Cl,t),",",No(Cl,e))}function zo(n,t){return(t[1]-n[1])/(t[0]-n[0])}function qo(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=zo(u,i);++t<e;)r[t]=(o+(o=zo(u=i,i=n[t+1])))/2;return r[t]=o,r}function Lo(n){for(var t,e,r,u,i=[],o=qo(n),a=-1,c=n.length-1;++a<c;)t=zo(n[a],n[a+1]),ga(t)<Ca?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function To(n){return n.length<3?go(n):n[0]+_o(n,Lo(n))}function Ro(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]-Ra,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Do(n){function t(t){function c(){v.push("M",a(n(m),f),s,l(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,M=t.length,x=Et(e),b=Et(u),_=e===r?function(){return g}:Et(r),w=u===i?function(){return p}:Et(i);++y<M;)o.call(this,h=t[y],y)?(d.push([g=+x.call(this,h,y),p=+b.call(this,h,y)]),m.push([+_.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=Ar,r=Ar,u=0,i=Nr,o=Ne,a=go,c=a.key,l=a,s="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r },t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=El.get(n)||go).key,l=a.reverse||a,s=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Po(n){return n.radius}function Uo(n){return[n.x,n.y]}function jo(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Ra;return[e*Math.cos(r),e*Math.sin(r)]}}function Fo(){return 64}function Ho(){return"circle"}function Oo(n){var t=Math.sqrt(n/qa);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Io(n){return function(){var t,e;(t=this[n])&&(e=t[t.active])&&(--t.count?delete t[t.active]:delete this[n],t.active+=.5,e.event&&e.event.interrupt.call(this,this.__data__,e.index))}}function Yo(n,t,e){return ya(n,Pl),n.namespace=t,n.id=e,n}function Zo(n,t,e,r){var u=n.id,i=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[i][u].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[i][u].tween.set(t,e)}))}function Vo(n){return null==n&&(n=""),function(){this.textContent=n}}function Xo(n){return null==n?"__transition__":"__transition_"+n+"__"}function $o(n,t,e,r,u){var i=n[e]||(n[e]={active:0,count:0}),o=i[r];if(!o){var a=u.time;o=i[r]={tween:new l,time:a,delay:u.delay,duration:u.duration,ease:u.ease,index:t},u=null,++i.count,ta.timer(function(u){function c(e){if(i.active>r)return s();var u=i[i.active];u&&(--i.count,delete i[i.active],u.event&&u.event.interrupt.call(n,n.__data__,u.index)),i.active=r,o.event&&o.event.start.call(n,n.__data__,t),o.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&v.push(r)}),h=o.ease,f=o.duration,ta.timer(function(){return p.c=l(e||1)?Ne:l,1},0,a)}function l(e){if(i.active!==r)return 1;for(var u=e/f,a=h(u),c=v.length;c>0;)v[--c].call(n,a);return u>=1?(o.event&&o.event.end.call(n,n.__data__,t),s()):void 0}function s(){return--i.count?delete i[r]:delete n[e],1}var f,h,g=o.delay,p=ec,v=[];return p.t=g+a,u>=g?c(u-g):void(p.c=c)},0,a)}}function Bo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function Wo(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function Jo(n){return n.toISOString()}function Go(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=ta.bisect(Vl,u);return i==Vl.length?[t.year,Vi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Vl[i-1]<Vl[i]/u?i-1:i]:[Bl,Vi(n,e)[2]]}return r.invert=function(t){return Ko(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Ko)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Ko(+e+1),t).length}var i=r.domain(),o=Pi(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Fi(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Ko(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Ko(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Pi(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Ko(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Go(n.copy(),t,e)},Yi(r,n)}function Ko(n){return new Date(n)}function Qo(n){return JSON.parse(n.responseText)}function na(n){var t=ua.createRange();return t.selectNode(ua.body),t.createContextualFragment(n.responseText)}var ta={version:"3.5.6"},ea=[].slice,ra=function(n){return ea.call(n)},ua=this.document;if(ua)try{ra(ua.documentElement.childNodes)[0].nodeType}catch(ia){ra=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),ua)try{ua.createElement("DIV").style.setProperty("opacity",0,"")}catch(oa){var aa=this.Element.prototype,ca=aa.setAttribute,la=aa.setAttributeNS,sa=this.CSSStyleDeclaration.prototype,fa=sa.setProperty;aa.setAttribute=function(n,t){ca.call(this,n,t+"")},aa.setAttributeNS=function(n,t,e){la.call(this,n,t,e+"")},sa.setProperty=function(n,t,e){fa.call(this,n,t+"",e)}}ta.ascending=e,ta.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},ta.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i;)if(null!=(r=n[u])&&r>=r){e=r;break}for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=r;break}for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},ta.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i;)if(null!=(r=n[u])&&r>=r){e=r;break}for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=r;break}for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},ta.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o;)if(null!=(r=n[i])&&r>=r){e=u=r;break}for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=u=r;break}for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},ta.sum=function(n,t){var e,r=0,i=n.length,o=-1;if(1===arguments.length)for(;++o<i;)u(e=+n[o])&&(r+=e);else for(;++o<i;)u(e=+t.call(n,n[o],o))&&(r+=e);return r},ta.mean=function(n,t){var e,i=0,o=n.length,a=-1,c=o;if(1===arguments.length)for(;++a<o;)u(e=r(n[a]))?i+=e:--c;else for(;++a<o;)u(e=r(t.call(n,n[a],a)))?i+=e:--c;return c?i/c:void 0},ta.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},ta.median=function(n,t){var i,o=[],a=n.length,c=-1;if(1===arguments.length)for(;++c<a;)u(i=r(n[c]))&&o.push(i);else for(;++c<a;)u(i=r(t.call(n,n[c],c)))&&o.push(i);return o.length?ta.quantile(o.sort(e),.5):void 0},ta.variance=function(n,t){var e,i,o=n.length,a=0,c=0,l=-1,s=0;if(1===arguments.length)for(;++l<o;)u(e=r(n[l]))&&(i=e-a,a+=i/++s,c+=i*(e-a));else for(;++l<o;)u(e=r(t.call(n,n[l],l)))&&(i=e-a,a+=i/++s,c+=i*(e-a));return s>1?c/(s-1):void 0},ta.deviation=function(){var n=ta.variance.apply(this,arguments);return n?Math.sqrt(n):n};var ha=i(e);ta.bisectLeft=ha.left,ta.bisect=ta.bisectRight=ha.right,ta.bisector=function(n){return i(1===n.length?function(t,r){return e(n(t),r)}:n)},ta.shuffle=function(n,t,e){(i=arguments.length)<3&&(e=n.length,2>i&&(t=0));for(var r,u,i=e-t;i;)u=Math.random()*i--|0,r=n[i+t],n[i+t]=n[u+t],n[u+t]=r;return n},ta.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ta.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},ta.zip=function(){if(!(r=arguments.length))return[];for(var n=-1,t=ta.min(arguments,o),e=new Array(t);++n<t;)for(var r,u=-1,i=e[n]=new Array(r);++u<r;)i[u]=arguments[u][n];return e},ta.transpose=function(n){return ta.zip.apply(ta,n)},ta.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ta.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ta.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ta.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var ga=Math.abs;ta.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,u=[],i=a(ga(e)),o=-1;if(n*=i,t*=i,e*=i,0>e)for(;(r=n+e*++o)>t;)u.push(r/i);else for(;(r=n+e*++o)<t;)u.push(r/i);return u},ta.map=function(n,t){var e=new l;if(n instanceof l)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,u=-1,i=n.length;if(1===arguments.length)for(;++u<i;)e.set(u,n[u]);else for(;++u<i;)e.set(t.call(n,r=n[u],u),r)}else for(var o in n)e.set(o,n[o]);return e};var pa="__proto__",va="\x00";c(l,{has:h,get:function(n){return this._[s(n)]},set:function(n,t){return this._[s(n)]=t},remove:g,keys:p,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:f(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,f(t),this._[t])}}),ta.nest=function(){function n(t,o,a){if(a>=i.length)return r?r.call(u,o):e?o.sort(e):o;for(var c,s,f,h,g=-1,p=o.length,v=i[a++],d=new l;++g<p;)(h=d.get(c=v(s=o[g])))?h.push(s):d.set(c,[s]);return t?(s=t(),f=function(e,r){s.set(e,n(t,r,a))}):(s={},f=function(e,r){s[e]=n(t,r,a)}),d.forEach(f),s}function t(n,e){if(e>=i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ta.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ta.set=function(n){var t=new m;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},c(m,{has:h,add:function(n){return this._[s(n+="")]=!0,n},remove:g,values:p,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,f(t))}}),ta.behavior={},ta.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=M(n,t,t[e]);return n};var da=["webkit","ms","moz","Moz","o","O"];ta.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ta.event=null,ta.requote=function(n){return n.replace(ma,"\\$&")};var ma=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ya={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},Ma=function(n,t){return t.querySelector(n)},xa=function(n,t){return t.querySelectorAll(n)},ba=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(ba=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(Ma=function(n,t){return Sizzle(n,t)[0]||null},xa=Sizzle,ba=Sizzle.matchesSelector),ta.selection=function(){return ta.select(ua.documentElement)};var _a=ta.selection.prototype=[];_a.select=function(n){var t,e,r,u,i=[];n=N(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,l=r.length;++c<l;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return A(i)},_a.selectAll=function(n){var t,e,r=[];n=C(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=ra(n.call(e,e.__data__,a,u))),t.parentNode=e);return A(r)};var wa={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ta.ns={prefix:wa,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.slice(0,t),n=n.slice(t+1)),wa.hasOwnProperty(e)?{space:wa[e],local:n}:n}},_a.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ta.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},_a.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!L(n[u]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},_a.style=function(n,e,r){var u=arguments.length;if(3>u){if("string"!=typeof n){2>u&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>u){var i=this.node();return t(i).getComputedStyle(i,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},_a.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},_a.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},_a.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},_a.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},_a.insert=function(n,t){return n=j(n),t=N(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},_a.remove=function(){return this.each(F)},_a.data=function(n,t){function e(n,e){var r,u,i,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),v=new Array(o);if(t){var d,m=new l,y=new Array(o);for(r=-1;++r<o;)m.has(d=t.call(u=n[r],u.__data__,r))?v[r]=u:m.set(d,u),y[r]=d;for(r=-1;++r<f;)(u=m.get(d=t.call(e,i=e[r],r)))?u!==!0&&(g[r]=u,u.__data__=i):p[r]=H(i),m.set(d,!0);for(r=-1;++r<o;)m.get(y[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],i=e[r],u?(u.__data__=i,g[r]=u):p[r]=H(i);for(;f>r;++r)p[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,a.push(p),c.push(g),s.push(v)}var r,u,i=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++i<o;)(u=r[i])&&(n[i]=u.__data__);return n}var a=Z([]),c=A([]),s=A([]);if("function"==typeof n)for(;++i<o;)e(r=this[i],n.call(r,r.parentNode.__data__,i));else for(;++i<o;)e(r=this[i],n);return c.enter=function(){return a},c.exit=function(){return s},c},_a.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},_a.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=O(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return A(u)},_a.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},_a.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},_a.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},_a.call=function(n){var t=ra(arguments);return n.apply(t[0]=this,t),this},_a.empty=function(){return!this.node()},_a.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},_a.size=function(){var n=0;return Y(this,function(){++n}),n};var Sa=[];ta.selection.enter=Z,ta.selection.enter.prototype=Sa,Sa.append=_a.append,Sa.empty=_a.empty,Sa.node=_a.node,Sa.call=_a.call,Sa.size=_a.size,Sa.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var l=-1,s=u.length;++l<s;)(i=u[l])?(t.push(r[l]=e=n.call(u.parentNode,i.__data__,l,a)),e.__data__=i.__data__):t.push(null)}return A(o)},Sa.insert=function(n,t){return arguments.length<2&&(t=V(this)),_a.insert.call(this,n,t)},ta.select=function(t){var e;return"string"==typeof t?(e=[Ma(t,ua)],e.parentNode=ua.documentElement):(e=[t],e.parentNode=n(t)),A([e])},ta.selectAll=function(n){var t;return"string"==typeof n?(t=ra(xa(n,ua)),t.parentNode=ua.documentElement):(t=n,t.parentNode=null),A([t])},_a.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var ka=ta.map({mouseenter:"mouseover",mouseleave:"mouseout"});ua&&ka.forEach(function(n){"on"+n in ua&&ka.remove(n)});var Ea,Aa=0;ta.mouse=function(n){return J(n,k())};var Na=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ta.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return J(n,r)},ta.behavior.drag=function(){function n(){this.on("mousedown.drag",i).on("touchstart.drag",o)}function e(n,t,e,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],p|=n|e,M=r,g({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&ta.event.target===f),g({type:"dragend"}))}var l,s=this,f=ta.event.target,h=s.parentNode,g=r.of(s,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=ta.select(e(f)).on(i+d,a).on(o+d,c),y=W(f),M=t(h,v);u?(l=u.apply(s,arguments),l=[l.x-M[0],l.y-M[1]]):l=[0,0],g({type:"dragstart"})}}var r=E(n,"drag","dragstart","dragend"),u=null,i=e(b,ta.mouse,t,"mousemove","mouseup"),o=e(G,ta.touch,y,"touchmove","touchend");return n.origin=function(t){return arguments.length?(u=t,n):u},ta.rebind(n,r,"on")},ta.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?ra(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Ca=1e-6,za=Ca*Ca,qa=Math.PI,La=2*qa,Ta=La-Ca,Ra=qa/2,Da=qa/180,Pa=180/qa,Ua=Math.SQRT2,ja=2,Fa=4;ta.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=rt(v),o=i/(ja*h)*(e*ut(Ua*t+v)-et(v));return[r+o*l,u+o*s,i*e/rt(Ua*t+v)]}return[r+n*l,u+n*s,i*Math.exp(Ua*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],l=o-r,s=a-u,f=l*l+s*s,h=Math.sqrt(f),g=(c*c-i*i+Fa*f)/(2*i*ja*h),p=(c*c-i*i-Fa*f)/(2*c*ja*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Ua;return e.duration=1e3*y,e},ta.behavior.zoom=function(){function n(n){n.on(q,f).on(Oa+".zoom",g).on("dblclick.zoom",p).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function u(n){k.k=Math.max(N[0],Math.min(N[1],n))}function i(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},u(Math.pow(2,o)),i(d=e,r),t=ta.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function c(n){z++||n({type:"zoomstart"})}function l(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function s(n){--z||(n({type:"zoomend"}),d=null)}function f(){function n(){f=1,i(ta.mouse(u),g),l(a)}function r(){h.on(L,null).on(T,null),p(f&&ta.event.target===o),s(a)}var u=this,o=ta.event.target,a=D.of(u,arguments),f=0,h=ta.select(t(u)).on(L,n).on(T,r),g=e(ta.mouse(u)),p=W(u);Dl.call(u),c(a)}function h(){function n(){var n=ta.touches(p);return g=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ta.event.target;ta.select(t).on(x,r).on(b,a),_.push(t);for(var e=ta.event.changedTouches,u=0,i=e.length;i>u;++u)d[e[u].identifier]=null;var c=n(),l=Date.now();if(1===c.length){if(500>l-M){var s=c[0];o(p,s,d[s.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=l}else if(c.length>1){var s=c[0],f=c[1],h=s[0]-f[0],g=s[1]-f[1];m=h*h+g*g}}function r(){var n,t,e,r,o=ta.touches(p);Dl.call(p);for(var a=0,c=o.length;c>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var s=(s=e[0]-n[0])*s+(s=e[1]-n[1])*s,f=m&&Math.sqrt(s/m);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],u(f*g)}M=null,i(n,t),l(v)}function a(){if(ta.event.touches.length){for(var t=ta.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var u in d)return void n()}ta.selectAll(_).on(y,null),w.on(q,f).on(R,h),E(),s(v)}var g,p=this,v=D.of(p,arguments),d={},m=0,y=".zoom-"+ta.event.changedTouches[0].identifier,x="touchmove"+y,b="touchend"+y,_=[],w=ta.select(p),E=W(p);t(),c(v),w.on(q,null).on(R,t)}function g(){var n=D.of(this,arguments);y?clearTimeout(y):(Dl.call(this),v=e(d=m||ta.mouse(this)),c(n)),y=setTimeout(function(){y=null,s(n)},50),S(),u(Math.pow(2,.002*Ha())*k.k),i(d,v),l(n)}function p(){var n=ta.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ta.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,m,y,M,x,b,_,w,k={x:0,y:0,k:1},A=[960,500],N=Ia,C=250,z=0,q="mousedown.zoom",L="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=E(n,"zoomstart","zoom","zoomend");return Oa||(Oa="onwheel"in ua?(Ha=function(){return-ta.event.deltaY*(ta.event.deltaMode?120:1)},"wheel"):"onmousewheel"in ua?(Ha=function(){return ta.event.wheelDelta},"mousewheel"):(Ha=function(){return-ta.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Tl?ta.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},c(n)}).tween("zoom:zoom",function(){var e=A[0],r=A[1],u=d?d[0]:e/2,i=d?d[1]:r/2,o=ta.interpolateZoom([(u-k.x)/k.k,(i-k.y)/k.k,e/k.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:u-r[0]*a,y:i-r[1]*a,k:a},l(n)}}).each("interrupt.zoom",function(){s(n)}).each("end.zoom",function(){s(n)}):(this.__chart__=k,c(n),l(n),s(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:+t},a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(N=null==t?Ia:[+t[0],+t[1]],n):N},n.center=function(t){return arguments.length?(m=t&&[+t[0],+t[1]],n):m},n.size=function(t){return arguments.length?(A=t&&[+t[0],+t[1]],n):A},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ta.rebind(n,D,"on")};var Ha,Oa,Ia=[0,1/0];ta.color=ot,ot.prototype.toString=function(){return this.rgb()+""},ta.hsl=at;var Ya=at.prototype=new ot;Ya.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new at(this.h,this.s,this.l/n)},Ya.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new at(this.h,this.s,n*this.l)},Ya.rgb=function(){return ct(this.h,this.s,this.l)},ta.hcl=lt;var Za=lt.prototype=new ot;Za.brighter=function(n){return new lt(this.h,this.c,Math.min(100,this.l+Va*(arguments.length?n:1)))},Za.darker=function(n){return new lt(this.h,this.c,Math.max(0,this.l-Va*(arguments.length?n:1)))},Za.rgb=function(){return st(this.h,this.c,this.l).rgb()},ta.lab=ft;var Va=18,Xa=.95047,$a=1,Ba=1.08883,Wa=ft.prototype=new ot;Wa.brighter=function(n){return new ft(Math.min(100,this.l+Va*(arguments.length?n:1)),this.a,this.b)},Wa.darker=function(n){return new ft(Math.max(0,this.l-Va*(arguments.length?n:1)),this.a,this.b)},Wa.rgb=function(){return ht(this.l,this.a,this.b)},ta.rgb=mt;var Ja=mt.prototype=new ot;Ja.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new mt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mt(u,u,u)},Ja.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mt(n*this.r,n*this.g,n*this.b)},Ja.hsl=function(){return _t(this.r,this.g,this.b)},Ja.toString=function(){return"#"+xt(this.r)+xt(this.g)+xt(this.b)};var Ga=ta.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Ga.forEach(function(n,t){Ga.set(n,yt(t))}),ta.functor=Et,ta.xhr=At(y),ta.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=Nt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=l)return o;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++<l;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}s=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++s):10===r&&(u=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;l>s;){var r=n.charCodeAt(s++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++a);else if(r!==c)continue;return n.slice(t,s-a)}return n.slice(t)}for(var r,u,i={},o={},a=[],l=n.length,s=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,f++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new m,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},ta.csv=ta.dsv(",","text/csv"),ta.tsv=ta.dsv(" ","text/tab-separated-values");var Ka,Qa,nc,tc,ec,rc=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ta.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};Qa?Qa.n=i:Ka=i,Qa=i,nc||(tc=clearTimeout(tc),nc=1,rc(qt))},ta.timer.flush=function(){Lt(),Tt()},ta.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var uc=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Dt);ta.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=ta.round(n,Rt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),uc[8+e/3]};var ic=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,oc=ta.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ta.round(n,Rt(n,t))).toFixed(Math.max(0,Math.min(20,Rt(n*(1+1e-15),t))))}}),ac=ta.time={},cc=Date;jt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){lc.setUTCDate.apply(this._,arguments)},setDay:function(){lc.setUTCDay.apply(this._,arguments)},setFullYear:function(){lc.setUTCFullYear.apply(this._,arguments)},setHours:function(){lc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){lc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){lc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){lc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){lc.setUTCSeconds.apply(this._,arguments)},setTime:function(){lc.setTime.apply(this._,arguments)}};var lc=Date.prototype;ac.year=Ft(function(n){return n=ac.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ac.years=ac.year.range,ac.years.utc=ac.year.utc.range,ac.day=Ft(function(n){var t=new cc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ac.days=ac.day.range,ac.days.utc=ac.day.utc.range,ac.dayOfYear=function(n){var t=ac.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ac[n]=Ft(function(n){return(n=ac.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ac.year(n).getDay();return Math.floor((ac.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ac[n+"s"]=e.range,ac[n+"s"].utc=e.utc.range,ac[n+"OfYear"]=function(n){var e=ac.year(n).getDay();return Math.floor((ac.dayOfYear(n)+(e+t)%7)/7)}}),ac.week=ac.sunday,ac.weeks=ac.sunday.range,ac.weeks.utc=ac.sunday.utc.range,ac.weekOfYear=ac.sundayOfYear;var sc={"-":"",_:" ",0:"0"},fc=/^\s*\d+/,hc=/^%/;ta.locale=function(n){return{numberFormat:Pt(n),timeFormat:Ot(n)}};var gc=ta.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ta.format=gc.numberFormat,ta.geo={},ce.prototype={s:0,t:0,add:function(n){le(n,this.t,pc),le(pc.s,this.s,this),this.s?this.t+=pc.t:this.s=pc.t },reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var pc=new ce;ta.geo.stream=function(n,t){n&&vc.hasOwnProperty(n.type)?vc[n.type](n,t):se(n,t)};var vc={Feature:function(n,t){se(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)se(e[r].geometry,t)}},dc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){fe(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)fe(e[r],t,0)},Polygon:function(n,t){he(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)he(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)se(e[r],t)}};ta.geo.area=function(n){return mc=0,ta.geo.stream(n,Mc),mc};var mc,yc=new ce,Mc={sphere:function(){mc+=4*qa},point:b,lineStart:b,lineEnd:b,polygonStart:function(){yc.reset(),Mc.lineStart=ge},polygonEnd:function(){var n=2*yc;mc+=0>n?4*qa+n:n,Mc.lineStart=Mc.lineEnd=Mc.point=b}};ta.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=pe([t*Da,e*Da]);if(m){var u=de(m,r),i=[u[1],-u[0],0],o=de(i,u);Me(o),o=xe(o);var c=t-p,l=c>0?1:-1,v=o[0]*Pa*l,d=ga(c)>180;if(d^(v>l*p&&l*t>v)){var y=o[1]*Pa;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>l*p&&l*t>v)){var y=-o[1]*Pa;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=ga(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Mc.point(n,e),t(n,e)}function i(){Mc.lineStart()}function o(){u(v,d),Mc.lineEnd(),ga(y)>Ca&&(s=-(h=180)),x[0]=s,x[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var s,f,h,g,p,v,d,m,y,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=u,b.lineStart=i,b.lineEnd=o,y=0,Mc.polygonStart()},polygonEnd:function(){Mc.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>yc?(s=-(h=180),f=-(g=90)):y>Ca?g=90:-Ca>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],ta.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,u=M[0],i=[u];t>r;++r)e=M[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),ta.geo.centroid=function(n){xc=bc=_c=wc=Sc=kc=Ec=Ac=Nc=Cc=zc=0,ta.geo.stream(n,qc);var t=Nc,e=Cc,r=zc,u=t*t+e*e+r*r;return za>u&&(t=kc,e=Ec,r=Ac,Ca>bc&&(t=_c,e=wc,r=Sc),u=t*t+e*e+r*r,za>u)?[0/0,0/0]:[Math.atan2(e,t)*Pa,tt(r/Math.sqrt(u))*Pa]};var xc,bc,_c,wc,Sc,kc,Ec,Ac,Nc,Cc,zc,qc={sphere:b,point:_e,lineStart:Se,lineEnd:ke,polygonStart:function(){qc.lineStart=Ee},polygonEnd:function(){qc.lineStart=Se}},Lc=Le(Ne,Pe,je,[-qa,-qa/2]),Tc=1e9;ta.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ie(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ta.geo.conicEqualArea=function(){return Ye(Ze)}).raw=Ze,ta.geo.albers=function(){return ta.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ta.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=ta.geo.albers(),o=ta.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ta.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ca,f+.12*l+Ca],[s-.214*l-Ca,f+.234*l-Ca]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ca,f+.166*l+Ca],[s-.115*l-Ca,f+.234*l-Ca]]).stream(c).point,n},n.scale(1070)};var Rc,Dc,Pc,Uc,jc,Fc,Hc={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Dc=0,Hc.lineStart=Ve},polygonEnd:function(){Hc.lineStart=Hc.lineEnd=Hc.point=b,Rc+=ga(Dc/2)}},Oc={point:Xe,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Ic={point:We,lineStart:Je,lineEnd:Ge,polygonStart:function(){Ic.lineStart=Ke},polygonEnd:function(){Ic.point=We,Ic.lineStart=Je,Ic.lineEnd=Ge}};ta.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),ta.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return Rc=0,ta.geo.stream(n,u(Hc)),Rc},n.centroid=function(n){return _c=wc=Sc=kc=Ec=Ac=Nc=Cc=zc=0,ta.geo.stream(n,u(Ic)),zc?[Nc/zc,Cc/zc]:Ac?[kc/Ac,Ec/Ac]:Sc?[_c/Sc,wc/Sc]:[0/0,0/0]},n.bounds=function(n){return jc=Fc=-(Pc=Uc=1/0),ta.geo.stream(n,u(Oc)),[[Pc,Uc],[jc,Fc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||tr(n):y,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new $e:new Qe(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(ta.geo.albersUsa()).context(null)},ta.geo.transform=function(n){return{stream:function(t){var e=new er(t);for(var r in n)e[r]=n[r];return e}}},er.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ta.geo.projection=ur,ta.geo.projectionMutator=ir,(ta.geo.equirectangular=function(){return ur(ar)}).raw=ar.invert=ar,ta.geo.rotation=function(n){function t(t){return t=n(t[0]*Da,t[1]*Da),t[0]*=Pa,t[1]*=Pa,t}return n=lr(n[0]%360*Da,n[1]*Da,n.length>2?n[2]*Da:0),t.invert=function(t){return t=n.invert(t[0]*Da,t[1]*Da),t[0]*=Pa,t[1]*=Pa,t},t},cr.invert=ar,ta.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=lr(-n[0]*Da,-n[1]*Da,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Pa,n[1]*=Pa}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=gr((t=+r)*Da,u*Da),n):t},n.precision=function(r){return arguments.length?(e=gr(t*Da,(u=+r)*Da),n):u},n.angle(90)},ta.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Da,u=n[1]*Da,i=t[1]*Da,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),l=Math.cos(u),s=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=l*s-c*f*a)*e),c*s+l*f*a)},ta.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ta.range(Math.ceil(i/d)*d,u,d).map(h).concat(ta.range(Math.ceil(l/m)*m,c,m).map(g)).concat(ta.range(Math.ceil(r/p)*p,e,p).filter(function(n){return ga(n%d)>Ca}).map(s)).concat(ta.range(Math.ceil(a/v)*v,o,v).filter(function(n){return ga(n%m)>Ca}).map(f))}var e,r,u,i,o,a,c,l,s,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],l=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[i,l],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,s=vr(a,o,90),f=dr(r,e,y),h=vr(l,c,90),g=dr(i,u,y),n):y},n.majorExtent([[-180,-90+Ca],[180,90-Ca]]).minorExtent([[-180,-80-Ca],[180,80+Ca]])},ta.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=mr,u=yr;return n.distance=function(){return ta.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},ta.geo.interpolate=function(n,t){return Mr(n[0]*Da,n[1]*Da,t[0]*Da,t[1]*Da)},ta.geo.length=function(n){return Yc=0,ta.geo.stream(n,Zc),Yc};var Yc,Zc={sphere:b,point:b,lineStart:xr,lineEnd:b,polygonStart:b,polygonEnd:b},Vc=br(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ta.geo.azimuthalEqualArea=function(){return ur(Vc)}).raw=Vc;var Xc=br(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},y);(ta.geo.azimuthalEquidistant=function(){return ur(Xc)}).raw=Xc,(ta.geo.conicConformal=function(){return Ye(_r)}).raw=_r,(ta.geo.conicEquidistant=function(){return Ye(wr)}).raw=wr;var $c=br(function(n){return 1/n},Math.atan);(ta.geo.gnomonic=function(){return ur($c)}).raw=$c,Sr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Ra]},(ta.geo.mercator=function(){return kr(Sr)}).raw=Sr;var Bc=br(function(){return 1},Math.asin);(ta.geo.orthographic=function(){return ur(Bc)}).raw=Bc;var Wc=br(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ta.geo.stereographic=function(){return ur(Wc)}).raw=Wc,Er.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Ra]},(ta.geo.transverseMercator=function(){var n=kr(Er),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Er,ta.geom={},ta.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=Et(e),i=Et(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(zr),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var l=Cr(a),s=Cr(c),f=s[0]===l[0],h=s[s.length-1]===l[l.length-1],g=[];for(t=l.length-1;t>=0;--t)g.push(n[a[l[t]][2]]);for(t=+f;t<s.length-h;++t)g.push(n[a[s[t]][2]]);return g}var e=Ar,r=Nr;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ta.geom.polygon=function(n){return ya(n,Jc),n};var Jc=ta.geom.polygon.prototype=[];Jc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},Jc.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},Jc.clip=function(n){for(var t,e,r,u,i,o,a=Tr(n),c=-1,l=this.length-Tr(this),s=this[l-1];++c<l;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],qr(o,s,u)?(qr(i,s,u)||n.push(Lr(i,o,s,u)),n.push(o)):qr(i,s,u)&&n.push(Lr(i,o,s,u)),i=o;a&&n.push(n[0]),s=u}return n};var Gc,Kc,Qc,nl,tl,el=[],rl=[];Or.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Yr),t.length},Qr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},nu.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=uu(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(eu(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ru(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(ru(this,e),n=e,e=n.U),e.C=!1,r.C=!0,eu(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?uu(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,eu(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ru(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,eu(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,ru(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,eu(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,ru(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},ta.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return iu(e(n),a).cells.forEach(function(e,a){var c=e.edges,l=e.site,s=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):l.x>=r&&l.x<=i&&l.y>=u&&l.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];s.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Ca)*Ca,y:Math.round(o(n,t)/Ca)*Ca,i:t}})}var r=Ar,u=Nr,i=r,o=u,a=ul;return n?t(n):(t.links=function(n){return iu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return iu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Yr),c=-1,l=a.length,s=a[l-1].edge,f=s.l===o?s.r:s.l;++c<l;)u=s,i=f,s=a[c].edge,f=s.l===o?s.r:s.l,r<i.i&&r<f.i&&au(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=Et(r=n),t):r},t.y=function(n){return arguments.length?(o=Et(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?ul:n,t):a===ul?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===ul?null:a&&a[1]},t)};var ul=[[-1e6,-1e6],[1e6,1e6]];ta.geom.delaunay=function(n){return ta.geom.voronoi().triangles(n)},ta.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,s=n.y;if(null!=c)if(ga(c-e)+ga(s-r)<.01)l(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,l(n,f,c,s,u,i,o,a),l(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else l(n,t,e,r,u,i,o,a)}function l(n,t,e,r,u,o,a,c){var l=.5*(u+a),s=.5*(o+c),f=e>=l,h=r>=s,g=h<<1|f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=su()),f?u=l:a=l,h?o=s:c=s,i(n,t,e,r,u,o,a,c)}var s,f,h,g,p,v,d,m,y,M=Et(a),x=Et(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)s=n[g],s.x<v&&(v=s.x),s.y<d&&(d=s.y),s.x>m&&(m=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);v>b&&(v=b),d>_&&(d=_),b>m&&(m=b),_>y&&(y=_),f.push(b),h.push(_)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=su();if(k.add=function(n){i(k,n,+M(n,++g),+x(n,g),v,d,m,y)},k.visit=function(n){fu(n,k,v,d,m,y)},k.find=function(n){return hu(k,n[0],n[1],v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=s=null,k}var o,a=Ar,c=Nr;return(o=arguments.length)?(a=cu,c=lu,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},ta.interpolateRgb=gu,ta.interpolateObject=pu,ta.interpolateNumber=vu,ta.interpolateString=du;var il=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,ol=new RegExp(il.source,"g");ta.interpolate=mu,ta.interpolators=[function(n,t){var e=typeof t;return("string"===e?Ga.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?gu:du:t instanceof ot?gu:Array.isArray(t)?yu:"object"===e&&isNaN(t)?pu:vu)(n,t)}],ta.interpolateArray=yu;var al=function(){return y},cl=ta.map({linear:al,poly:ku,quad:function(){return _u},cubic:function(){return wu},sin:function(){return Eu},exp:function(){return Au},circle:function(){return Nu},elastic:Cu,back:zu,bounce:function(){return qu}}),ll=ta.map({"in":y,out:xu,"in-out":bu,"out-in":function(n){return bu(xu(n))}});ta.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=cl.get(e)||al,r=ll.get(r)||y,Mu(r(e.apply(null,ea.call(arguments,1))))},ta.interpolateHcl=Lu,ta.interpolateHsl=Tu,ta.interpolateLab=Ru,ta.interpolateRound=Du,ta.transform=function(n){var t=ua.createElementNS(ta.ns.prefix.svg,"g");return(ta.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Pu(e?e.matrix:sl)})(n)},Pu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var sl={a:1,b:0,c:0,d:1,e:0,f:0};ta.interpolateTransform=Hu,ta.layout={},ta.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Yu(n[e]));return t}},ta.layout.chord=function(){function n(){var n,l,f,h,g,p={},v=[],d=ta.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(l=0,g=-1;++g<i;)l+=u[h][g];v.push(l),m.push(ta.range(i)),n+=l}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(La-s*i)/n,l=0,h=-1;++h<i;){for(f=l,g=-1;++g<i;){var y=d[h],M=m[y][g],x=u[y][M],b=l,_=l+=x*n;p[y+"-"+M]={index:y,subindex:M,startAngle:b,endAngle:_,value:x}}r[y]={index:y,startAngle:f,endAngle:l,value:(l-f)/n},l+=s}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,l={},s=0;return l.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,l):u},l.padding=function(n){return arguments.length?(s=n,e=r=null,l):s},l.sortGroups=function(n){return arguments.length?(o=n,e=r=null,l):o},l.sortSubgroups=function(n){return arguments.length?(a=n,e=null,l):a},l.sortChords=function(n){return arguments.length?(c=n,e&&t(),l):c},l.chords=function(){return e||n(),e},l.groups=function(){return r||n(),r},l},ta.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var l=t.charge/c;n.px-=i*l,n.py-=o*l}return!0}if(t.point&&c&&p>c){var l=t.pointCharge/c;n.px-=i*l,n.py-=o*l}}return!t.charge}}function t(n){n.px=ta.event.x,n.py=ta.event.y,a.resume()}var e,r,u,i,o,a={},c=ta.dispatch("start","tick","end"),l=[1,1],s=.9,f=fl,h=hl,g=-30,p=gl,v=.1,d=.64,m=[],M=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,y,x,b=m.length,_=M.length;for(e=0;_>e;++e)a=M[e],f=a.source,h=a.target,y=h.x-f.x,x=h.y-f.y,(p=y*y+x*x)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,y*=p,x*=p,h.x-=y*(d=f.weight/(h.weight+f.weight)),h.y-=x*d,f.x+=y*(d=1-d),f.y+=x*d);if((d=r*v)&&(y=l[0]/2,x=l[1]/2,e=-1,d))for(;++e<b;)a=m[e],a.x+=(y-a.x)*d,a.y+=(x-a.y)*d;if(g)for(Ju(t=ta.geom.quadtree(m),r,o),e=-1;++e<b;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<b;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*s,a.y-=(a.py-(a.py=a.y))*s);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(M=n,a):M},a.size=function(n){return arguments.length?(l=n,a):l},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(s=+n,a):s},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),ta.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;s>a;++a){var u=M[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,l=o.length;++a<l;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,s=M.length,p=l[0],v=l[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;s>t;++t)r=M[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;s>t;++t)u[t]=+f.call(this,M[t],t);else for(t=0;s>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;s>t;++t)i[t]=+h.call(this,M[t],t);else for(t=0;s>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=ta.behavior.drag().origin(y).on("dragstart.force",Xu).on("drag.force",t).on("dragend.force",$u)),arguments.length?void this.on("mouseover.force",Bu).on("mouseout.force",Wu).call(e):e},ta.rebind(a,c,"on")};var fl=20,hl=1,gl=1/0;ta.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(l=e.call(n,i,i.depth))&&(c=l.length)){for(var c,l,s;--c>=0;)o.push(s=l[c]),s.parent=i,s.depth=i.depth+1;r&&(i.value=0),i.children=l}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Qu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=ei,e=ni,r=ti;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Ku(t,function(n){n.children&&(n.value=0)}),Qu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ta.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,l=-1;for(r=t.value?r/t.value:0;++l<o;)n(a=i[l],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=ta.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},Gu(e,r)},ta.layout.pie=function(){function n(o){var a,c=o.length,l=o.map(function(e,r){return+t.call(n,e,r)}),s=+("function"==typeof r?r.apply(this,arguments):r),f=("function"==typeof u?u.apply(this,arguments):u)-s,h=Math.min(Math.abs(f)/c,+("function"==typeof i?i.apply(this,arguments):i)),g=h*(0>f?-1:1),p=(f-c*g)/ta.sum(l),v=ta.range(c),d=[];return null!=e&&v.sort(e===pl?function(n,t){return l[t]-l[n]}:function(n,t){return e(o[n],o[t])}),v.forEach(function(n){d[n]={data:o[n],value:a=l[n],startAngle:s,endAngle:s+=a*p+g,padAngle:h}}),d}var t=Number,e=pl,r=0,u=La,i=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n.padAngle=function(t){return arguments.length?(i=t,n):i},n};var pl={};ta.layout.stack=function(){function n(a,c){if(!(h=a.length))return a;var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,s,c);l=ta.permute(l,f),s=ta.permute(s,f);var h,g,p,v,d=r.call(n,s,c),m=l[0].length;for(p=0;m>p;++p)for(u.call(n,l[0][p],v=d[p],s[0][p][1]),g=1;h>g;++g)u.call(n,l[g][p],v+=s[g-1][p][1],s[g][p][1]);return a}var t=y,e=ai,r=ci,u=oi,i=ui,o=ii;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:vl.get(t)||ai,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:dl.get(t)||ci,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var vl=ta.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(li),i=n.map(si),o=ta.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return ta.range(n.length).reverse()},"default":ai}),dl=ta.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];s>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ci});ta.layout.histogram=function(){function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=l[i],a>=s[0]&&a<=s[1]&&(o=c[ta.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=pi,u=hi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=Et(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return gi(n,t)}:Et(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ta.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Qu(a,function(n){n.r=+s(n.value)}),Qu(a,Mi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/l))/2;Qu(a,function(n){n.r+=f}),Qu(a,Mi),Qu(a,function(n){n.r-=f})}return _i(a,c/2,l/2,t?1:1/Math.max(2*a.r/c,2*a.r/l)),o}var t,e=ta.layout.hierarchy().sort(vi),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Gu(n,e)},ta.layout.tree=function(){function n(n,u){var s=o.call(this,n,u),f=s[0],h=t(f);if(Qu(h,e),h.parent.m=-h.z,Ku(h,r),l)Ku(f,i);else{var g=f,p=f,v=f;Ku(f,function(n){n.x<g.x&&(g=n),n.x>p.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);Ku(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return s}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Ni(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],l=u.m,s=i.m,f=o.m,h=c.m;o=Ei(o),u=ki(u),o&&u;)c=ki(c),i=Ei(i),i.a=n,r=o.z+f-u.z-l+a(o._,u._),r>0&&(Ai(Ci(o,n,e),n,r),l+=r,s+=r),f+=o.m,l+=u.m,h+=c.m,s+=i.m;o&&!Ei(i)&&(i.t=o,i.m+=f-s),u&&!ki(c)&&(c.t=u,c.m+=l-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=ta.layout.hierarchy().sort(null).value(null),a=Si,c=[1,1],l=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(l=null==(c=t)?i:null,n):l?null:c},n.nodeSize=function(t){return arguments.length?(l=null==(c=t)?null:i,n):l?c:null},Gu(n,o)},ta.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;Qu(c,function(n){var t=n.children;t&&t.length?(n.x=qi(t),n.y=zi(t)):(n.x=o?l+=e(n,o):0,n.y=0,o=n)});var s=Li(c),f=Ti(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Qu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=ta.layout.hierarchy().sort(null).value(null),e=Si,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Gu(n,t)},ta.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i.slice(),p=1/0,v="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(o=h[c-1]),s.area+=o.area,"squarify"!==g||(a=r(s,v))<=p?(h.pop(),p=a):(s.area-=s.pop().area,u(s,v,l,!1),v=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(u(s,v,l,!0),s.length=s.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++i<o;)u=n[i],u.x=a,u.y=l,u.dy=s,a+=u.dx=Math.min(e.x+e.dx-a,s?c(u.area/s):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);++i<o;)u=n[i],u.x=a,u.y=l,u.dx=s,l+=u.dy=Math.min(e.y+e.dy-l,s?c(u.area/s):0);u.z=!1,u.dy+=e.y+e.dy-l,e.x+=s,e.dx-=s}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=l[0],i.dy=l[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=ta.layout.hierarchy(),c=Math.round,l=[1,1],s=null,f=Ri,h=!1,g="squarify",p=.5*(1+Math.sqrt(5)); return i.size=function(n){return arguments.length?(l=n,i):l},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Ri(t):Di(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Di(t,n)}if(!arguments.length)return s;var r;return f=null==(s=n)?Ri:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Gu(i,a)},ta.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=ta.random.normal.apply(ta,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ta.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ta.scale={};var ml={floor:y,ceil:y};ta.scale.linear=function(){return Ii([0,1],[0,1],mu,!1)};var yl={s:1,g:1,p:1,r:1,e:1};ta.scale.log=function(){return Ji(ta.scale.linear().domain([0,1]),10,!0,[1,10])};var Ml=ta.format(".0e"),xl={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ta.scale.pow=function(){return Gi(ta.scale.linear(),1,[0,1])},ta.scale.sqrt=function(){return ta.scale.pow().exponent(.5)},ta.scale.ordinal=function(){return Qi([],{t:"range",a:[[]]})},ta.scale.category10=function(){return ta.scale.ordinal().range(bl)},ta.scale.category20=function(){return ta.scale.ordinal().range(_l)},ta.scale.category20b=function(){return ta.scale.ordinal().range(wl)},ta.scale.category20c=function(){return ta.scale.ordinal().range(Sl)};var bl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(Mt),_l=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(Mt),wl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(Mt),Sl=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(Mt);ta.scale.quantile=function(){return no([],[])},ta.scale.quantize=function(){return to(0,1,[0,1])},ta.scale.threshold=function(){return eo([.5],[0,1])},ta.scale.identity=function(){return ro([0,1])},ta.svg={},ta.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),l=Math.max(0,+r.apply(this,arguments)),s=o.apply(this,arguments)-Ra,f=a.apply(this,arguments)-Ra,h=Math.abs(f-s),g=s>f?0:1;if(n>l&&(p=l,l=n,n=p),h>=Ta)return t(l,g)+(n?t(n,1-g):"")+"Z";var p,v,d,m,y,M,x,b,_,w,S,k,E=0,A=0,N=[];if((m=(+c.apply(this,arguments)||0)/2)&&(d=i===kl?Math.sqrt(n*n+l*l):+i.apply(this,arguments),g||(A*=-1),l&&(A=tt(d/l*Math.sin(m))),n&&(E=tt(d/n*Math.sin(m)))),l){y=l*Math.cos(s+A),M=l*Math.sin(s+A),x=l*Math.cos(f-A),b=l*Math.sin(f-A);var C=Math.abs(f-s-2*A)<=qa?0:1;if(A&&so(y,M,x,b)===g^C){var z=(s+f)/2;y=l*Math.cos(z),M=l*Math.sin(z),x=b=null}}else y=M=0;if(n){_=n*Math.cos(f-E),w=n*Math.sin(f-E),S=n*Math.cos(s+E),k=n*Math.sin(s+E);var q=Math.abs(s-f+2*E)<=qa?0:1;if(E&&so(_,w,S,k)===1-g^q){var L=(s+f)/2;_=n*Math.cos(L),w=n*Math.sin(L),S=k=null}}else _=w=0;if((p=Math.min(Math.abs(l-n)/2,+u.apply(this,arguments)))>.001){v=l>n^g?0:1;var T=null==S?[_,w]:null==x?[y,M]:Lr([y,M],[S,k],[x,b],[_,w]),R=y-T[0],D=M-T[1],P=x-T[0],U=b-T[1],j=1/Math.sin(Math.acos((R*P+D*U)/(Math.sqrt(R*R+D*D)*Math.sqrt(P*P+U*U)))/2),F=Math.sqrt(T[0]*T[0]+T[1]*T[1]);if(null!=x){var H=Math.min(p,(l-F)/(j+1)),O=fo(null==S?[_,w]:[S,k],[y,M],l,H,g),I=fo([x,b],[_,w],l,H,g);p===H?N.push("M",O[0],"A",H,",",H," 0 0,",v," ",O[1],"A",l,",",l," 0 ",1-g^so(O[1][0],O[1][1],I[1][0],I[1][1]),",",g," ",I[1],"A",H,",",H," 0 0,",v," ",I[0]):N.push("M",O[0],"A",H,",",H," 0 1,",v," ",I[0])}else N.push("M",y,",",M);if(null!=S){var Y=Math.min(p,(n-F)/(j-1)),Z=fo([y,M],[S,k],n,-Y,g),V=fo([_,w],null==x?[y,M]:[x,b],n,-Y,g);p===Y?N.push("L",V[0],"A",Y,",",Y," 0 0,",v," ",V[1],"A",n,",",n," 0 ",g^so(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-g," ",Z[1],"A",Y,",",Y," 0 0,",v," ",Z[0]):N.push("L",V[0],"A",Y,",",Y," 0 0,",v," ",Z[0])}else N.push("L",_,",",w)}else N.push("M",y,",",M),null!=x&&N.push("A",l,",",l," 0 ",C,",",g," ",x,",",b),N.push("L",_,",",w),null!=S&&N.push("A",n,",",n," 0 ",q,",",1-g," ",S,",",k);return N.push("Z"),N.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=io,r=oo,u=uo,i=kl,o=ao,a=co,c=lo;return n.innerRadius=function(t){return arguments.length?(e=Et(t),n):e},n.outerRadius=function(t){return arguments.length?(r=Et(t),n):r},n.cornerRadius=function(t){return arguments.length?(u=Et(t),n):u},n.padRadius=function(t){return arguments.length?(i=t==kl?kl:Et(t),n):i},n.startAngle=function(t){return arguments.length?(o=Et(t),n):o},n.endAngle=function(t){return arguments.length?(a=Et(t),n):a},n.padAngle=function(t){return arguments.length?(c=Et(t),n):c},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Ra;return[Math.cos(t)*n,Math.sin(t)*n]},n};var kl="auto";ta.svg.line=function(){return ho(y)};var El=ta.map({linear:go,"linear-closed":po,step:vo,"step-before":mo,"step-after":yo,basis:So,"basis-open":ko,"basis-closed":Eo,bundle:Ao,cardinal:bo,"cardinal-open":Mo,"cardinal-closed":xo,monotone:To});El.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Al=[0,2/3,1/3,0],Nl=[0,1/3,2/3,0],Cl=[0,1/6,2/3,1/6];ta.svg.line.radial=function(){var n=ho(Ro);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},mo.reverse=yo,yo.reverse=mo,ta.svg.area=function(){return Do(y)},ta.svg.area.radial=function(){var n=Do(Ro);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ta.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)-Ra,s=l.call(n,u,r)-Ra;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>qa)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=mr,o=yr,a=Po,c=ao,l=co;return n.radius=function(t){return arguments.length?(a=Et(t),n):a},n.source=function(t){return arguments.length?(i=Et(t),n):i},n.target=function(t){return arguments.length?(o=Et(t),n):o},n.startAngle=function(t){return arguments.length?(c=Et(t),n):c},n.endAngle=function(t){return arguments.length?(l=Et(t),n):l},n},ta.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=mr,e=yr,r=Uo;return n.source=function(e){return arguments.length?(t=Et(e),n):t},n.target=function(t){return arguments.length?(e=Et(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ta.svg.diagonal.radial=function(){var n=ta.svg.diagonal(),t=Uo,e=n.projection;return n.projection=function(n){return arguments.length?e(jo(t=n)):t},n},ta.svg.symbol=function(){function n(n,r){return(zl.get(t.call(this,n,r))||Oo)(e.call(this,n,r))}var t=Ho,e=Fo;return n.type=function(e){return arguments.length?(t=Et(e),n):t},n.size=function(t){return arguments.length?(e=Et(t),n):e},n};var zl=ta.map({circle:Oo,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Ll)),e=t*Ll;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/ql),e=t*ql/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/ql),e=t*ql/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ta.svg.symbolTypes=zl.keys();var ql=Math.sqrt(3),Ll=Math.tan(30*Da);_a.transition=function(n){for(var t,e,r=Tl||++Ul,u=Xo(n),i=[],o=Rl||{time:Date.now(),ease:Su,delay:0,duration:250},a=-1,c=this.length;++a<c;){i.push(t=[]);for(var l=this[a],s=-1,f=l.length;++s<f;)(e=l[s])&&$o(e,s,u,r,o),t.push(e)}return Yo(i,u,r)},_a.interrupt=function(n){return this.each(null==n?Dl:Io(Xo(n)))};var Tl,Rl,Dl=Io(Xo()),Pl=[],Ul=0;Pl.call=_a.call,Pl.empty=_a.empty,Pl.node=_a.node,Pl.size=_a.size,ta.transition=function(n,t){return n&&n.transition?Tl?n.transition(t):n:ta.selection().transition(n)},ta.transition.prototype=Pl,Pl.select=function(n){var t,e,r,u=this.id,i=this.namespace,o=[];n=N(n);for(var a=-1,c=this.length;++a<c;){o.push(t=[]);for(var l=this[a],s=-1,f=l.length;++s<f;)(r=l[s])&&(e=n.call(r,r.__data__,s,a))?("__data__"in r&&(e.__data__=r.__data__),$o(e,s,i,u,r[i][u]),t.push(e)):t.push(null)}return Yo(o,i,u)},Pl.selectAll=function(n){var t,e,r,u,i,o=this.id,a=this.namespace,c=[];n=C(n);for(var l=-1,s=this.length;++l<s;)for(var f=this[l],h=-1,g=f.length;++h<g;)if(r=f[h]){i=r[a][o],e=n.call(r,r.__data__,h,l),c.push(t=[]);for(var p=-1,v=e.length;++p<v;)(u=e[p])&&$o(u,p,a,o,i),t.push(u)}return Yo(c,a,o)},Pl.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=O(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Yo(u,this.namespace,this.id)},Pl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(u){u[r][e].tween.set(n,t)})},Pl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Hu:mu,a=ta.ns.qualify(n);return Zo(this,"attr."+n,t,a.local?i:u)},Pl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=ta.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Pl.style=function(n,e,r){function u(){this.style.removeProperty(n)}function i(e){return null==e?u:(e+="",function(){var u,i=t(this).getComputedStyle(this,null).getPropertyValue(n);return i!==e&&(u=mu(i,e),function(t){this.style.setProperty(n,u(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Zo(this,"style."+n,e,i)},Pl.styleTween=function(n,e,r){function u(u,i){var o=e.call(this,u,i,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,u)},Pl.text=function(n){return Zo(this,"text",n,Vo)},Pl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Pl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ta.ease.apply(ta,arguments)),Y(this,function(r){r[e][t].ease=n}))},Pl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,u,i){r[e][t].delay=+n.call(r,r.__data__,u,i)}:(n=+n,function(r){r[e][t].delay=n}))},Pl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,u,i){r[e][t].duration=Math.max(1,n.call(r,r.__data__,u,i))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Pl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var u=Rl,i=Tl;try{Tl=e,Y(this,function(t,u,i){Rl=t[r][e],n.call(t,t.__data__,u,i)})}finally{Rl=u,Tl=i}}else Y(this,function(u){var i=u[r][e];(i.event||(i.event=ta.dispatch("start","end","interrupt"))).on(n,t)});return this},Pl.transition=function(){for(var n,t,e,r,u=this.id,i=++Ul,o=this.namespace,a=[],c=0,l=this.length;l>c;c++){a.push(n=[]);for(var t=this[c],s=0,f=t.length;f>s;s++)(e=t[s])&&(r=e[o][u],$o(e,s,o,i,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Yo(a,o,i)},ta.svg.axis=function(){function n(n){n.each(function(){var n,l=ta.select(this),s=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):y:t,p=l.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Ca),d=ta.transition(p.exit()).style("opacity",Ca).remove(),m=ta.transition(p.order()).style("opacity",1),M=Math.max(u,0)+o,x=Ui(f),b=l.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ta.transition(b));v.append("line"),v.append("text");var w,S,k,E,A=v.select("line"),N=m.select("line"),C=p.select("text").text(g),z=v.select("text"),q=m.select("text"),L="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=Bo,w="x",k="y",S="x2",E="y2",C.attr("dy",0>L?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+L*i+"V0H"+x[1]+"V"+L*i)):(n=Wo,w="y",k="x",S="y2",E="x2",C.attr("dy",".32em").style("text-anchor",0>L?"end":"start"),_.attr("d","M"+L*i+","+x[0]+"H0V"+x[1]+"H"+L*i)),A.attr(E,L*u),z.attr(k,L*M),N.attr(S,0).attr(E,L*u),q.attr(w,0).attr(k,L*M),f.rangeBand){var T=f,R=T.rangeBand()/2;s=f=function(n){return T(n)+R}}else s.rangeBand?s=f:d.call(n,f,s);v.call(n,s,f),m.call(n,f,f)})}var t,e=ta.scale.linear(),r=jl,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Fl?t+"":jl,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var jl="bottom",Fl={top:1,right:1,bottom:1,left:1};ta.svg.brush=function(){function n(t){t.each(function(){var t=ta.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",i).on("touchstart.brush",i),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,y);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Hl[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var c,f=ta.transition(t),h=ta.transition(o);l&&(c=Ui(l),h.attr("x",c[0]).attr("width",c[1]-c[0]),r(f)),s&&(c=Ui(s),h.attr("y",c[0]).attr("height",c[1]-c[0]),u(f)),e(f)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+f[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",f[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",f[1]-f[0])}function u(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function i(){function i(){32==ta.event.keyCode&&(C||(M=null,q[0]-=f[1],q[1]-=h[1],C=2),S())}function v(){32==ta.event.keyCode&&2==C&&(q[0]+=f[1],q[1]+=h[1],C=0,S())}function d(){var n=ta.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ta.event.altKey?(M||(M=[(f[0]+f[1])/2,(h[0]+h[1])/2]),q[0]=f[+(n[0]<M[0])],q[1]=h[+(n[1]<M[1])]):M=null),A&&m(n,l,0)&&(r(k),t=!0),N&&m(n,s,1)&&(u(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function m(n,t,e){var r,u,i=Ui(t),c=i[0],l=i[1],s=q[e],v=e?h:f,d=v[1]-v[0];return C&&(c-=s,l-=d+s),r=(e?p:g)?Math.max(c,Math.min(l,n[e])):n[e],C?u=(r+=s)+d:(M&&(s=Math.max(c,Math.min(l,2*M[e]-r))),r>s?(u=r,r=s):u=s),v[0]!=r||v[1]!=u?(e?a=null:o=null,v[0]=r,v[1]=u,!0):void 0}function y(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ta.select("body").style("cursor",null),L.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ta.select(ta.event.target),w=c.of(b,arguments),k=ta.select(b),E=_.datum(),A=!/^(n|s)$/.test(E)&&l,N=!/^(e|w)$/.test(E)&&s,C=_.classed("extent"),z=W(b),q=ta.mouse(b),L=ta.select(t(b)).on("keydown.brush",i).on("keyup.brush",v);if(ta.event.changedTouches?L.on("touchmove.brush",d).on("touchend.brush",y):L.on("mousemove.brush",d).on("mouseup.brush",y),k.interrupt().selectAll("*").interrupt(),C)q[0]=f[0]-q[0],q[1]=h[0]-q[1];else if(E){var T=+/w$/.test(E),R=+/^n/.test(E);x=[f[1-T]-q[0],h[1-R]-q[1]],q[0]=f[T],q[1]=h[R]}else ta.event.altKey&&(M=q.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ta.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,c=E(n,"brushstart","brush","brushend"),l=null,s=null,f=[0,0],h=[0,0],g=!0,p=!0,v=Ol[0];return n.event=function(n){n.each(function(){var n=c.of(this,arguments),t={x:f,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Tl?ta.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,f=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=yu(f,t.x),r=yu(h,t.y);return o=a=null,function(u){f=t.x=e(u),h=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(l=t,v=Ol[!l<<1|!s],n):l},n.y=function(t){return arguments.length?(s=t,v=Ol[!l<<1|!s],n):s},n.clamp=function(t){return arguments.length?(l&&s?(g=!!t[0],p=!!t[1]):l?g=!!t:s&&(p=!!t),n):l&&s?[g,p]:l?g:s?p:null},n.extent=function(t){var e,r,u,i,c;return arguments.length?(l&&(e=t[0],r=t[1],s&&(e=e[0],r=r[0]),o=[e,r],l.invert&&(e=l(e),r=l(r)),e>r&&(c=e,e=r,r=c),(e!=f[0]||r!=f[1])&&(f=[e,r])),s&&(u=t[0],i=t[1],l&&(u=u[1],i=i[1]),a=[u,i],s.invert&&(u=s(u),i=s(i)),u>i&&(c=u,u=i,i=c),(u!=h[0]||i!=h[1])&&(h=[u,i])),n):(l&&(o?(e=o[0],r=o[1]):(e=f[0],r=f[1],l.invert&&(e=l.invert(e),r=l.invert(r)),e>r&&(c=e,e=r,r=c))),s&&(a?(u=a[0],i=a[1]):(u=h[0],i=h[1],s.invert&&(u=s.invert(u),i=s.invert(i)),u>i&&(c=u,u=i,i=c))),l&&s?[[e,u],[r,i]]:l?[e,r]:s&&[u,i])},n.clear=function(){return n.empty()||(f=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!l&&f[0]==f[1]||!!s&&h[0]==h[1]},ta.rebind(n,c,"on")};var Hl={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Ol=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Il=ac.format=gc.timeFormat,Yl=Il.utc,Zl=Yl("%Y-%m-%dT%H:%M:%S.%LZ");Il.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Jo:Zl,Jo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Jo.toString=Zl.toString,ac.second=Ft(function(n){return new cc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ac.seconds=ac.second.range,ac.seconds.utc=ac.second.utc.range,ac.minute=Ft(function(n){return new cc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ac.minutes=ac.minute.range,ac.minutes.utc=ac.minute.utc.range,ac.hour=Ft(function(n){var t=n.getTimezoneOffset()/60;return new cc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ac.hours=ac.hour.range,ac.hours.utc=ac.hour.utc.range,ac.month=Ft(function(n){return n=ac.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ac.months=ac.month.range,ac.months.utc=ac.month.utc.range;var Vl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Xl=[[ac.second,1],[ac.second,5],[ac.second,15],[ac.second,30],[ac.minute,1],[ac.minute,5],[ac.minute,15],[ac.minute,30],[ac.hour,1],[ac.hour,3],[ac.hour,6],[ac.hour,12],[ac.day,1],[ac.day,2],[ac.week,1],[ac.month,1],[ac.month,3],[ac.year,1]],$l=Il.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",Ne]]),Bl={range:function(n,t,e){return ta.range(Math.ceil(n/e)*e,+t,e).map(Ko)},floor:y,ceil:y};Xl.year=ac.year,ac.scale=function(){return Go(ta.scale.linear(),Xl,$l)};var Wl=Xl.map(function(n){return[n[0].utc,n[1]]}),Jl=Yl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",Ne]]);Wl.year=ac.year.utc,ac.scale.utc=function(){return Go(ta.scale.linear(),Wl,Jl)},ta.text=At(function(n){return n.responseText}),ta.json=function(n,t){return Nt(n,"application/json",Qo,t)},ta.html=function(n,t){return Nt(n,"text/html",na,t)},ta.xml=At(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(ta):"object"==typeof module&&module.exports&&(module.exports=ta),this.d3=ta}();</script> <style type="text/css">.profvis { position: relative; } .profvis * { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; } .profvis-footer .info-label { cursor: default; } .profvis-panel1 { left: 0px; top: 23px; position: absolute; } .profvis-panel1-vertical { bottom: 0px; width: 500px; margin-bottom: 20px; } .profvis-panel1-horizontal { height: 378px; right: 0px; } .profvis-panel2 { position: absolute; right: 0px; bottom: 0px; } .profvis-panel2-vertical { top: 23px; left: 508px; margin-bottom: 20px; } .profvis-panel2-horizontal { left: 0px; top: 408px; margin-bottom: 20px; } .profvis-splitbar { position: absolute; background-color: rgb(224, 224, 224); border-color: #ddd; border-style: solid; background-repeat: no-repeat; background-position: center; } .profvis-splitbar-vertical { cursor: col-resize; left: 500px; width: 8px; top: 23px; bottom: 0px; border-width: 0 1px; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAHCAYAAADNufepAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAADdJREFUeNpMi7ENADAIwwz/H8TEhMQz/JAupWqmyHGI7JoZIrscxMbBbhX+MMbTpG+x/UgCgzMA+a4RzyZ2yIIAAAAASUVORK5CYII='); } .profvis-splitbar-horizontal { cursor: row-resize; top: 400px; height: 8px; left: 0px; right: 0px; border-width: 0px 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAADCAYAAABfwxXFAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAADZJREFUeNpi3LHv+BEGBgYGBob/EIqBkQEGGN+8ecOADfz//5+B5cylW0cgqjF1AgAAAP//AwCtfA4GqIXcdgAAAABJRU5ErkJggg=='); } .profvis-status-bar { position: absolute; padding: 0px 0px; top: 0; left: 0; right: 0; height: 22px; line-height: 18px; border-bottom: 1px solid rgb(196, 201, 204); background-color: rgb(248, 249, 248); color: #444; font-family: "Lucida Sans", "DejaVu Sans", "Lucida Grande", "Segoe UI", Verdana, Helvetica, sans-serif; font-size: 11px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; overflow: hidden; } .profvis-footer { position: absolute; padding: 0px 0px; bottom: 0px; left: 0; right: 0; height: 19px; line-height: 18px; border-top: 1px solid rgb(196, 201, 204); background-color: rgb(248, 249, 248); color: #444; font-family: "Lucida Sans", "DejaVu Sans", "Lucida Grande", "Segoe UI", Verdana, Helvetica, sans-serif; font-size: 11px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; overflow: hidden; } .profvis-status-bar .info-block { display: inline-block; vertical-align: top; width: 140px; padding: 2px 11px 2px 11px; } .profvis-footer .info-block { display: inline-block; vertical-align: top; padding: 1px 11px 1px 11px; } .profvis-footer .info-block-right { display: inline-block; vertical-align: top; padding: 1px 11px 1px 11px; float: right; } .profvis-status-bar .result-block { width: auto; cursor: pointer; } .profvis-status-bar .result-block-active { width: auto; background: rgb(227, 229, 230); } .profvis-status-bar .spacing-block { display: inline-block; width: 25px; } .profvis-status-bar .separator-block { display: inline-block; width: 1px; text-align: center; } .profvis-status-bar .separator-block .separator-image { width: 2px; height: 26px; margin-top: -2px; } .profvis-status-bar .options-button { float: right; color: #444; text-decoration: none; cursor: pointer; padding: 2px 11px 2px 11px; } .profvis-options-panel { float: left; position: absolute; right: 0; top: 21px; padding: 3px 6px; border: 1px solid #999; background-color: #fff; font-family: "Lucida Sans", "DejaVu Sans", "Lucida Grande", "Segoe UI", Verdana, Helvetica, sans-serif; font-size: 11px; line-height: 170%; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer; } .profvis-code { position: absolute; top: 0px; left: 0; bottom: 0; right: 0; overflow-y: auto; border: 0px solid #ddd; } .profvis-flamegraph { position: absolute; right: 0; top: 0; bottom: 0; left: 0; overflow: hidden; border: 0px solid #ddd; background: rgb(249, 249, 250); } table.profvis-table { border-collapse: collapse; font-family: "Lucida Sans", "DejaVu Sans", "Lucida Grande", "Segoe UI", Verdana, Helvetica, sans-serif; font-size: 11px; width: 100%; text-align: left; cursor: default; } table.profvis-table th { background-color: rgb(249, 249, 250); width: 14%; } table.profvis-table th.spacing { width: 20px; } table.profvis-table th.filename { font-family: monospace; padding-left: 10px; width: auto; } table.profvis-table th.percent { text-align: center; } table.profvis-table tr { border-top: 1px solid transparent; border-bottom: 1px solid transparent; vertical-align: top; } table.profvis-table tr.locked > td { border-top: 1px solid #444; border-bottom: 1px solid #444; } table.profvis-table tr > td { padding-top: 0; padding-bottom: 0; } table.profvis-table tr.active { background-color: #fdb; } table.profvis-table .linenum { color: #aaa; padding: 0 15px; font-family: monospace; width: 25px; } table.profvis-table [data-pseudo-content]::before { content: attr(data-pseudo-content); } table.profvis-table .code { white-space: pre-wrap; margin: 0; min-height: 1.25em; line-height: 1.25; width: auto; font-family: monospace; background: transparent; } table.profvis-table .time, table.profvis-table .percent { padding: 0 5px; text-align: right; min-width: 2em; max-width: 2em; overflow: hidden; padding-right: 10px; } table.profvis-table .memory { padding-right: 5px; } table.profvis-table th.time { text-align: center; } table.profvis-table .memory { padding: 0 5px; text-align: right; min-width: 2em; max-width: 4em; overflow: hidden; padding-right: 10px; } table.profvis-table .memory-right { text-align: left; } table.profvis-table th.memory { text-align: center; } table.profvis-table .timebar-cell { padding-left: 0; border-left: 1px solid #444; min-width: 3em; width: 3em; } table.profvis-table .timebar-cell > .timebar { background-color: #5A5A5A; border-radius: 0px 2px 2px 0px; line-height: 15px; } table.profvis-table .membar-left-cell { padding-left: 0; padding-right: 0; border-left: 0px solid black; min-width: 0.5em; width: 0.5em; } table.profvis-table .membar-left-cell > .membar { background-color: #A7A7A7; float: right; border-radius: 2px 0px 0px 2px; line-height: 15px; } table.profvis-table .membar-right-cell { padding-left: 0; border-left: 1px solid black; min-width: 1em; width: 1em; } table.profvis-table .membar-right-cell > .membar { background-color: #5A5A5A; border-radius: 0px 2px 2px 0px; line-height: 15px; } .profvis-flamegraph .background { fill: rgb(249, 249, 250); } .profvis-flamegraph .cell .rect { stroke: #000; stroke-width: 0.25px; fill: #fff; } .profvis-flamegraph .cell.active .rect { stroke-width: 0.75px; fill: #ddd; } .profvis-flamegraph .cell.highlighted .rect { fill: #ffc; } .profvis-flamegraph .cell.highlighted.active .rect { fill: #fdb; } .profvis-flamegraph .cell.output .rect { fill: #eef; } .profvis-flamegraph .cell.gc .rect { fill: #ccc; } .profvis-flamegraph .cell.stacktrace .rect { fill: #eee; } .profvis-flamegraph .cell.stacktrace .profvis-label { fill: #666; } .profvis-flamegraph .cell.locked { font-weight: bold; } .profvis-flamegraph .cell.locked .rect { stroke-width: 2px; } .profvis-flamegraph .cell .profvis-label { font-family: monospace; font-size: 11px; cursor: default; } .profvis-flamegraph .axis text { font: 10px sans-serif; } .profvis-flamegraph .axis path, .profvis-flamegraph .axis line { fill: none; stroke: #000; shape-rendering: crispEdges; } .profvis-flamegraph .profvis-tooltip rect { fill: rgb(249, 249, 250); stroke: #000; opacity: 0.75; stroke-opacity: 0.75; stroke-width: 0.5; } .profvis-flamegraph .profvis-tooltip text { text-anchor: middle; font-family: monospace; font-size: 11px; } .profvis-infobox { position: absolute; left: 8px; top: 8px; opacity: 0.8; border-radius: 3px; color: #f8f8f8; background-color: #333; padding: 5px 10px; font-family: "Lucida Sans", "DejaVu Sans", "Lucida Grande", "Segoe UI", Verdana, Helvetica, sans-serif; font-size: 11px; line-height: 100%; pointer-events: none; min-width: 280px; } .profvis-infobox table { border-collapse: separate; border-spacing: 2px; } .profvis-infobox table td { padding: 1px; } .profvis-infobox .infobox-title { font-weight: bold; } .profvis-message { width: 100%; height: 100%; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; font-family: "Lucida Sans", "DejaVu Sans", "Lucida Grande", "Segoe UI", Verdana, Helvetica, sans-serif; font-size: 11px; } .profvis-message div { color: #444; height: 25%; } .profvis-treetable { top: 0px; bottom: 0px; left: 0px; right: 0px; position: absolute; margin-top: 23px; margin-bottom: 21px; margin-right: 0px; overflow: hidden; font: 10px sans-serif; color: #161616; font-family: "Lucida Sans", "DejaVu Sans", "Lucida Grande", "Segoe UI", Verdana, Helvetica, sans-serif; font-size: 11px; overflow-y: auto; } .profvis-treetable .results { width: 100%; table-layout: fixed; } .profvis-treetable th { font-weight: normal; height: 18px; background-color: #F8F9F8; border-bottom: solid 1px #E4E4E4; border-right: solid 1px #E4E4E4; padding-left: 3px; padding-right: 3px; } .profvis-treetable td { height: 18px; border-bottom: solid 1px #E4E4E4; border-right: solid 1px #E4E4E4; padding-left: 3px; padding-right: 3px; overflow: hidden; text-overflow: ellipsis; } .profvis-treetable .action { width: 18px; } .profvis-treetable .memory { width: 100px; text-align: right; } .profvis-treetable th { cursor: default; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; overflow: hidden; } .profvis-treetable th.memory { text-align: center; } .profvis-treetable .time { width: 100px; text-align: right; } .profvis-treetable th.time { text-align: center; } .profvis-treetable .count { text-align: right; } .profvis-treetable th.count { text-align: center; } .profvis-treetable th.code-label { text-align: left; padding-left: 5px; } .profvis-treetable td.label-pointer { cursor: pointer; } .profvis-treetable .label-text { display: inline-block; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .profvis-treetable .path { text-align: left; } .profvis-treetable .treetable-expand > div { display: inline-block; width: 15px; } .profvis-treetable .treetable-expand > div > div{ width: 0px; height: 0px; margin-left: 3px; margin-right: 6px; border-top: 4px solid transparent; border-left: 6px solid #161616; border-bottom: 4px solid transparent; } .profvis-treetable .treetable-collapse > div { display: inline-block; width: 15px; } .profvis-treetable .treetable-collapse > div > div { width: 0px; height: 0px; margin-left: 3px; margin-right: 6px; border-right: 4px solid transparent; border-top: 6px solid #161616; border-left: 4px solid transparent; display: inline-block; } .profvis-treetable .time-info { padding: 0px; padding-right: 2px; text-align: right; } .profvis-treetable .timebar { width: 0px; height: 14px; background-color: #5A5A5A; float: left; border-radius: 2px 2px 2px 2px; padding-top: 0px; margin-top: 1px; } .profvis-treetable .timecell { padding-top: 2px; padding-right: 3px; } .profvis-treetable .memory-info { padding-left: 0px; padding-right: 2px; text-align: right; } .profvis-treetable .memory-info-right { padding-left: 2px; padding-right: 0px; text-align: left; } .profvis-treetable .memory-leftbar-wrapper { float: left; height: 14px; width: 5px; } .profvis-treetable .memory-leftbar { width: 2px; height: 14px; background-color: #A7A7A7; float: right; border-radius: 1px 0px 0px 1px; } .profvis-treetable .memory-rightbar { width: 2px; float: left; height: 14px; background-color: #5A5A5A; border-radius: 0px 1px 1px 0px; } .profvis-treetable .memory-cell { } .profvis-treetable .memory-bar-container { margin-right: 3px; } .profvis-treetable .time-bar-container { margin-right: 3px; } </style> <script>/*jshint undef:true, browser:true, devel: true, jquery:true, strict:false, curly:false, indent:2 */ /*global profvis:true, d3, hljs */ profvis = (function() { var profvis = {}; profvis.render = function(el, message) { function generateStatusBarButton(id, caption, active) { var spacerImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAUCAYAAACnOeyiAAAAXklEQVR42mNgAIL///8zMYSGhjIDGYIMIiIMvECGMwMDN4M4kFEDUqIIZKwDMdSBjAsghj6Q8QPEMAAy/lOBoQekv4AYKkDGfgZeXl4RICOLQUtLiw3IUAJJMQIZ7AC2tU2tXJxOYgAAAABJRU5ErkJggg=='; var buttonHtml = '<div id="' + id + '" class="info-block ' + (active ? 'result-block-active' : 'result-block') + '"><span class="info-label">' + caption + '</span></div>' + '<div class="separator-block"><img class="separator-image" src="' + spacerImage + '"></div>'; return buttonHtml; } function generateStatusBar(el, onToogle) { var $el = $(el); el.innerHTML = generateStatusBarButton('flameGraphButton', 'Flame Graph', true) + generateStatusBarButton('treetableButton', 'Data', false) + '<span role="button" class="options-button">Options ▾</span>'; $el.find("span.options-button").on("click", function(e) { e.preventDefault(); e.stopPropagation(); vis.optionsPanel.toggleVisibility(); }); var setStatusBarButtons = function(e) { $(".info-block").removeClass("result-block-active"); $(".info-block").addClass("result-block"); e.addClass("result-block-active"); }; $el.find("#flameGraphButton").on("click", function() { setStatusBarButtons($(this)); onToogle("flamegraph"); }); $el.find("#treetableButton").on("click", function() { setStatusBarButtons($(this)); onToogle("treetable"); }); return { el: el }; } function generateFooter(el, onToogle) { var $el = $(el); el.innerHTML = '<div class="info-block"><span class="info-label">Sample Interval: ' + vis.interval + 'ms</span></div>' + '<div class="info-block-right">' + // '<span class="info-label" title="Peak memory allocation">' + (Math.round(vis.totalMem * 100) / 100) + 'MB</span>' + // ' / ' + '<span class="info-label" title="Total time">' + vis.totalTime + 'ms</span>' + '</div>'; return { el: el }; } function generateOptionsPanel(el, onOptionsChange) { var $el = $(el); el.innerHTML = '<div role="button" class="split-horizontal">' + '<span class="options-checkbox" data-checked="1">' + (vis.splitDir === "h" ? '☒' : '☐') + '</span> Split horizontally' + '</div>' + '<div role="button" class="hide-internal">' + '<span class="options-checkbox" data-checked="1">☒</span> Hide internal function calls' + '</div>' + '<div role="button" class="hide-zero-row">' + '<span class="options-checkbox" data-checked="0">☐</span> Hide lines of code with zero time' + '</div>' + '<div role="button" class="hide-memory">' + '<span class="options-checkbox" data-checked="0">☐</span> Hide memory results' + '</div>'; // Toggle the appearance of a checkbox and return the new checked state. function toggleCheckbox($checkbox) { // Use attr() instead of data(), because the latter tries to coerce to // numbers, which complicates our comparisons. var checked = $checkbox.attr("data-checked"); if (checked === "0") { $checkbox.attr("data-checked", "1"); $checkbox.html("☒"); return true; } else { $checkbox.attr("data-checked", "0"); $checkbox.html("☐"); return false; } } $el.find(".split-horizontal") .on("click", function() { var checked = toggleCheckbox($(this).find(".options-checkbox")); onOptionsChange("split", checked); }); $el.find(".hide-internal") .on("click", function() { var checked = toggleCheckbox($(this).find(".options-checkbox")); onOptionsChange("internals", checked); }); $el.find(".hide-memory") .on("click", function() { var checked = toggleCheckbox($(this).find(".options-checkbox")); onOptionsChange("memory", checked); }); // Make the "hide internal" option available or unavailable to users function enableHideInternal() { $el.find(".hide-internal").css("display", ""); } function disableHideInternal() { $el.find(".hide-internal").css("display", "none"); } // By default, start with it unavailable; it's only relevant for Shiny // apps. disableHideInternal(); $el.find(".hide-zero-row") .on("click", function() { var checked = toggleCheckbox($(this).find(".options-checkbox")); if (checked) { vis.codeTable.hideZeroTimeRows(); } else { vis.codeTable.showZeroTimeRows(); } }); el.style.visibility = "hidden"; function toggleVisibility(offset) { if (el.style.visibility === "visible") { el.style.visibility = "hidden"; } else { el.style.visibility = "visible"; $(document).on("click", hideOnClickOutside); } } // Hide the panel when a click happens outside. This handler also removes // itself after it fires. function hideOnClickOutside(e) { var $el = $(el); if (!$el.is(e.target) && $el.has(e.target).length === 0) { el.style.visibility = "hidden"; // Unregister this event listener $(document).off("click", hideOnClickOutside); } } return { el: el, toggleVisibility: toggleVisibility, enableHideInternal: enableHideInternal, disableHideInternal: disableHideInternal }; } function notifySourceFileMessage(d, details) { if (window.parent.postMessage) { window.parent.postMessage({ source: "profvis", message: "sourcefile", file: d.filename, normpath: d.normpath ? d.normpath : getNormPath(vis.files, d.filename), line: d.linenum, details: details }, window.location.origin); } } function roundOneDecimalNum(number, decimals) { return Math.round(number * 10) / 10; } function roundOneDecimal(number, decimals) { if (!number) return 0; return roundOneDecimalNum(number).toFixed(1); } // Generate the code table ---------------------------------------- function generateCodeTable(el) { var useMemory = false; var content = d3.select(el); if (vis.fileLineStats.length === 0) { content.append("div") .attr("class", "profvis-message") .append("div") .text("(Sources not available)"); } // One table for each file var tables = content.selectAll("table") .data(vis.fileLineStats) .enter() .append("table") .attr("class", "profvis-table"); // Table headers var headerRows = tables.append("tr"); headerRows.append("th") .attr("colspan", "2") .attr("class", "filename") .text(function(d) { return d.filename; }); var percentTooltip = "Percentage of tracked execution time"; var percentMemTooltip = "Percentage of peak memory deallocation and allocation"; headerRows.append("th") .attr("class", "table-memory memory") .attr("colspan", "4") .text("Memory"); headerRows.append("th") .attr("class", "time") .attr("colspan", "2") .text("Time"); headerRows.append("th") .attr("class", "spacing") .attr("data-pseudo-content", "\u00a0"); // Insert each line of code var rows = tables.selectAll("tr.code-row") .data(function(d) { return d.lineData; }) .enter() .append("tr") .attr("class", "code-row"); // Use pseudo-content and CSS content rule to make text unselectable and // uncopyable. See https://danoc.me/blog/css-prevent-copy/ rows.append("td") .attr("class", "linenum") .attr("data-pseudo-content", function(d) { return d.linenum; }); rows.append("td") .attr("class", "code r") .text(function(d) { return d.content; }) .each(function() { hljs.highlightBlock(this); }); rows.append("td") .attr("class", "table-memory memory") .attr("title", "Memory deallocation (MB)") .attr("data-pseudo-content", function(d) { return roundOneDecimalNum(d.sumMemDealloc) !== 0 ? roundOneDecimal(d.sumMemDealloc) : ""; }); rows.append("td") .attr("class", "table-memory membar-left-cell") .append("div") .attr("class", "membar") .attr("title", percentMemTooltip) .style("width", function(d) { var p = Math.min(Math.abs(Math.min(Math.round(d.propMemDealloc * 100), 0)), 100); // 8% is the minimal size that looks visually appealing while drawing an almost empty bar p = roundOneDecimalNum(d.sumMemDealloc) !== 0 ? Math.max(p, 8) : 0; return p + "%"; }) // Add the equivalent of to be added with CSS content .attr("data-pseudo-content", "\u00a0"); rows.append("td") .attr("class", "table-memory membar-right-cell") .append("div") .attr("class", "membar") .attr("title", percentMemTooltip) .style("width", function(d) { var p = Math.min(Math.max(Math.round(d.propMemAlloc * 100), 0), 100); // 4% is the minimal size that looks visually appealing while drawing an almost empty bar p = roundOneDecimalNum(d.sumMemAlloc) !== 0 ? Math.max(p, 4) : 0; return p + "%"; }) // Add the equivalent of to be added with CSS content .attr("data-pseudo-content", "\u00a0"); rows.append("td") .attr("class", "table-memory memory memory-right") .attr("title", "Memory allocation (MB)") .attr("data-pseudo-content", function(d) { return roundOneDecimalNum(d.sumMemAlloc) !== 0 ? roundOneDecimal(d.sumMemAlloc) : ""; }); rows.append("td") .attr("class", "time") .attr("title", "Total time (ms)") .attr("data-pseudo-content", function(d) { return Math.round(d.sumTime * 100) !== 0 ? (Math.round(d.sumTime * 100) / 100) : ""; }); rows.append("td") .attr("class", "timebar-cell") .append("div") .attr("class", "timebar") .attr("title", percentTooltip) .style("width", function(d) { return Math.round(d.propTime * 100) + "%"; }) // Add the equivalent of to be added with CSS content .attr("data-pseudo-content", "\u00a0"); rows.append("td") .attr("class", "spacing") .attr("data-pseudo-content", "\u00a0"); rows .on("click", function(d) { // Info box is only relevant when mousing over flamegraph vis.infoBox.hide(); highlighter.click(d); notifySourceFileMessage(d, "select"); }) .on("mouseover", function(d) { if (highlighter.isLocked()) return; // Info box is only relevant when mousing over flamegraph vis.infoBox.hide(); highlighter.hover(d); }) .on("mouseout", function(d) { if (highlighter.isLocked()) return; highlighter.hover(null); }) .on("dblclick", function(d) { notifySourceFileMessage(d, "open"); }); function hideZeroTimeRows() { rows .filter(function(d) { return d.sumTime === 0; }) .style("display", "none"); } function showZeroTimeRows() { rows .filter(function(d) { return d.sumTime === 0; }) .style("display", ""); } function addLockHighlight(d) { var target = d; rows .filter(function(d) { return d === target; } ) .classed({ locked: true }); } function clearLockHighlight() { rows .filter(".locked") .classed({ locked: false }); } function addActiveHighlight(d) { // If we have filename and linenum, search for cells that match, and // set them as "active". var target = d; if (target.filename && target.linenum) { var tr = rows .filter(function(d) { return d.linenum === target.linenum && d.filename === target.filename; }) .classed({ active: true }); tr.node().scrollIntoViewIfNeeded(); } } function clearActiveHighlight() { rows .filter(".active") .classed({ active: false }); } function enableScroll() { // TODO: implement this } function disableScroll() { } function useMemoryResults() { d3.selectAll(".table-memory").style("display", vis.hideMemory ? "none" : ""); } return { el: el, hideZeroTimeRows: hideZeroTimeRows, showZeroTimeRows: showZeroTimeRows, addLockHighlight: addLockHighlight, clearLockHighlight: clearLockHighlight, addActiveHighlight: addActiveHighlight, clearActiveHighlight: clearActiveHighlight, enableScroll: enableScroll, disableScroll: disableScroll, useMemoryResults: useMemoryResults }; } var highlighter = (function() { // D3 data objects for the currently locked and active items var lockItem = null; var activeItem = null; function isLocked() { return lockItem !== null; } function currentLock() { return lockItem; } function currentActive() { return activeItem; } // This is called when a flamegraph cell or a line of code is clicked on. // Clicks also should trigger hover events. function click(d) { // If d is null (background is clicked), or if locked and this click // is on the currently locked selection, just unlock and return. if (d === null || (lockItem && d === lockItem)) { lockItem = null; vis.flameGraph.clearLockHighlight(); vis.codeTable.clearLockHighlight(); return; } // If nothing currently locked, or if locked and this click is on // something other than the currently locked selection, then lock the // current selection. lockItem = d; vis.flameGraph.clearLockHighlight(); vis.codeTable.clearLockHighlight(); hover(null); vis.flameGraph.addLockHighlight(d); vis.codeTable.addLockHighlight(d); hover(d); } function hover(d) { activeItem = d; if (activeItem) { vis.flameGraph.addActiveHighlight(activeItem); vis.codeTable.addActiveHighlight(activeItem); return; } vis.flameGraph.clearActiveHighlight(); vis.codeTable.clearActiveHighlight(); } return { isLocked: isLocked, currentLock: currentLock, currentActive: currentActive, click: click, hover: hover }; })(); // Generate the flame graph ----------------------------------------------- function generateFlameGraph(el) { el.innerHTML = ""; var stackHeight = 15; // Height of each layer on the stack, in pixels var zoomMargin = 0.02; // Extra margin on sides when zooming to fit // Dimensions ----------------------------------------------------------- // Margin inside the svg where the plotting occurs var dims = { margin: { top: 0, right: 0, left: 0, bottom: 30 } }; dims.width = el.clientWidth - dims.margin.left - dims.margin.right; dims.height = el.clientHeight - dims.margin.top - dims.margin.bottom; var domains = { x: [ d3.min(vis.prof, function(d) { return d.startTime; }), d3.max(vis.prof, function(d) { return d.endTime; }) ], y: [ d3.min(vis.prof, function(d) { return d.depth; }) - 1, d3.max(vis.prof, function(d) { return d.depth; }) ] }; // Slightly expand x domain domains.x = expandRange(domains.x, zoomMargin); // Scales --------------------------------------------------------------- var scales = { x: d3.scale.linear() .domain(domains.x) .range([0, dims.width]), y: d3.scale.linear() .domain(domains.y) .range([dims.height, dims.height - (domains.y[1] - domains.y[0]) * stackHeight]), // This will be a function that, given a data point, returns the depth. // This function can change; sometimes it returns the original depth, // and sometimes it returns the collapsed depth. This isn't exactly a // scale function, but it's close enough for our purposes. getDepth: null }; function useCollapsedDepth() { scales.getDepth = function(d) { return d.depthCollapsed; }; } function useUncollapsedDepth() { scales.getDepth = function(d) { return d.depth; }; } useCollapsedDepth(); // SVG container objects ------------------------------------------------ var svg = d3.select(el).append('svg'); var clipRect = svg.append("clipPath") .attr("id", "clip-" + vis.el.id) .append("rect"); var container = svg.append('g') .attr("transform", "translate(" + dims.margin.left + "," + dims.margin.top + ")") .attr("clip-path", "url(" + urlNoHash() + "#clip-" + vis.el.id + ")"); // Add a background rect so we have something to grab for zooming/panning var backgroundRect = container.append("rect") .attr("class", "background"); // Axes ------------------------------------------------------------ var xAxis = d3.svg.axis() .scale(scales.x) .orient("bottom"); svg.append("g") .attr("class", "x axis") .call(xAxis); // Container sizing ----------------------------------------------------- // Update dimensions of various container elements, based on the overall // dimensions of the containing div. function updateContainerSize() { dims.width = el.clientWidth - dims.margin.left - dims.margin.right; dims.height = el.clientHeight - dims.margin.top - dims.margin.bottom; svg .attr('width', dims.width + dims.margin.left + dims.margin.right) .attr('height', dims.height + dims.margin.top + dims.margin.bottom); clipRect .attr("x", dims.margin.left) .attr("y", dims.margin.top) .attr("width", dims.width) .attr("height", dims.height); backgroundRect .attr("width", dims.width) .attr("height", dims.height); svg.select(".x.axis") .attr("transform", "translate(" + dims.margin.left + "," + dims.height + ")"); } // Redrawing ------------------------------------------------------------ // Redrawing is a little complicated. For performance reasons, the // flamegraph cells that are offscreen aren't rendered; they're removed // from the D3 selection of cells. However, when transitions are // involved, it may be necssary to add objects in their correct // off-screen starting locations before the transition, and then do the // transition. Similarly, it may be necssary to transition objects to // their correct off-screen ending positions. // // In order to handle this, whenever there's a transition, we need to // have the scales for before the transition, and after. When a function // invokes a transition, it will generally do the following: (1) save the // previous scales, (2) modify the current scales, (3) call a redraw // function. The redraw functions are customized for different types of // transitions, and they will use the saved previous scales to position // objects correctly for the transition. When there's no transition, the // previous scales aren't needed, and the redrawImmediate() function // should be used. // Cache cells for faster access (avoid a d3.select()) var cells; // For a data element, return identifying key function dataKey(d) { return d.depth + "-" + d.startTime + "-" + d.endTime; } // For transitions with animation, we need to have a copy of the previous // scales in addition to the current ones. var prevScales = {}; function savePrevScales() { prevScales = { x: scales.x.copy(), y: scales.y.copy(), getDepth: scales.getDepth }; } savePrevScales(); // Returns a D3 selection of the cells that are within the plotting // region, using a set of scales. function selectActiveCells(scales) { var xScale = scales.x; var yScale = scales.y; var depth = scales.getDepth; var width = dims.width; var height = dims.height; var data = vis.prof.filter(function(d) { var depthVal = depth(d); return !(xScale(d.endTime) < 0 || xScale(d.startTime) > width || depthVal === null || yScale(depthVal - 1) < 0 || yScale(depthVal) > height); }); cells = container.selectAll("g.cell").data(data, dataKey); return cells; } // Given an enter selection, add the rect and text objects, but don't // position them. Returns a selection of the new <g> elements. // This should usually be called with addItems(sel.enter()) instead // of sel.enter().call(addItems), because the latter returns the original // enter selection, not the selection of <g> elements, and can't be // used for chaining more function calls on the <g> selection. function addItems(enterSelection) { var cells = enterSelection.append("g") .attr("class", "cell") .classed("highlighted", function(d) { return d.filename !== null; }) .call(addMouseEventHandlers); // Add CSS classes for highlighting cells with labels that match particular // regex patterns. var highlightPatterns = d3.entries(message.highlight); highlightPatterns.map(function(item) { var cssClass = item.key; var regexp = new RegExp(item.value); cells.classed(cssClass, function(d) { return d.label.search(regexp) !== -1; }); }); cells.append("rect") .attr("class", "rect"); cells.append("text") .attr("class", "profvis-label") .text(function(d) { return d.label; }); return cells; } // Given a selection, position the rects and labels, using a set of // scales. function positionItems(cells, scales) { var xScale = scales.x; var yScale = scales.y; var depth = scales.getDepth; cells.select("rect") .attr("width", function(d) { return xScale(d.endTime) - xScale(d.startTime); }) .attr("height", yScale(0) - yScale(1)) .attr("x", function(d) { return xScale(d.startTime); }) .attr("y", function(d) { return yScale(depth(d)); }); cells.select("text") .attr("x", function(d) { // To place the labels, check if there's enough space to fit the // label plus padding in the rect. (We already know the label fits // without padding if we got here.) // * If there's not enough space, simply center the label in the // rect. // * If there is enough space, keep the label within the rect, with // padding. Try to left-align, keeping the label within the // viewing area if possible. // Padding on left and right var pad = 2; var textWidth = getLabelWidth(this, d.label.length); var rectWidth = xScale(d.endTime) - xScale(d.startTime); if (textWidth + pad*2 > rectWidth) { return xScale(d.startTime) + (rectWidth - textWidth) / 2; } else { return Math.min( Math.max(0, xScale(d.startTime)) + pad, xScale(d.endTime) - textWidth - pad ); } }) .attr("y", function(d) { return yScale(depth(d) - 0.8); }); return cells; } // Redraw without a transition (regular panning and zooming) function redrawImmediate() { cells = selectActiveCells(scales); cells.exit().remove(); addItems(cells.enter()) .call(addLockHighlightSelection, highlighter.currentLock()) .call(addActiveHighlightSelection, highlighter.currentActive()); cells.call(positionItems, scales); cells.select('text') .call(updateLabelVisibility); svg.select(".x.axis").call(xAxis); } // Redraw for double-click zooming, where there's a transition function redrawZoom(duration) { // Figure out if we're zooming in or out. This will determine when we // recalculate the label visibility: before or after the transition. var prevExtent = prevScales.x.domain()[1] - prevScales.x.domain()[0]; var curExtent = scales.x.domain()[1] - scales.x.domain()[0]; var zoomIn = curExtent < prevExtent; cells = selectActiveCells(scales); // Phase 1 // Add the enter items, highlight them, and position them using the // previous scales addItems(cells.enter()) .call(addLockHighlightSelection, highlighter.currentLock()) .call(addActiveHighlightSelection, highlighter.currentActive()) .call(positionItems, prevScales); // If zooming out, update label visibility. This will hide some labels // now, before the transition, ensuring that they will never be larger // than the box. if (!zoomIn) { cells.select('text') .call(updateLabelVisibility); } // Phase 2 // Position the update (and enter) items using the new scales cells .transition().duration(duration) .call(positionItems, scales); // Position the exit items using the new scales cells.exit() .transition().duration(duration) .call(positionItems, scales); // Update x axis svg.select(".x.axis") .transition().duration(duration) .call(xAxis); // Phase 3 // If zooming in, update label visibility. This will hide some labels // now, after the transition, ensuring that they will never be larger // than the box. if (zoomIn) { cells.select('text') .transition().delay(duration) .call(updateLabelVisibility); } // Remove the exit items cells.exit() .transition().delay(duration) .remove(); } // Redraw when internal functions are hidden function redrawCollapse(exitDuration, updateDuration) { cells = selectActiveCells(scales); // There are two subsets of the exit items: // 1. Those that exit because depth is null. These should fade out. // 2. Those that exit because they move off screen. These should wait // for subset 1 to fade out, then move with a transition. var fadeOutCells = cells.exit() .filter(function(d) { return scales.getDepth(d) === null; }); var moveOutCells = cells.exit() .filter(function(d) { return scales.getDepth(d) !== null; }); // Phase 1 // Add the enter items, highlight them, and position them using the // previous scales addItems(cells.enter()) .call(addLockHighlightSelection, highlighter.currentLock()) .call(addActiveHighlightSelection, highlighter.currentActive()) .call(positionItems, prevScales); cells.select('text') .call(updateLabelVisibility); // Phase 2 // Fade out the items that have a null depth fadeOutCells .transition().duration(exitDuration) .style("opacity", 0); // Phase 3 // Position the update (and enter) items using the new scales cells .transition().delay(exitDuration).duration(updateDuration) .call(positionItems, scales); // Position the exit items that move out, using the new scales moveOutCells .transition().delay(exitDuration).duration(updateDuration) .call(positionItems, scales); // Phase 4 // Remove all the exit items cells.exit() .transition().delay(exitDuration + updateDuration) .remove(); } // Redraw when internal functions are un-hidden function redrawUncollapse(updateDuration, enterDuration) { cells = selectActiveCells(scales); var enterCells = addItems(cells.enter()); // There are two subsets of the enter items: // 1. Those that enter because they move on screen (but the previous // depth was not null). These should move with a transition. // 2. Those that enter because the previous depth was null. These // should wait for subset 1 to move, then fade in. var moveInCells = enterCells .filter(function(d) { return prevScales.getDepth(d) !== null; }); var fadeInCells = enterCells .filter(function(d) { return prevScales.getDepth(d) === null; }); // Phase 1 // Highlight and position the move-in items with the old scales moveInCells .call(addLockHighlightSelection, highlighter.currentLock()) .call(addActiveHighlightSelection, highlighter.currentActive()) .call(positionItems, prevScales); cells.select('text') .call(updateLabelVisibility); // Phase 2 // Position the move-in, update, and exit items with a transition moveInCells .transition().duration(updateDuration) .call(positionItems, scales); cells .transition().duration(updateDuration) .call(positionItems, scales); cells.exit() .transition().duration(updateDuration) .call(positionItems, scales); // Phase 3 // Highlight and position the fade-in items, then fade in fadeInCells .call(addLockHighlightSelection, highlighter.currentLock()) .call(addActiveHighlightSelection, highlighter.currentActive()) .call(positionItems, scales) .style("opacity", 0) .transition().delay(updateDuration).duration(enterDuration) .style("opacity", 1); // Phase 4 // Remove the exit items cells.exit() .transition().delay(updateDuration + enterDuration) .remove(); } // Calculate whether to display label in each cell ---------------------- // Finding the dimensions of SVG elements is expensive. We'll reduce the // calls getBoundingClientRect() by caching the dimensions. // Cache the width of labels. This is a lookup table which, given the // number of characters, gives the number of pixels. The label width // never changes, so we can keep it outside of updateLabelVisibility(). var labelWidthTable = {}; function getLabelWidth(el, nchar) { // Add entry if it doesn't already exist if (labelWidthTable[nchar] === undefined) { // If the text isn't displayed, then we can't get its width. Make // sure it's visible, get the width, and then restore original // display state. var oldDisplay = el.style.display; el.style.display = "inline"; labelWidthTable[nchar] = el.getBoundingClientRect().width; el.style.display = oldDisplay; } return labelWidthTable[nchar]; } // Show labels that fit in the corresponding rectangle, and hide others. function updateLabelVisibility(labels) { // Cache the width of rects. This is a lookup table which, given the // timespan (width in data), gives the number of pixels. The width of // rects changes with the x scale, so we have to rebuild the table each // time the scale changes. var rectWidthTable = {}; var x0 = scales.x(0); function getRectWidth(time) { // Add entry if it doesn't already exist if (rectWidthTable[time] === undefined) { rectWidthTable[time] = scales.x(time) - x0; } return rectWidthTable[time]; } // Now calculate text and rect width for each cell. labels.style("display", function(d) { var labelWidth = getLabelWidth(this, d.label.length); var boxWidth = getRectWidth(d.endTime - d.startTime); return (labelWidth <= boxWidth) ? "" : "none"; }); return labels; } function onResize() { updateContainerSize(); scales.x.range([0, dims.width]); zoom.x(scales.x); // Preserve distance from bottom, instead of from top (which is the // default behavior). scales.y.range([ dims.height, dims.height - (domains.y[1] - domains.y[0]) * stackHeight ]); redrawImmediate(); } // Attach mouse event handlers ------------------------------------ var dragging = false; function addMouseEventHandlers(cells) { cells .on("mouseup", function(d) { if (dragging) return; // If it wasn't a drag, treat it as a click vis.infoBox.show(d); highlighter.click(d); notifySourceFileMessage(d, "select"); }) .on("mouseover", function(d) { if (dragging) return; // If no label currently shown, display a tooltip var label = this.querySelector(".profvis-label"); if (label.style.display === "none") { var box = this.getBBox(); showTooltip( d.label, box.x + box.width / 2, box.y - box.height ); } if (!highlighter.isLocked()) { vis.infoBox.show(d); highlighter.hover(d); } }) .on("mouseout", function(d) { if (dragging) return; hideTooltip(); if (!highlighter.isLocked()) { vis.infoBox.hide(); highlighter.hover(null); } }) .on("dblclick.zoomcell", function(d) { // When a cell is double-clicked, zoom x to that cell's width. savePrevScales(); scales.x.domain(expandRange([d.startTime, d.endTime], zoomMargin)); zoom.x(scales.x); redrawZoom(250); notifySourceFileMessage(d, "open"); }); return cells; } // Tooltip -------------------------------------------------------- function showTooltip(label, x, y) { var tooltip = container.append("g").attr("class", "profvis-tooltip"); var tooltipRect = tooltip.append("rect"); var tooltipLabel = tooltip.append("text") .text(label) .attr("x", x) .attr("y", y + stackHeight * 0.2); // Shift down slightly for baseline // Add box around label var labelBox = tooltipLabel.node().getBBox(); var rectWidth = labelBox.width + 10; var rectHeight = labelBox.height + 4; tooltipRect .attr("width", rectWidth) .attr("height", rectHeight) .attr("x", x - rectWidth / 2) .attr("y", y - rectHeight / 2) .attr("rx", 4) // Rounded corners -- can't set this in CSS .attr("ry", 4); } function hideTooltip() { container.select("g.profvis-tooltip").remove(); } // Highlighting --------------------------------------------------------- function addLockHighlight(d) { addLockHighlightSelection(cells, d); } function clearLockHighlight() { cells .filter(".locked") .classed({ locked: false }); } function addActiveHighlight(d) { if (!d) return; addActiveHighlightSelection(cells, d); } function clearActiveHighlight() { cells .filter(".active") .classed({ active: false }); } // These are versions of addLockHighlight and addActiveHighlight which // are only internally visible. It must be passed a selection of cells to // perform the highlighting on. This can be more efficient because it can // operate on just an enter selection instead of all cells. function addLockHighlightSelection(selection, d) { if (!d) return; var target = d; selection .filter(function(d) { return d === target; } ) .classed({ locked: true }) .call(moveToFront); } function addActiveHighlightSelection(selection, d) { if (!d) return; var target = d; if (target.filename && target.linenum) { selection .filter(function(d) { // Check for filename and linenum match, and if provided, a label match. var match = d.filename === target.filename && d.linenum === target.linenum; if (!!target.label) { match = match && (d.label === target.label); } return match; }) .classed({ active: true }); } else if (target.label) { // Don't highlight blocks for these labels var exclusions = ["<Anonymous>", "FUN"]; if (exclusions.some(function(x) { return target.label === x; })) { return; } // If we only have the label, search for cells that match, but make sure // to not select ones that have a filename and linenum. selection .filter(function(d) { return d.label === target.label && d.filename === null && d.linenum === null; }) .classed({ active: true }); } } // Move a D3 selection to front. If this is called on a selection, that // selection should have been created with a data indexing function (e.g. // data(data, function(d) { return ... })). Otherwise, the wrong object // may be moved to the front. function moveToFront(selection) { return selection.each(function() { this.parentNode.appendChild(this); }); } // Panning and zooming -------------------------------------------- // For panning and zooming x, d3.behavior.zoom does most of what we want // automatically. For panning y, we can't use d3.behavior.zoom becuase it // will also automatically add zooming, which we don't want. Instead, we // need to use d3.behavior.drag and set the y domain appropriately. var drag = d3.behavior.drag() .on("drag", function() { dragging = true; var y = scales.y; var ydom = y.domain(); var ydiff = y.invert(d3.event.dy) - y.invert(0); y.domain([ydom[0] - ydiff, ydom[1] - ydiff]); }); // For mousewheel zooming, we need to limit zoom amount. This is needed // because in Firefox, zoom increments are too big. To do this, we limit // scaleExtent before the first zoom event, and after each subsequent // one. // // When zooming out, there's an additional limit: never zoom out past // the original zoom span. The reason it's necessary to calculate this // each time, instead of simply setting the scaleExtent() so that the // lower bound is 1, is because other zoom events (like // dblclick.zoomcell) are able to change the domain of scales.x, without // changing the value of zoom.scale(). This means that the relationship // between the zoom.scale() does not have a fixed linear relationship to // the span of scales.x, and we have to recalculate it. var maxZoomPerStep = 1.1; function zoomOutLimit() { var span = scales.x.domain()[1] - scales.x.domain()[0]; var startSpan = domains.x[1] - domains.x[0]; return Math.min(maxZoomPerStep, startSpan/span); } var zoom = d3.behavior.zoom() .x(scales.x) .on("zoomstart", function() { zoom.scaleExtent([zoom.scale() / zoomOutLimit(), zoom.scale() * maxZoomPerStep]); }) .on("zoom", function(e) { redrawImmediate(); zoom.scaleExtent([zoom.scale() / zoomOutLimit(), zoom.scale() * maxZoomPerStep]); }); // Register drag before zooming, because we need the drag to set the y // scale before the zoom triggers a redraw. svg .on("mouseup", function(d) { dragging = false; }) .call(drag); // Unlock selection when background is clicked, and zoom out when // background is double-clicked. backgroundRect .on("mouseup", function(d) { if (dragging) return; // If it wasn't a drag, hide info box and unlock. vis.infoBox.hide(); highlighter.click(null); }) .on("dblclick.zoombackground", function() { savePrevScales(); scales.x.domain(domains.x); zoom.x(scales.x); redrawZoom(250); }); var zoomEnabled = false; function disableZoom() { if (zoomEnabled) { svg.on(".zoom", null); zoomEnabled = false; } } function enableZoom() { if (!zoomEnabled) { svg .call(zoom) .on("dblclick.zoom", null); // Disable zoom's built-in double-click behavior zoomEnabled = true; } } enableZoom(); onResize(); return { el: el, onResize: onResize, onUpdateInternals: onResize, redrawImmediate: redrawImmediate, redrawZoom: redrawZoom, redrawCollapse: redrawCollapse, redrawUncollapse: redrawUncollapse, savePrevScales: savePrevScales, useCollapsedDepth: useCollapsedDepth, useUncollapsedDepth: useUncollapsedDepth, addLockHighlight: addLockHighlight, clearLockHighlight: clearLockHighlight, addActiveHighlight: addActiveHighlight, clearActiveHighlight: clearActiveHighlight, disableZoom: disableZoom, enableZoom: enableZoom }; } // generateFlameGraph function initInfoBox(el) { function show(d) { var label = d.label ? d.label : ""; var ref = (d.filename && d.linenum) ? (d.filename + "#" + d.linenum) : "(source unavailable)"; el.style.visibility = ""; el.innerHTML = "<table>" + "<tr><td class='infobox-title'>Label</td><td>" + escapeHTML(label) + "</td></tr>" + "<tr><td class='infobox-title'>Called from</td><td>" + escapeHTML(ref) + "</td></tr>" + "<tr><td class='infobox-title'>Total time</td><td>" + (d.endTime - d.startTime) + "ms</td></tr>" + "<tr><td class='infobox-title'>Memory</td><td>" + roundOneDecimal(d.sumMemDealloc) + " / " + roundOneDecimal(d.sumMemAlloc) + " MB</td></tr>" + "<tr><td class='infobox-title'>Agg. total time</td><td>" + vis.aggLabelTimes[label] + "ms</td></tr>" + "<tr><td class='infobox-title'>Call stack depth</td><td>" + d.depth + "</td></tr>" + "</table>"; } function hide() { el.style.visibility = "hidden"; } hide(); return { el: el, show: show, hide: hide }; } // Generate the tree table ---------------------------------------- function generateTreetable(el) { var content = d3.select(el); var table = content.append("table") .attr("class", "results") .attr("cellspacing", "0") .attr("cellpadding", "0"); table.append("col"); table.append("col") .style("width", "120px"); table.append("col") .style("width", "50px") .attr("class", "treetable-memory"); table.append("col") .style("width", "26px") .attr("class", "treetable-memory"); table.append("col") .style("width", "50px") .attr("class", "treetable-memory"); table.append("col") .style("width", "50px"); table.append("col") .style("width", "40px"); var tableBody = table.append("tbody"); var headerRows = tableBody.append("tr"); headerRows.append("th") .attr("class", "code-label") .text("Code"); headerRows.append("th") .attr("class", "path") .text("File"); headerRows.append("th") .attr("class", "treetable-memory memory") .attr("colspan", "3") .text("Memory (MB)"); headerRows.append("th") .attr("class", "time") .attr("colspan", "2") .text("Time (ms)"); // Retrieve all nodes (n), recursevely, where check(n) == true. function allTopNodes(nodes, check) { var included = []; nodes = nodes.slice(); while (nodes.length > 0) { var node = nodes.shift(); if (check(node)) included.push(node); else { node.sumChildren.forEach(function(c1) { nodes.unshift(c1); }); } } return included; } // Is there one node (n), including root, where check(n) == true? function oneNode(root, check) { var nodes = [root]; while (nodes.length > 0) { var n = nodes.shift(); if (check(n)) return true; n.sumChildren.forEach(function(x) { nodes.unshift(x); }); } return false; } function updateRowsDisplay(d) { if (vis.hideInternals && d.isInternal) return "none"; else if (!vis.hideInternals && d.isDescendant) return "none"; var collapsed = false; while (d.parent) { d = d.parent; if (d.collapsed) { collapsed = true; break; } } return collapsed ? "none" : ""; } function toggleTreeNode(d) { if (!d.canExpand) return; var collapsed = d.collapsed; if (collapsed === undefined) { // Create a copy since we might insert the same node twice: once // for the normal leaf the other one for a collapsed node. var sumChildren = d.sumChildren.map(function(x) { return jQuery.extend({}, x); }); var childNodes = sumChildren.filter(function(x) { return x.depthCollapsed !== null; }); childNodes.forEach(function(x) { x.isInternal = d.isInternal ? d.isInternal : false; x.isDescendant = d.isDescendant ? d.isDescendant : false; }); var internalChildNodes = sumChildren.filter(function(x) { return x.depthCollapsed === null; }); internalChildNodes.forEach(function(x) { x.isInternal = true; x.isDescendant = false; }); var notInternalDescendantNodes = []; if (!d.isInternal) { notInternalDescendantNodes = allTopNodes(internalChildNodes, function(x) { return x.depthCollapsed !== null && d.depth < x.depth; }); } notInternalDescendantNodes.forEach(function(x) { x.isInternal = false; x.isDescendant = true; }); childNodes = childNodes.concat(internalChildNodes); childNodes = childNodes.concat(notInternalDescendantNodes); childNodes.forEach(function(n) { n.visualDepth = d.visualDepth + 1; n.parent = d; }); vis.profTable = vis.profTable.concat(childNodes); d.collapsed = false; updateRows(); // Nodes are sorted "heaviest first" if (childNodes.length == 1) toggleTreeNode(childNodes[0]); } else { d.collapsed = !collapsed; updateRows(); } } function updateLabelCells(labelCell) { labelCell .attr("nowrap", "true") .style("padding-left", function(d) { return (8 + 15 * (d.visualDepth - 1)) + "px"; }) .on("click", toggleTreeNode) .attr("class", function(d) { d.canExpand = false; if (d.sumChildren) { d.sumChildren.forEach(function(c) { if (c.sumChildren.length > 0) { if (!vis.hideInternals || oneNode(c, function(c1) { return c1.depthCollapsed !== null; })) d.canExpand = true; } }); } var collapsedClass = ""; if (d.canExpand) collapsedClass = d.collapsed === undefined ? "treetable-expand" : d.collapsed ? "treetable-expand" : "treetable-collapse"; return "code-label " + (d.canExpand ? "label-pointer " + collapsedClass : ""); }); } function updateRows() { var rows = tableBody.selectAll("tr.treetable-row") .data(vis.profTable, function(d) { return d.id; }); rows.exit() .remove(); var updatedRows = rows .style("display", updateRowsDisplay); var updatedLabelCells = updatedRows.selectAll("td.code-label"); updateLabelCells(updatedLabelCells); var newRows = rows.enter() .append("tr") .filter(function(d) { if (vis.hideInternals && d.depthCollapsed === null) return false; return true; }) .on("click", function(d) { table.selectAll("tr") .style("background-color", null); this.style.backgroundColor = "rgb(241, 241, 241)"; notifySourceFileMessage(d, "select"); }) .style("display", updateRowsDisplay); newRows .attr("class", "treetable-row"); var labelCell = newRows.append("td"); updateLabelCells(labelCell); var cellWrapper = labelCell.append("div"); cellWrapper.append("div"); labelCell.append("div") .attr("class", "label-text") .text(function(d) { return d.label; }); newRows.append("td") .attr("class", "path") .text(function(d) { var lastSlash = d.filename ? d.filename.lastIndexOf("/") : -1; if (lastSlash >= 0) return d.filename.substr(lastSlash + 1); return d.filename; }); newRows.append("td") .attr("class", "treetable-memory memory-info") .text(function(d) { return roundOneDecimal(d.sumMemDealloc); }); var memoryBarContainer = newRows.append("td") .attr("class", "treetable-memory memory-bar-container"); var memoryLeftCell = memoryBarContainer.append("div") .attr("class", "memory-leftbar-wrapper"); memoryLeftCell.append("div") .attr("class", "memory-leftbar") .style("width", function(d) { return 1 + Math.min(Math.abs(Math.min(Math.round(d.propMemDealloc * 5), 0)), 5) + "px"; }); memoryBarContainer.append("div") .attr("class", "memory-rightbar") .style("width", function(d) { return 1 + Math.min(Math.max(Math.round(d.propMemAlloc * 13), 0), 13) + "px"; }); newRows.append("td") .attr("class", "treetable-memory memory-info-right") .text(function(d) { return roundOneDecimal(d.sumMemAlloc); }); newRows.append("td") .attr("class", "time-info") .text(function(d) { return d.sumTime; }); var timeCell = newRows.append("td") .attr("class", "time-bar-container"); timeCell.append("div") .attr("class", "timebar") .style("width", function(d) { return Math.round(d.propTime * 20) + "px"; }); var unorderedRows = d3.selectAll("tr.treetable-row") .data(vis.profTable, function(d) { return d.id; }); unorderedRows.sort(function(a,b) { return (a.id < b.id) ? -1 : (a.id == b.id ? 0 : 1); }); useMemoryResults(); } var buildProfTable = function (profTree) { var head = jQuery.extend({}, profTree); var nodes = [head]; var aggregateChildren = function(node) { var nameMap = {}; node.children.forEach(function(c) { var nameMapEntry = nameMap[c.label]; if (!nameMapEntry) { nameMapEntry = jQuery.extend({}, c); nameMapEntry.sumTime = c.endTime - c.startTime; nameMapEntry.sumChildren = []; nameMapEntry.children = []; nameMapEntry.parent = node; nameMapEntry.sumCount = 1; } else { nameMapEntry.sumMem = nameMapEntry.sumMem + c.sumMem; nameMapEntry.sumMemDealloc = nameMapEntry.sumMemDealloc + c.sumMemDealloc; nameMapEntry.sumMemAlloc = nameMapEntry.sumMemAlloc + c.sumMemAlloc; nameMapEntry.sumTime = nameMapEntry.sumTime + (c.endTime - c.startTime); nameMapEntry.sumCount = nameMapEntry.sumCount + 1; } nameMapEntry.propMem = nameMapEntry.sumMem / vis.totalMem; nameMapEntry.propMemDealloc = nameMapEntry.sumMemDealloc / vis.totalMem; nameMapEntry.propMemAlloc = nameMapEntry.sumMemAlloc / vis.totalMem; nameMapEntry.propTime = nameMapEntry.sumTime / vis.totalTime; c.children.forEach(function(e) { nameMapEntry.children.push(e); }); nameMap[c.label] = nameMapEntry; }); var childrenSum = []; for (var label in nameMap) { childrenSum.push(nameMap[label]); } // Sort by time descending childrenSum.sort(function(a, b) { return b.sumTime - a.sumTime }); return childrenSum; }; function addToNodesAt(c, i) { nodes.splice(i, 0, c); } var id = 0; while (nodes.length > 0) { var node = nodes.shift(); node.id = id; id = id + 1; node.sumChildren = aggregateChildren(node); // Processing in order is important to preserve order of IDs! node.sumChildren.forEach(addToNodesAt); } return head.sumChildren; }; function useMemoryResults() { d3.selectAll(".treetable-memory").style("display", vis.hideMemory ? "none" : ""); } vis.profTable = buildProfTable(vis.profTree); vis.profTable.forEach(function(e) { e.visualDepth = 1; }); updateRows(); return { el: el, onResize: updateRows, onOptionsChange: updateRows, onUpdateInternals: function() { }, useMemoryResults: useMemoryResults }; } function enableScroll() { vis.codeTable.enableScroll(); vis.flameGraph.enableZoom(); } function disableScroll() { vis.codeTable.disableScroll(); vis.flameGraph.disableZoom(); } // Set up resizing -------------------------------------------------------- // This is used as a jQuery event namespace so that we can remove the window // resize handler on subsequent calls to initResizing(). Not elegant, but it // gets the job done. var resizeCallbackNamespace = randomString(10); // Resize panel1 and panel2 to 50% of available space and add callback // for window resizing. function initResizing() { var $el = $(vis.el); var $panel1 = $el.children(".profvis-panel1"); var $panel2 = $el.children(".profvis-panel2"); var $splitBar = $el.children(".profvis-splitbar"); var $statusBar = $el.children(".profvis-status-bar"); // Clear any existing positioning that may have happened from previous // calls to this function and the callbacks that it sets up. $panel1.removeAttr("style"); $panel2.removeAttr("style"); $splitBar.removeAttr("style"); $statusBar.removeAttr("style"); // CSS class suffix for split direction var splitClass = (vis.splitDir === "h") ? "horizontal" : "vertical"; // Remove existing horizontal/vertical class and add the correct class back. $panel1.removeClass("profvis-panel1-horizontal profvis-panel1-vertical"); $panel2.removeClass("profvis-panel2-horizontal profvis-panel2-vertical"); $splitBar.removeClass("profvis-splitbar-horizontal profvis-splitbar-vertical"); $panel1.addClass("profvis-panel1-" + splitClass); $panel2.addClass("profvis-panel2-" + splitClass); $splitBar.addClass("profvis-splitbar-" + splitClass); var splitBarGap; var margin; // Record the proportions from the previous call to resizePanels. This is // needed when we resize the window to preserve the same proportions. var lastSplitProportion; if (vis.splitDir === "v") { // Record the gap between the split bar and the objects to left and right splitBarGap = { left: $splitBar.offset().left - offsetRight($panel1), right: $panel2.offset().left - offsetRight($splitBar) }; // Capture the initial distance from the left and right of container element margin = { left: $panel1.position().left, right: $el.innerWidth() - positionRight($panel2) }; } else if (vis.splitDir === "h") { splitBarGap = { top: $splitBar.offset().top - offsetBottom($panel1), bottom: $panel2.offset().top - offsetBottom($splitBar) }; margin = { top: $panel1.position().top, bottom: $el.innerWidth() - positionBottom($panel2) }; } // Resize the panels. splitProportion is a number from 0-1 representing the // horizontal position of the split bar. function resizePanels(splitProportion) { if (!splitProportion) splitProportion = lastSplitProportion; if (vis.splitDir === "v") { var innerWidth = offsetRight($panel2) - $panel1.offset().left; $splitBar.offset({ left: $panel1.offset().left + innerWidth * splitProportion - $splitBar.outerWidth()/2 }); // Size and position the panels $panel1.outerWidth($splitBar.position().left - splitBarGap.left - margin.left); $panel2.offset({ left: offsetRight($splitBar) + splitBarGap.right }); } else if (vis.splitDir === "h") { var innerHeight = offsetBottom($panel2) - $panel1.offset().top; $splitBar.offset({ top: $panel1.offset().top + innerHeight * splitProportion - $splitBar.outerHeight()/2 }); // Size and position the panels $panel1.outerHeight($splitBar.position().top - splitBarGap.top - margin.top); $panel2.offset({ top: offsetBottom($splitBar) + splitBarGap.bottom }); } lastSplitProportion = splitProportion; } // Initially, set widths to 50/50 // For the first sizing, we don't need to call vis.flameGraph.onResize() // because this happens before the flame graph is generated. resizePanels(0.5); var resizePanelsDebounced = debounce(function() { resizePanels(lastSplitProportion); vis.activeViews.forEach(function(e) { if (e.onResize) e.onResize(); }); }, 250); // Clear old resize handler and add new one. We use a namespace for this // visualization to make sure not to delete handlers for other profvis // visualizations on the same page (this can happen with Rmd documents). $(window).off("resize.profvis." + resizeCallbackNamespace); $(window).on("resize.profvis." + resizeCallbackNamespace, resizePanelsDebounced); // Get current proportional position of split bar function splitProportion() { var splitCenter; if (vis.splitDir === "v") { splitCenter = $splitBar.offset().left - $panel1.offset().left + $splitBar.outerWidth()/2; var innerWidth = offsetRight($panel2) - $panel1.offset().left; return splitCenter / innerWidth; } else if (vis.splitDir === "h") { splitCenter = $splitBar.offset().top - $panel1.offset().top + $splitBar.outerHeight()/2; var innerHeight = offsetBottom($panel2) - $panel1.offset().top; return splitCenter / innerHeight; } } function positionRight($el) { return $el.position().left + $el.outerWidth(); } function offsetRight($el) { return $el.offset().left + $el.outerWidth(); } function positionBottom($el) { return $el.position().top + $el.outerHeight(); } function offsetBottom($el) { return $el.offset().top + $el.outerHeight(); } // Enable dragging of the split bar --------------------------------------- (function() { var dragging = false; // For vertical split (left-right dragging) var startDragX; var startOffsetLeft; // For horizontal split (up-down dragging) var startDragY; var startOffsetTop; var stopDrag = function(e) { if (!dragging) return; dragging = false; document.removeEventListener("mousemove", drag); document.removeEventListener("mouseup", stopDrag); $splitBar.css("opacity", ""); if ((vis.splitDir === "v" && e.pageX - startDragX === 0) || (vis.splitDir === "h" && e.pageY - startDragY === 0)) { return; } resizePanels(splitProportion()); vis.flameGraph.onResize(); }; var startDrag = function(e) { // Don't start another drag if we're already in one. if (dragging) return; dragging = true; pauseEvent(e); $splitBar.css("opacity", 0.75); if (vis.splitDir === "v") { startDragX = e.pageX; startOffsetLeft = $splitBar.offset().left; } else { startDragY = e.pageY; startOffsetTop = $splitBar.offset().top; } document.addEventListener("mousemove", drag); document.addEventListener("mouseup", stopDrag); }; var drag = function(e) { if (!dragging) return; pauseEvent(e); if (vis.splitDir === "v") { var dx = e.pageX - startDragX; if (dx === 0) return; // Move the split bar $splitBar.offset({ left: startOffsetLeft + dx }); } else if (vis.splitDir === "h") { var dy = e.pageY - startDragY; if (dy === 0) return; // Move the split bar $splitBar.offset({ top: startOffsetTop + dy }); } }; // Stop propogation so that we don't select text while dragging function pauseEvent(e){ if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.preventDefault(); e.cancelBubble = true; e.returnValue = false; return false; } // Remove existing event listener from previous calls to initResizing(). $splitBar.off("mousedown.profvis"); $splitBar.on("mousedown.profvis", startDrag); })(); return { resizePanels: resizePanels }; } var prof = prepareProfData(message.prof, message.interval); var vis = { el: el, prof: prof, profTree: getProfTree(prof), interval: message.interval, totalTime: getTotalTime(prof), totalMem: getTotalMemory(prof), files: message.files, aggLabelTimes: getAggregatedLabelTimes(prof), fileLineStats: getFileLineStats(prof, message.files), profTable: [], // Objects representing each component statusBar: null, optionsPanel: null, codeTable: null, flameGraph: null, infoBox: null, treetable: null, activeViews: [], // Functions to enable/disable responding to scrollwheel events enableScroll: enableScroll, disableScroll: disableScroll, splitDir: message.split, hideInternals: true, hideMemory: false, resizePanels: null }; // Render the objects --------------------------------------------- var statusBarEl = document.createElement("div"); statusBarEl.className = "profvis-status-bar"; vis.el.appendChild(statusBarEl); // Container panels - top/bottom or left/right var panel1 = document.createElement("div"); panel1.className = "profvis-panel1"; vis.el.appendChild(panel1); var panel2 = document.createElement("div"); panel2.className = "profvis-panel2"; vis.el.appendChild(panel2); var splitBarEl = document.createElement("div"); splitBarEl.className = "profvis-splitbar"; vis.el.appendChild(splitBarEl); var footerEl = document.createElement("div"); footerEl.className = "profvis-footer"; vis.el.appendChild(footerEl); // Items in the panels var codeTableEl = document.createElement("div"); codeTableEl.className = "profvis-code"; panel1.appendChild(codeTableEl); var flameGraphEl = document.createElement("div"); flameGraphEl.className = "profvis-flamegraph"; panel2.appendChild(flameGraphEl); var infoBoxEl = document.createElement("div"); infoBoxEl.className = "profvis-infobox"; panel2.appendChild(infoBoxEl); var treetableEl = document.createElement("div"); treetableEl.className = "profvis-treetable"; treetableEl.style.display = "none"; vis.el.appendChild(treetableEl); var optionsPanelEl = document.createElement("div"); optionsPanelEl.className = "profvis-options-panel"; vis.el.appendChild(optionsPanelEl); // Efficient to properly size panels before the code + flamegraph are // rendered, so that we don't have to re-render. var resize = initResizing(); vis.resizePanels = resize.resizePanels; var hideViews = function() { splitBarEl.style.display = "none"; panel1.style.display = "none"; panel2.style.display = "none"; treetableEl.style.display = "none"; }; var toggleViews = function(view) { hideViews(); switch (view) { case "flamegraph": splitBarEl.style.display = "block"; panel1.style.display = "block"; panel2.style.display = "block"; vis.activeViews = [vis.flameGraph, vis.codeTable]; vis.resizePanels(); break; case "treetable": if (!vis.treetable) { vis.treetable = generateTreetable(treetableEl); } treetableEl.style.display = "block"; vis.activeViews = [vis.treetable]; break; } vis.activeViews.forEach(function(e) { if (e.onResize) e.onResize(); }); }; var onOptionsChange = function(option, checked) { switch (option) { case "split": { vis.splitDir = checked ? "h" : "v"; // Check that flame graph is visible if ($.inArray(vis.flameGraph, vis.activeViews) !== -1) { initResizing(); vis.flameGraph.onResize(); } break; } case "internals": { vis.flameGraph.savePrevScales(); vis.hideInternals = checked; if (checked) { vis.flameGraph.useCollapsedDepth(); vis.flameGraph.redrawCollapse(400, 400); } else { vis.flameGraph.useUncollapsedDepth(); vis.flameGraph.redrawUncollapse(400, 250); } vis.activeViews.forEach(function(e) { if (e.onOptionsChange) e.onOptionsChange(); }); break; } case "memory": { vis.hideMemory = checked; vis.activeViews.forEach(function(e) { if (e.useMemoryResults) e.useMemoryResults(); }); break; } } }; // Create the UI components vis.statusBar = generateStatusBar(statusBarEl, toggleViews); vis.footer = generateFooter(footerEl); vis.optionsPanel = generateOptionsPanel(optionsPanelEl, onOptionsChange); vis.codeTable = generateCodeTable(codeTableEl); vis.flameGraph = generateFlameGraph(flameGraphEl); vis.infoBox = initInfoBox(infoBoxEl); vis.treetable = null; vis.activeViews = [vis.flameGraph, vis.codeTable]; // If any depth collapsing occured, enable the "hide internal" checkbox. if (prof.some(function(d) { return d.depth !== d.depthCollapsed; })) { vis.optionsPanel.enableHideInternal(); } // Start with scrolling disabled because of mousewheel scrolling issue disableScroll(); // Make the vis object accessible via the DOM element $(el).data("profvis", vis); return vis; }; // profvis.render() // Calculate amount of time spent on each line of code. Returns nested objects // grouped by file, and then by line number. function getFileLineStats(prof, files) { // Drop entries with null or "" filename prof = prof.filter(function(row) { return row.filename !== null && row.filename !== ""; }); // Gather line-by-line file contents var fileLineStats = files.map(function(file) { // Create array of objects with info for each line of code. var lines = file.content.split("\n"); var lineData = []; var filename = file.filename; var normpath = file.normpath; for (var i=0; i<lines.length; i++) { lineData[i] = { filename: filename, normpath: normpath, linenum: i + 1, content: lines[i], sumTime: 0, sumMem: 0, sumMemAlloc: 0, sumMemDealloc: 0 }; } return { filename: filename, lineData: lineData }; }); // Get timing data for each line var statsData = d3.nest() .key(function(d) { return d.filename; }) .key(function(d) { return d.linenum; }) .rollup(function(leaves) { var sumTime = leaves.reduce(function(sum, d) { // Add this node's time only if no ancestor node has the same // filename and linenum. This is to avoid double-counting times for // a line. var incTime = 0; if (!ancestorHasFilenameLinenum(d.filename, d.linenum, d.parent)) { incTime = d.endTime - d.startTime; } return sum + incTime; }, 0); var sumMem = leaves.reduce(function(sum, d) { return sum + d.sumMem; }, 0); var sumMemDealloc = leaves.reduce(function(sum, d) { return sum + d.sumMemDealloc; }, 0); var sumMemAlloc = leaves.reduce(function(sum, d) { return sum + d.sumMemAlloc; }, 0); return { filename: leaves[0].filename, linenum: leaves[0].linenum, sumTime: sumTime, sumMem: sumMem, sumMemAlloc: sumMemAlloc, sumMemDealloc: sumMemDealloc }; }) .entries(prof); // Insert the sumTimes into line content data statsData.forEach(function(fileInfo) { // Find item in fileTimes that matches the file of this fileInfo object var fileLineData = fileLineStats.filter(function(d) { return d.filename === fileInfo.key; })[0].lineData; fileInfo.values.forEach(function(lineInfo) { lineInfo = lineInfo.values; fileLineData[lineInfo.linenum - 1].sumTime = lineInfo.sumTime; fileLineData[lineInfo.linenum - 1].sumMem = lineInfo.sumMem; fileLineData[lineInfo.linenum - 1].sumMemDealloc = lineInfo.sumMemDealloc; fileLineData[lineInfo.linenum - 1].sumMemAlloc = lineInfo.sumMemAlloc; }); }); // Calculate proportional times, relative to the longest time in the data // set. Modifies data in place. var fileMaxTimes = fileLineStats.map(function(lines) { var lineTimes = lines.lineData.map(function(x) { return x.sumTime; }); return d3.max(lineTimes); }); var maxTime = d3.max(fileMaxTimes); fileLineStats.map(function(lines) { lines.lineData.map(function(line) { line.propTime = line.sumTime / maxTime; }); }); var totalMem = getTotalMemory(prof); fileLineStats.map(function(lines) { lines.lineData.map(function(line) { line.propMem = line.sumMem / totalMem; line.propMemDealloc = line.sumMemDealloc / totalMem; line.propMemAlloc = line.sumMemAlloc / totalMem; }); }); return fileLineStats; // Returns true if the given node or one of its ancestors has the given // filename and linenum; false otherwise. function ancestorHasFilenameLinenum(filename, linenum, node) { if (!node) { return false; } if (node.filename === filename && node.linenum === linenum) { return true; } return ancestorHasFilenameLinenum(filename, linenum, node.parent); } } function prepareProfData(prof, interval) { // Convert object-with-arrays format prof data to array-of-objects format var data = colToRows(prof); data = addParentChildLinks(data); data = consolidateRuns(data); data = applyInterval(data, interval); data = findCollapsedDepths(data); return data; } // Given the raw profiling data, convert `time` and `lastTime` fields to // `startTime` and `endTime`, and use the supplied interval. Modifies data // in place. function applyInterval(prof, interval) { prof.forEach(function(d) { d.startTime = interval * (d.time - 1); d.endTime = interval * (d.lastTime); delete d.time; delete d.lastTime; }); return prof; } // Find the total time spanned in the data function getTotalTime(prof) { return d3.max(prof, function(d) { return d.endTime; }) - d3.min(prof, function(d) { return d.startTime; }); } // Find the total memory spanned in the data function getTotalMemory(prof) { return d3.max(prof, function(d) { return d.memalloc; }); } // Calculate the total amount of time spent in each function label function getAggregatedLabelTimes(prof) { var labelTimes = {}; var tree = getProfTree(prof); calcLabelTimes(tree); return labelTimes; // Traverse the tree with the following strategy: // * Check if current label is used in an ancestor. // * If yes, don't add to times for that label. // * If no, do add to times for that label. // * Recurse into children. function calcLabelTimes(node) { var label = node.label; if (!ancestorHasLabel(label, node.parent)) { if (labelTimes[label] === undefined) labelTimes[label] = 0; labelTimes[label] += node.endTime - node.startTime; } node.children.forEach(calcLabelTimes); } // Returns true if the given node or one of its ancestors has the given // label; false otherwise. function ancestorHasLabel(label, node) { if (node) { if (node.label === label) { return true; } return ancestorHasLabel(label, node.parent); } else { return false; } } } // Given profiling data, add parent and child links to indicate stack // relationships. function addParentChildLinks(prof) { var data = d3.nest() .key(function(d) { return d.time; }) .rollup(function(leaves) { leaves = leaves.sort(function(a, b) { return a.depth - b.depth; }); leaves[0].parent = null; leaves[0].children = []; for (var i=1; i<leaves.length; i++) { leaves[i-1].children.push(leaves[i]); leaves[i].parent = leaves[i-1]; leaves[i].children = []; } return leaves; }) .map(prof); // Convert data from object of arrays to array of arrays data = d3.map(data).values(); // Flatten data return d3.merge(data); } // Given profiling data, consolidate consecutive blocks for a flamegraph. // This function also assigns correct parent-child relationships to form a // tree of data objects, with a hidden root node at depth 0. function consolidateRuns(prof) { // Create a special top-level leaf whose only purpose is to point to its // children, the items at depth 1. var topLeaf = { depth: 0, parent: null, children: prof.filter(function(d) { return d.depth === 1; }) }; var tree = consolidateTree(topLeaf); var data = treeToArray(tree); // Remove the root node from the flattened data data = data.filter(function(d) { return d.depth !== 0; }); return data; function consolidateTree(tree) { var leaves = tree.children; leaves = leaves.sort(function(a, b) { return a.time - b.time; }); // Collapse consecutive leaves, with some conditions var startLeaf = null; // leaf starting this run var lastLeaf = null; // The last leaf we've looked at var newLeaves = []; var collectedChildren = []; var sumMem = 0; var sumMemDealloc = 0; var sumMemAlloc = 0; // This takes the start leaf, end leaf, and the set of children for the // new leaf, and creates a new leaf which copies all its properties from // the startLeaf, except lastTime and children. function addNewLeaf(startLeaf, endLeaf, newLeafChildren, sumMem, sumMemDealloc, sumMemAlloc) { var newLeaf = $.extend({}, startLeaf); newLeaf.lastTime = endLeaf.time; newLeaf.parent = tree; newLeaf.children = newLeafChildren; // Recurse into children newLeaf = consolidateTree(newLeaf); // Aggregate memory from this consolidation batch and their children aggregateMemory(newLeaf, sumMem, sumMemDealloc, sumMemAlloc); newLeaves.push(newLeaf); } function aggregateMemory(leaf, sumMem, sumMemDealloc, sumMemAlloc) { leaf.sumMem = sumMem; leaf.sumMemDealloc = sumMemDealloc; leaf.sumMemAlloc = sumMemAlloc; if (leaf.children) { leaf.children.forEach(function(child) { leaf.sumMem += child.sumMem ? child.sumMem : 0; leaf.sumMemDealloc += child.sumMemDealloc ? child.sumMemDealloc : 0; leaf.sumMemAlloc += child.sumMemAlloc ? child.sumMemAlloc : 0; }); } } for (var i=0; i<leaves.length; i++) { var leaf = leaves[i]; if (i === 0) { startLeaf = leaf; sumMem = sumMemAlloc = sumMemDealloc = 0; } else if (leaf.label !== startLeaf.label || leaf.filename !== startLeaf.filename || leaf.linenum !== startLeaf.linenum || leaf.depth !== startLeaf.depth) { addNewLeaf(startLeaf, lastLeaf, collectedChildren, sumMem, sumMemDealloc, sumMemAlloc); collectedChildren = []; startLeaf = leaf; sumMem = sumMemAlloc = sumMemDealloc = 0; } sumMem += leaf.meminc; sumMemDealloc += Math.min(leaf.meminc, 0); sumMemAlloc += Math.max(leaf.meminc, 0); collectedChildren = collectedChildren.concat(leaf.children); lastLeaf = leaf; } // Add the last one, if there were any at all if (i !== 0) { addNewLeaf(startLeaf, lastLeaf, collectedChildren, sumMem, sumMemDealloc, sumMemAlloc); } tree.children = newLeaves; return tree; } // Given a tree, pull out all the leaves and put them in a flat array function treeToArray(tree) { var allLeaves = []; function pushLeaves(leaf) { allLeaves.push(leaf); leaf.children.forEach(pushLeaves); } pushLeaves(tree); return allLeaves; } } // Given profiling data with parent-child information, get the root node. function getProfTree(prof) { if (prof.length === 0) return null; // Climb up to the top of the tree var node = prof[0]; while (node.parent) { node = node.parent; } return node; } // Given profiling data, find depth of items after hiding items between // items with labels "..stacktraceoff.." and "..stacktraceon..". Modifies // data in place. function findCollapsedDepths(data) { var tree = getProfTree(data); calculateDepths(tree, tree.depth, 0); return data; function calculateDepths(node, curCollapsedDepth, stacktraceOffCount) { if (node.label === "..stacktraceoff..") { stacktraceOffCount++; } if (stacktraceOffCount > 0) { node.depthCollapsed = null; } else { node.depthCollapsed = curCollapsedDepth; curCollapsedDepth++; } if (node.label === "..stacktraceon..") { stacktraceOffCount--; } // Recurse node.children.forEach(function(x) { calculateDepths(x, curCollapsedDepth, stacktraceOffCount); }); } } // Transform column-oriented data (an object with arrays) to row-oriented data // (an array of objects). function colToRows(x) { var colnames = d3.keys(x); if (colnames.length === 0) return []; var newdata = []; for (var i=0; i < x[colnames[0]].length; i++) { var row = {}; for (var j=0; j < colnames.length; j++) { var colname = colnames[j]; row[colname] = x[colname][i]; } newdata[i] = row; } return newdata; } // Given an array with two values (a min and max), return an array with the // range expanded by `amount`. function expandRange(range, amount) { var adjust = amount * (range[1] - range[0]); return [ range[0] - adjust, range[1] + adjust ]; } // Escape an HTML string. function escapeHTML(text) { return text .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } // This returns the current page URL without any trailing hash. Should be // used in url() references in SVGs to avoid problems when there's a <base> // tag in the document. function urlNoHash() { return window.location.href.split("#")[0]; } function debounce(f, delay) { var timer = null; return function() { var context = this; var args = arguments; clearTimeout(timer); timer = setTimeout(function () { f.apply(context, args); }, delay); }; } function randomString(length) { var chars = 'abcdefghijklmnopqrstuvwxyz'; var result = ''; for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]; return result; } var getNormPath = function(files, filename) { var normpath = null; files.forEach(function(e) { if (e.filename == filename) { normpath = e.normpath; } }); return normpath; }; (function() { // Prevent unwanted scroll capturing. Based on the corresponding code in // https://github.com/rstudio/leaflet // The rough idea is that we disable scroll wheel zooming inside each // profvis object, until the user moves the mouse cursor or clicks on the // visualization. This is trickier than just listening for mousemove, // because mousemove is fired when the page is scrolled, even if the user // did not physically move the mouse. We handle this by examining the // mousemove event's screenX and screenY properties; if they change, we know // it's a "true" move. // // There's a complication to this: when the mouse wheel is scrolled quickly, // on the step where the profvis DOM object overlaps the cursor, sometimes // the mousemove event happens before the mousewheel event, and sometimes // it's the reverse (at least on Chrome 46 on Linux). This means that we // can't rely on the mousemove handler disabling the profvis object's zoom // before a scroll event is triggered on the profvis object (cauzing // zooming). In order to deal with this, we start each profvis object with // zooming disabled, and also disable zooming when the cursor leaves the // profvis div. That way, even if a mousewheel event gets triggered on the // object before the mousemove, it won't cause zooming. // lastScreen can never be null, but its x and y can. var lastScreen = { x: null, y: null }; $(document) .on("mousewheel DOMMouseScroll", function(e) { // Any mousemove events at this screen position will be ignored. lastScreen = { x: e.originalEvent.screenX, y: e.originalEvent.screenY }; }) .on("mousemove", ".profvis", function(e) { // Did the mouse really move? if (lastScreen.x !== null && e.screenX !== lastScreen.x || e.screenY !== lastScreen.y) { $(this).data("profvis").flameGraph.enableZoom(); lastScreen = { x: null, y: null }; } }) .on("mousedown", ".profvis", function(e) { // Clicking always enables zooming. $(this).data("profvis").flameGraph.enableZoom(); lastScreen = { x: null, y: null }; }) .on("mouseleave", ".profvis", function(e) { $(this).data("profvis").flameGraph.disableZoom(); }); })(); if (!Element.prototype.scrollIntoViewIfNeeded) { Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) { centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded; var parent = this.parentNode, parentComputedStyle = window.getComputedStyle(parent, null), parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width')), parentBorderLeftWidth = parseInt(parentComputedStyle.getPropertyValue('border-left-width')), overTop = this.offsetTop - parent.offsetTop < parent.scrollTop, overBottom = (this.offsetTop - parent.offsetTop + this.clientHeight - parentBorderTopWidth) > (parent.scrollTop + parent.clientHeight), overLeft = this.offsetLeft - parent.offsetLeft < parent.scrollLeft, overRight = (this.offsetLeft - parent.offsetLeft + this.clientWidth - parentBorderLeftWidth) > (parent.scrollLeft + parent.clientWidth), alignWithTop = overTop && !overBottom; if ((overTop || overBottom) && centerIfNeeded) { parent.scrollTop = this.offsetTop - parent.offsetTop - parent.clientHeight / 2 - parentBorderTopWidth + this.clientHeight / 2; } if ((overLeft || overRight) && centerIfNeeded) { parent.scrollLeft = this.offsetLeft - parent.offsetLeft - parent.clientWidth / 2 - parentBorderLeftWidth + this.clientWidth / 2; } if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) { this.scrollIntoView(alignWithTop); } }; } return profvis; })(); </script> <style type="text/css">span.operator, span.paren { color: rgb(104, 118, 135) } span.literal { color: rgb(88, 72, 246) } span.number { color: rgb(0, 0, 205); } span.comment { color: rgb(76, 136, 107); } span.keyword { color: rgb(0, 0, 255); } span.identifier { color: rgb(0, 0, 0); } span.string { color: rgb(3, 106, 7); } </style> <script> var hljs=new function(){function m(p){return p.replace(/&/gm,"&").replace(/</gm,"<")}function f(r,q,p){return RegExp(q,"m"+(r.cI?"i":"")+(p?"g":""))}function b(r){for(var p=0;p<r.childNodes.length;p++){var q=r.childNodes[p];if(q.nodeName=="CODE"){return q}if(!(q.nodeType==3&&q.nodeValue.match(/\s+/))){break}}}function h(t,s){var p="";for(var r=0;r<t.childNodes.length;r++){if(t.childNodes[r].nodeType==3){var q=t.childNodes[r].nodeValue;if(s){q=q.replace(/\n/g,"")}p+=q}else{if(t.childNodes[r].nodeName=="BR"){p+="\n"}else{p+=h(t.childNodes[r])}}}if(/MSIE [678]/.test(navigator.userAgent)){p=p.replace(/\r/g,"\n")}return p}function a(s){var r=s.className.split(/\s+/);r=r.concat(s.parentNode.className.split(/\s+/));for(var q=0;q<r.length;q++){var p=r[q].replace(/^language-/,"");if(e[p]){return p}}}function c(q){var p=[];(function(s,t){for(var r=0;r<s.childNodes.length;r++){if(s.childNodes[r].nodeType==3){t+=s.childNodes[r].nodeValue.length}else{if(s.childNodes[r].nodeName=="BR"){t+=1}else{if(s.childNodes[r].nodeType==1){p.push({event:"start",offset:t,node:s.childNodes[r]});t=arguments.callee(s.childNodes[r],t);p.push({event:"stop",offset:t,node:s.childNodes[r]})}}}}return t})(q,0);return p}function k(y,w,x){var q=0;var z="";var s=[];function u(){if(y.length&&w.length){if(y[0].offset!=w[0].offset){return(y[0].offset<w[0].offset)?y:w}else{return w[0].event=="start"?y:w}}else{return y.length?y:w}}function t(D){var A="<"+D.nodeName.toLowerCase();for(var B=0;B<D.attributes.length;B++){var C=D.attributes[B];A+=" "+C.nodeName.toLowerCase();if(C.value!==undefined&&C.value!==false&&C.value!==null){A+='="'+m(C.value)+'"'}}return A+">"}while(y.length||w.length){var v=u().splice(0,1)[0];z+=m(x.substr(q,v.offset-q));q=v.offset;if(v.event=="start"){z+=t(v.node);s.push(v.node)}else{if(v.event=="stop"){var p,r=s.length;do{r--;p=s[r];z+=("</"+p.nodeName.toLowerCase()+">")}while(p!=v.node);s.splice(r,1);while(r<s.length){z+=t(s[r]);r++}}}}return z+m(x.substr(q))}function j(){function q(x,y,v){if(x.compiled){return}var u;var s=[];if(x.k){x.lR=f(y,x.l||hljs.IR,true);for(var w in x.k){if(!x.k.hasOwnProperty(w)){continue}if(x.k[w] instanceof Object){u=x.k[w]}else{u=x.k;w="keyword"}for(var r in u){if(!u.hasOwnProperty(r)){continue}x.k[r]=[w,u[r]];s.push(r)}}}if(!v){if(x.bWK){x.b="\\b("+s.join("|")+")\\s"}x.bR=f(y,x.b?x.b:"\\B|\\b");if(!x.e&&!x.eW){x.e="\\B|\\b"}if(x.e){x.eR=f(y,x.e)}}if(x.i){x.iR=f(y,x.i)}if(x.r===undefined){x.r=1}if(!x.c){x.c=[]}x.compiled=true;for(var t=0;t<x.c.length;t++){if(x.c[t]=="self"){x.c[t]=x}q(x.c[t],y,false)}if(x.starts){q(x.starts,y,false)}}for(var p in e){if(!e.hasOwnProperty(p)){continue}q(e[p].dM,e[p],true)}}function d(B,C){if(!j.called){j();j.called=true}function q(r,M){for(var L=0;L<M.c.length;L++){if((M.c[L].bR.exec(r)||[null])[0]==r){return M.c[L]}}}function v(L,r){if(D[L].e&&D[L].eR.test(r)){return 1}if(D[L].eW){var M=v(L-1,r);return M?M+1:0}return 0}function w(r,L){return L.i&&L.iR.test(r)}function K(N,O){var M=[];for(var L=0;L<N.c.length;L++){M.push(N.c[L].b)}var r=D.length-1;do{if(D[r].e){M.push(D[r].e)}r--}while(D[r+1].eW);if(N.i){M.push(N.i)}return f(O,M.join("|"),true)}function p(M,L){var N=D[D.length-1];if(!N.t){N.t=K(N,E)}N.t.lastIndex=L;var r=N.t.exec(M);return r?[M.substr(L,r.index-L),r[0],false]:[M.substr(L),"",true]}function z(N,r){var L=E.cI?r[0].toLowerCase():r[0];var M=N.k[L];if(M&&M instanceof Array){return M}return false}function F(L,P){L=m(L);if(!P.k){return L}var r="";var O=0;P.lR.lastIndex=0;var M=P.lR.exec(L);while(M){r+=L.substr(O,M.index-O);var N=z(P,M);if(N){x+=N[1];r+='<span class="'+N[0]+'">'+M[0]+"</span>"}else{r+=M[0]}O=P.lR.lastIndex;M=P.lR.exec(L)}return r+L.substr(O,L.length-O)}function J(L,M){if(M.sL&&e[M.sL]){var r=d(M.sL,L);x+=r.keyword_count;return r.value}else{return F(L,M)}}function I(M,r){var L=M.cN?'<span class="'+M.cN+'">':"";if(M.rB){y+=L;M.buffer=""}else{if(M.eB){y+=m(r)+L;M.buffer=""}else{y+=L;M.buffer=r}}D.push(M);A+=M.r}function G(N,M,Q){var R=D[D.length-1];if(Q){y+=J(R.buffer+N,R);return false}var P=q(M,R);if(P){y+=J(R.buffer+N,R);I(P,M);return P.rB}var L=v(D.length-1,M);if(L){var O=R.cN?"</span>":"";if(R.rE){y+=J(R.buffer+N,R)+O}else{if(R.eE){y+=J(R.buffer+N,R)+O+m(M)}else{y+=J(R.buffer+N+M,R)+O}}while(L>1){O=D[D.length-2].cN?"</span>":"";y+=O;L--;D.length--}var r=D[D.length-1];D.length--;D[D.length-1].buffer="";if(r.starts){I(r.starts,"")}return R.rE}if(w(M,R)){throw"Illegal"}}var E=e[B];var D=[E.dM];var A=0;var x=0;var y="";try{var s,u=0;E.dM.buffer="";do{s=p(C,u);var t=G(s[0],s[1],s[2]);u+=s[0].length;if(!t){u+=s[1].length}}while(!s[2]);if(D.length>1){throw"Illegal"}return{r:A,keyword_count:x,value:y}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:m(C)}}else{throw H}}}function g(t){var p={keyword_count:0,r:0,value:m(t)};var r=p;for(var q in e){if(!e.hasOwnProperty(q)){continue}var s=d(q,t);s.language=q;if(s.keyword_count+s.r>r.keyword_count+r.r){r=s}if(s.keyword_count+s.r>p.keyword_count+p.r){r=p;p=s}}if(r.language){p.second_best=r}return p}function i(r,q,p){if(q){r=r.replace(/^((<[^>]+>|\t)+)/gm,function(t,w,v,u){return w.replace(/\t/g,q)})}if(p){r=r.replace(/\n/g,"<br>")}return r}function n(t,w,r){var x=h(t,r);var v=a(t);var y,s;if(v){y=d(v,x)}else{return}var q=c(t);if(q.length){s=document.createElement("pre");s.innerHTML=y.value;y.value=k(q,c(s),x)}y.value=i(y.value,w,r);var u=t.className;if(!u.match("(\\s|^)(language-)?"+v+"(\\s|$)")){u=u?(u+" "+v):v}if(/MSIE [678]/.test(navigator.userAgent)&&t.tagName=="CODE"&&t.parentNode.tagName=="PRE"){s=t.parentNode;var p=document.createElement("div");p.innerHTML="<pre><code>"+y.value+"</code></pre>";t=p.firstChild.firstChild;p.firstChild.cN=s.cN;s.parentNode.replaceChild(p.firstChild,s)}else{t.innerHTML=y.value}t.className=u;t.result={language:v,kw:y.keyword_count,re:y.r};if(y.second_best){t.second_best={language:y.second_best.language,kw:y.second_best.keyword_count,re:y.second_best.r}}}function o(){if(o.called){return}o.called=true;var r=document.getElementsByTagName("pre");for(var p=0;p<r.length;p++){var q=b(r[p]);if(q){n(q,hljs.tabReplace)}}}function l(){if(window.addEventListener){window.addEventListener("DOMContentLoaded",o,false);window.addEventListener("load",o,false)}else{if(window.attachEvent){window.attachEvent("onload",o)}else{window.onload=o}}}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=n;this.initHighlighting=o;this.initHighlightingOnLoad=l;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.ER="(?![\\s\\S])";this.BE={b:"\\\\.",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(r,s){var p={};for(var q in r){p[q]=r[q]}if(s){for(var q in s){p[q]=s[q]}}return p}}();hljs.LANGUAGES.cpp=function(){var a={keyword:{"false":1,"int":1,"float":1,"while":1,"private":1,"char":1,"catch":1,"export":1,virtual:1,operator:2,sizeof:2,dynamic_cast:2,typedef:2,const_cast:2,"const":1,struct:1,"for":1,static_cast:2,union:1,namespace:1,unsigned:1,"long":1,"throw":1,"volatile":2,"static":1,"protected":1,bool:1,template:1,mutable:1,"if":1,"public":1,friend:2,"do":1,"return":1,"goto":1,auto:1,"void":2,"enum":1,"else":1,"break":1,"new":1,extern:1,using:1,"true":1,"class":1,asm:1,"case":1,typeid:1,"short":1,reinterpret_cast:2,"default":1,"double":1,register:1,explicit:1,signed:1,typename:1,"try":1,"this":1,"switch":1,"continue":1,wchar_t:1,inline:1,"delete":1,alignof:1,char16_t:1,char32_t:1,constexpr:1,decltype:1,noexcept:1,nullptr:1,static_assert:1,thread_local:1,restrict:1,_Bool:1,complex:1},built_in:{std:1,string:1,cin:1,cout:1,cerr:1,clog:1,stringstream:1,istringstream:1,ostringstream:1,auto_ptr:1,deque:1,list:1,queue:1,stack:1,vector:1,map:1,set:1,bitset:1,multiset:1,multimap:1,unordered_set:1,unordered_map:1,unordered_multiset:1,unordered_multimap:1,array:1,shared_ptr:1}};return{dM:{k:a,i:"</",c:[hljs.CLCM,hljs.CBLCLM,hljs.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},hljs.CNM,{cN:"preprocessor",b:"#",e:"$"},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:a,r:10,c:["self"]}]}}}();hljs.LANGUAGES.r={dM:{c:[hljs.HCM,{cN:"number",b:"\\b0[xX][0-9a-fA-F]+[Li]?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+(?:[eE][+\\-]?\\d*)?L\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+\\.(?!\\d)(?:i\\b)?",e:hljs.IMMEDIATE_RE,r:1},{cN:"number",b:"\\b\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"keyword",b:"(?:tryCatch|library|setGeneric|setGroupGeneric)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\.",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\d+(?![\\w.])",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\b(?:function)",e:hljs.IMMEDIATE_RE,r:2},{cN:"keyword",b:"(?:if|in|break|next|repeat|else|for|return|switch|while|try|stop|warning|require|attach|detach|source|setMethod|setClass)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"literal",b:"(?:NA|NA_integer_|NA_real_|NA_character_|NA_complex_)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"literal",b:"(?:NULL|TRUE|FALSE|T|F|Inf|NaN)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"identifier",b:"[a-zA-Z.][a-zA-Z0-9._]*\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"<\\-(?!\\s*\\d)",e:hljs.IMMEDIATE_RE,r:2},{cN:"operator",b:"\\->|<\\-",e:hljs.IMMEDIATE_RE,r:1},{cN:"operator",b:"%%|~",e:hljs.IMMEDIATE_RE},{cN:"operator",b:">=|<=|==|!=|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||\\$|:",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"%",e:"%",i:"\\n",r:1},{cN:"identifier",b:"`",e:"`",r:0},{cN:"string",b:'"',e:'"',c:[hljs.BE],r:0},{cN:"string",b:"'",e:"'",c:[hljs.BE],r:0},{cN:"paren",b:"[[({\\])}]",e:hljs.IMMEDIATE_RE,r:0}]}}; hljs.initHighlightingOnLoad(); </script> <script>HTMLWidgets.widget({ name: 'profvis', type: 'output', initialize: function(el, width, height) { return { // TODO: add instance fields as required }; }, renderValue: function(el, x, instance) { profvis.render(el, x.message); }, resize: function(el, width, height, instance) { } }); </script> <style type="text/css">code{white-space: pre;}</style> <style type="text/css" data-origin="pandoc"> a.sourceLine { display: inline-block; line-height: 1.25; } a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; } a.sourceLine:empty { height: 1.2em; } .sourceCode { overflow: visible; } code.sourceCode { white-space: pre; position: relative; } div.sourceCode { margin: 1em 0; } pre.sourceCode { margin: 0; } @media screen { div.sourceCode { overflow: auto; } } @media print { code.sourceCode { white-space: pre-wrap; } a.sourceLine { text-indent: -1em; padding-left: 1em; } } pre.numberSource a.sourceLine { position: relative; left: -4em; } pre.numberSource a.sourceLine::before { content: attr(data-line-number); position: relative; left: -1em; text-align: right; vertical-align: baseline; border: none; pointer-events: all; display: inline-block; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; padding: 0 4px; width: 4em; color: #aaaaaa; } pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; } div.sourceCode { } @media screen { a.sourceLine::before { text-decoration: underline; } } code span.al { color: #ff0000; font-weight: bold; } /* Alert */ code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */ code span.at { color: #7d9029; } /* Attribute */ code span.bn { color: #40a070; } /* BaseN */ code span.bu { } /* BuiltIn */ code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */ code span.ch { color: #4070a0; } /* Char */ code span.cn { color: #880000; } /* Constant */ code span.co { color: #60a0b0; font-style: italic; } /* Comment */ code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */ code span.do { color: #ba2121; font-style: italic; } /* Documentation */ code span.dt { color: #902000; } /* DataType */ code span.dv { color: #40a070; } /* DecVal */ code span.er { color: #ff0000; font-weight: bold; } /* Error */ code span.ex { } /* Extension */ code span.fl { color: #40a070; } /* Float */ code span.fu { color: #06287e; } /* Function */ code span.im { } /* Import */ code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */ code span.kw { color: #007020; font-weight: bold; } /* Keyword */ code span.op { color: #666666; } /* Operator */ code span.ot { color: #007020; } /* Other */ code span.pp { color: #bc7a00; } /* Preprocessor */ code span.sc { color: #4070a0; } /* SpecialChar */ code span.ss { color: #bb6688; } /* SpecialString */ code span.st { color: #4070a0; } /* String */ code span.va { color: #19177c; } /* Variable */ code span.vs { color: #4070a0; } /* VerbatimString */ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */ </style> <script> // apply pandoc div.sourceCode style to pre.sourceCode instead (function() { var sheets = document.styleSheets; for (var i = 0; i < sheets.length; i++) { if (sheets[i].ownerNode.dataset["origin"] !== "pandoc") continue; try { var rules = sheets[i].cssRules; } catch (e) { continue; } for (var j = 0; j < rules.length; j++) { var rule = rules[j]; // check if there is a div.sourceCode rule if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") continue; var style = rule.style.cssText; // check if color or background-color is set if (rule.style.color === '' || rule.style.backgroundColor === '') continue; // replace div.sourceCode by a pre.sourceCode rule sheets[i].deleteRule(j); sheets[i].insertRule('pre.sourceCode{' + style + '}', j); } } })(); </script> <style type="text/css">body { background-color: #fff; margin: 1em auto; max-width: 700px; overflow: visible; padding-left: 2em; padding-right: 2em; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.35; } #header { text-align: center; } #TOC { clear: both; margin: 0 0 10px 10px; padding: 4px; width: 400px; border: 1px solid #CCCCCC; border-radius: 5px; background-color: #f6f6f6; font-size: 13px; line-height: 1.3; } #TOC .toctitle { font-weight: bold; font-size: 15px; margin-left: 5px; } #TOC ul { padding-left: 40px; margin-left: -1.5em; margin-top: 5px; margin-bottom: 5px; } #TOC ul ul { margin-left: -2em; } #TOC li { line-height: 16px; } table { margin: 1em auto; border-width: 1px; border-color: #DDDDDD; border-style: outset; border-collapse: collapse; } table th { border-width: 2px; padding: 5px; border-style: inset; } table td { border-width: 1px; border-style: inset; line-height: 18px; padding: 5px 5px; } table, table th, table td { border-left-style: none; border-right-style: none; } table thead, table tr.even { background-color: #f7f7f7; } p { margin: 0.5em 0; } blockquote { background-color: #f6f6f6; padding: 0.25em 0.75em; } hr { border-style: solid; border: none; border-top: 1px solid #777; margin: 28px 0; } dl { margin-left: 0; } dl dd { margin-bottom: 13px; margin-left: 13px; } dl dt { font-weight: bold; } ul { margin-top: 0; } ul li { list-style: circle outside; } ul ul { margin-bottom: 0; } pre, code { background-color: #f7f7f7; border-radius: 3px; color: #333; white-space: pre-wrap; } pre { border-radius: 3px; margin: 5px 0px 10px 0px; padding: 10px; } pre:not([class]) { background-color: #f7f7f7; } code { font-family: Consolas, Monaco, 'Courier New', monospace; font-size: 85%; } p > code, li > code { padding: 2px 0px; } div.figure { text-align: center; } img { background-color: #FFFFFF; padding: 2px; border: 1px solid #DDDDDD; border-radius: 3px; border: 1px solid #CCCCCC; margin: 0 5px; } h1 { margin-top: 0; font-size: 35px; line-height: 40px; } h2 { border-bottom: 4px solid #f7f7f7; padding-top: 10px; padding-bottom: 2px; font-size: 145%; } h3 { border-bottom: 2px solid #f7f7f7; padding-top: 10px; font-size: 120%; } h4 { border-bottom: 1px solid #f7f7f7; margin-left: 8px; font-size: 105%; } h5, h6 { border-bottom: 1px solid #ccc; font-size: 105%; } a { color: #0033dd; text-decoration: none; } a:hover { color: #6666ff; } a:visited { color: #800080; } a:visited:hover { color: #BB00BB; } a[href^="http:"] { text-decoration: underline; } a[href^="https:"] { text-decoration: underline; } code > span.kw { color: #555; font-weight: bold; } code > span.dt { color: #902000; } code > span.dv { color: #40a070; } code > span.bn { color: #d14; } code > span.fl { color: #d14; } code > span.ch { color: #d14; } code > span.st { color: #d14; } code > span.co { color: #888888; font-style: italic; } code > span.ot { color: #007020; } code > span.al { color: #ff0000; font-weight: bold; } code > span.fu { color: #900; font-weight: bold; } code > span.er { color: #a61717; background-color: #e3d2d2; } </style> </head> <body> <h1 class="title toc-ignore">Profiling Performance</h1> <h4 class="author"><em>Thomas Lin Pedersen</em></h4> <p>In order to continuously monitor the performance of gtable the following piece of code is used to generate a profile and inspect it:</p> <div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="kw">library</span>(ggplot2)</a> <a class="sourceLine" id="cb1-2" data-line-number="2"><span class="kw">library</span>(profvis)</a> <a class="sourceLine" id="cb1-3" data-line-number="3"></a> <a class="sourceLine" id="cb1-4" data-line-number="4">p <-<span class="st"> </span><span class="kw">ggplot</span>(mtcars, <span class="kw">aes</span>(mpg, disp)) <span class="op">+</span><span class="st"> </span></a> <a class="sourceLine" id="cb1-5" data-line-number="5"><span class="st"> </span><span class="kw">geom_point</span>() <span class="op">+</span><span class="st"> </span></a> <a class="sourceLine" id="cb1-6" data-line-number="6"><span class="st"> </span><span class="kw">facet_grid</span>(gear<span class="op">~</span>cyl)</a> <a class="sourceLine" id="cb1-7" data-line-number="7"></a> <a class="sourceLine" id="cb1-8" data-line-number="8">p_build <-<span class="st"> </span><span class="kw">ggplot_build</span>(p)</a> <a class="sourceLine" id="cb1-9" data-line-number="9"></a> <a class="sourceLine" id="cb1-10" data-line-number="10">profile <-<span class="st"> </span><span class="kw">profvis</span>(<span class="cf">for</span> (i <span class="cf">in</span> <span class="kw">seq_len</span>(<span class="dv">100</span>)) <span class="kw">ggplot_gtable</span>(p_build))</a> <a class="sourceLine" id="cb1-11" data-line-number="11"></a> <a class="sourceLine" id="cb1-12" data-line-number="12">profile</a></code></pre></div> <div id="htmlwidget-64df14ab9facfd88970d" style="width:100%;height:600px;" class="profvis html-widget"></div> <script type="application/json" data-for="htmlwidget-64df14ab9facfd88970d">{"x":{"message":{"prof":{"time":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,37,37,37,37,37,37,37,37,37,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,43,43,43,43,43,43,43,43,43,43,43,43,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,61,61,61,61,61,61,61,61,61,61,62,62,62,62,62,62,62,62,62,62,62,62,62,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,67,67,67,67,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,90,90,90,90,90,90,90,90,90,90,90,90,90,91,91,91,91,91,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,94,94,94,94,94,94,94,94,94,94,94,94,94,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,98,98,98,98,98,98,98,98,98,98,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,104,104,104,104,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,108,108,108,108,108,108,108,108,108,108,108,108,108,108,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,111,111,111,111,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,117,117,117,117,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,123,123,123,123,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,129,129,129,129,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,131,131,131,131,131,131,131,131,131,131,131,131,131,131,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,137,137,137,137,137,137,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,144,144,144,144,144,144,144,144,144,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,151,151,151,151,151,151,151,151,151,151,151,151,151,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,158,158,158,158,158,158,158,158,158,158,158,158,158,158,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,163,163,163,163,163,163,163,164,164,164,164,164,164,164,164,164,164,164,164,164,164,165,165,165,165,165,165,165,165,165,165,165,165,165,165,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,173,173,173,173,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,186,186,186,186,186,186,186,186,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,192,192,192,192,193,193,193,193,193,193,193,193,193,193,193,193,194,194,194,194,194,194,194,194,194,194,194,194,194,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,198,198,198,198,198,198,198,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,200,200,200,200,200,200,200,200,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,204,204,204,204,204,204,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,206,206,206,206,206,206,206,206,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,208,208,208,208,208,208,208,208,208,208,208,208,208,208,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,213,213,213,213,213,213,213,213,213,214,214,214,214,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,227,227,227,227,228,228,228,228,228,228,228,228,228,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,233,233,233,233,233,233,233,233,233,233,233,233,234,234,234,234,234,234,234,234,234,234,234,234,234,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,242,242,242,242,242,242,242,242,242,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,249,249,249,249,249,250,250,250,250,250,250,250,250,250,250,250,250,250,250,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,258,258,258,258,258,258,258,258,258,258,258,258,258,258,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,264,264,264,264,264,264,264,264,264,264,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,271,271,271,271,271,271,271,271,271,271,271,271,271,271,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,276,276,276,276,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,279,279,279,279,279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,286,286,286,286,286,286,286,286,286,286,287,287,287,287,287,287,287,287,287,287,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,296,296,296,296,296,296,296,296,296,296,296,296,296,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,299,299,299,299,299,299,299,299,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,305,305,305,305,305,305,305,305,305,305,305,305,305,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,309,309,309,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,312,312,312,312,312,312,312,312,312,312,312,312,312,312,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,346,346,346,346,346,346,346,346,346,346,346,346,347,347,347,347,347,347,347,347,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,352,352,352,352,352,352,352,352,352,352,352,352,352,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,356,356,356,356,356,356,356,356,356,356,356,356,356,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,359,359,359,359,359,359,359,359,359,359,359,359,359,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,361,361,361,361,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,365,365,365,365,365,365,365,365,365,365,365,365,365,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,370,370,370,370,370,370,370,370,370,370,370,370,370,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,377,377,377,377,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,380,380,380,380,380,380,380,380,380,380,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,383,383,383,383,384,384,384,384,384,384,384,384,384,384,384,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,389,389,389,389,389,389,389,389,389,389,389,389,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,399,399,399,399,399,399,399,399,399,399,399,399,399,399,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,409,409,409,409,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,411,411,411,411,411,411,411,411,411,411,411,411,411,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,416,416,416,416,416,416,416,416,416,416,416,416,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,427,427,427,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,436,436,436,436,436,436,436,436,436,436,436,436,436,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,454,454,454,454,455,455,455,455,455,455,455,455,455,455,455,455,455,455,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,461,461,461,461,461,461,461,461,461,461,461,461,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,465,465,465,465,465,465,465,465,465,465,465,465,465,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,472,472,472,472,472,472,472,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,481,481,481,481,481,481,481,481,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,483,483,483,483,483,483,483,483,483,483,483,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,517,517,517,517,517,517,517,517,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,533,533,533,533,533,533,533,533,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,539,539,539,539,539,539,539,539,539,539,539,539,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,548,548,548,548,548,548,548,548,548,548,548,548,548,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,554,554,554,554,554,554,554,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,562,562,562,562,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,572,572,572,572,572,572,572,572,572,572,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,574,574,574,574,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,576,576,576,576,576,576,576,576,576,576,576,576,576,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,587,587,587,587,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,593,593,593,593,593,593,593,593,593,593,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,602,602,602,602,602,602,602,602,602,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,609,609,609,609,609,609,609,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,622,622,622,622,622,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,628,628,628,628,628,628,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,634,634,634,634,634,634,634,634,634,634,634,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,638,638,638,638,638,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,644,644,644,644,644,644,644,644,644,644,644,645,645,645,645,645,645,645,645,645,645,645,645,645,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,651,651,651,651,651,651,651,651,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,670,670,670,670,670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,680,680,680,680,680,680,680,680,680,680,680,680,680,680,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,698,698,698,698,698,698,698,698,698,698,698,698,698,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,703,703,703,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709],"depth":[23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3,2,1,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3,2,1,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,5,4,3,2,1,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,13,12,11,10,9,8,7,6,5,4,3,2,1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,3,2,1,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1],"label":["min","zero_range","rescale.numeric","rescale","FUN","lapply","transform_position","f","coord$transform","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","names(x$children) <- childNames","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(C_gridDirty)","grid.Call","convertUnit","convertHeight","font_descent","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (0 <= angle & angle < 90) {","rotate_just","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","descentDetails.text","<Anonymous>","grid.Call","convertUnit","convertHeight","font_descent","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","UseMethod(\"validGrob\")","validGrob","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lazyLoadDBfetch","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","c","new_data_frame","gtable_add_grob","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lazyLoadDBfetch","build_guides","ggplot_gtable.ggplot_built","ggplot_gtable","guide_grid(theme,","as.vector","setdiff","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce(combine_elements, parents, theme[[element]])","Reduce","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","x$rot <- as.numeric(x$rot)","validDetails.text","validDetails","validGrob.grob","validGrob","grob","textGrob","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","c","new_data_frame","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(gpars[[gparname]]))","numnotnull","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.grob(grob))","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(gparname, names(gpars)))) {","numnotnull","validGP","gpar","is.gpar","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","list","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(gpars$fill))","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","attributes<-","Summary.unit","sum","gtable_height","gTree","absoluteGrob","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","inherits(x, \"grob\")","is.grob","grobName","ggname","element_render","ggplot_gtable.ggplot_built","ggplot_gtable","match.fun","Reduce","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","as.list","vapply","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","sum","gtable_width","gTree","absoluteGrob","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","panels <- table$layout[grepl(\"^panel\", table$layout$name), , drop = FALSE]","[","panel_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","as.character","%in%","grDevices::col2rgb","alpha","numnotnull","validGP","gpar","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","as.numeric","unit","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","structure","ggproto_parent","f","<Anonymous>","f","self$ylabel","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(\"lty\", names(gpars)))) {","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(gparname, names(gpars)))) {","numnotnull","validGP","gpar","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (length(gl) == 0L ||","gList","setChildren","gTree","gtable","gtable_matrix","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","\t`class<-`(unlist(lapply(x, as.unit), recursive = FALSE), 'unit')","unlist","unit.c","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","exists","fetch_ggproto","$.ggproto","$","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","gp <- validGP(list(...))","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","paste","grobAutoName","checkNameSlot","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","\t`class<-`(unlist(lapply(x, as.unit), recursive = FALSE), 'unit')","unit.c","add_margins","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","list","new_data_frame","gtable","gtable_matrix","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","element_gp <- gpar(fontsize = element$size, col = element$colour,","$","numnotnull","validGP","gpar","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","has_self <- !is.null(args[[\"self\"]]) || \"self\" %in% names(args)","make_proto_method","$.ggproto","$","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gl <- list(...)","gList","do.call","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x$name","$","FUN","lapply","sapply","setChildren","gTree","absoluteGrob","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","integer",".set_row_names","new_data_frame","gtable","gtable_matrix","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_cols","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","sapply","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(gpars$fill))","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","as.list","vapply","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","neg_to_pos","gtable_add_grob","gtable_matrix","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$id) && !is.null(x$id.lengths))","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce(combine_elements, parents, theme[[element]])","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","grob(x=x, y=y, id=id, id.lengths=id.lengths,","grob","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","simplify2array","sapply","gList","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","unique","setdiff","defaults","plot_theme","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$id.lengths) && (sum(x$id.lengths) != length(x$x)))","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","class(g) <- c(cl, \"grob\", \"gDesc\")","grob","rectGrob","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","sys.call","%in%","[[.data.frame","[[","[.data.frame","[","panel_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","c","new_data_frame","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(gpars[[gparname]]))","numnotnull","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.unit(y))","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","paste0","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","UseMethod(\"postDraw\")","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","FUN","vapply","FUN","lapply","FUN","lapply","calc_element","element_render","ggplot_gtable.ggplot_built","ggplot_gtable","length","length","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","validGP","gpar","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_rows","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce(combine_elements, parents, theme[[element]])","Reduce","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","ggname(\"grill\", grobTree(","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","diff.default","diff","valid.viewport","viewport","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","$","gtable_add_grob","gtable_matrix","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_cols","ggplot_gtable.ggplot_built","ggplot_gtable","n <- vapply(e1[names(e2)], is.null, logical(1))","vapply","f","Reduce","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[.data.frame","[","unique.data.frame","unique","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_rows","ggplot_gtable.ggplot_built","ggplot_gtable","[[","vapply","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ggname(\"grill\", grobTree(","is.unit","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_cols","ggplot_gtable.ggplot_built","ggplot_gtable","paste","grobAutoName","checkNameSlot","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","index <- rep(seq_along(x), times = times, length.out = length.out, each = each)","rep.unit","rep","is.unit","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","bounds <- grid.Call(C_textBounds, as.graphicsAnnot(x$label),","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","rev","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","check.length(gparname)","numnotnull","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","e1$size <- e2$size * unclass(e1$size)","f","Reduce","FUN","lapply","calc_element","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gl <- list(...)","gList","setChildren","gTree","gtable","gtable_matrix","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","length","length","insert.unit","gtable_add_cols","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(\"alpha\", names(gpars)))) {","validGP","gpar","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","g <- list(..., name=name, gp=gp, vp=vp)","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce(combine_elements, parents, theme[[element]])","Reduce","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","c","new_data_frame","gtable_add_grob","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(gpars[[gparname]]))","numnotnull","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$id))","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","sys.call","%in%","[[.data.frame","[[","[.data.frame","[","find_panel","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","result <- \"[\"(unclass(x), index, ...)","[.gList","[","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","grob <- function(..., name=NULL, gp=NULL, vp=NULL, cl=NULL) {","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","diff.default","diff","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","sapply","gList","do.call","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[[","vapply","FUN","lapply","FUN","lapply","calc_element","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gtable_add_grob","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","res <- fetch_ggproto(x, name)","$.ggproto","$","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","sapply","[.gList","[","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","paste","paste","grobAutoName","grobName","ggname","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(\"col\", names(gpars)))) {","validGP","gpar","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x$name <- checkNameSlot(x)","$<-","validGrob.gTree","validGrob","gTree","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","pvp <- grid.Call(C_currentViewport)","current.vpPath","upViewport","popgrobvp.viewport","popgrobvp","postDraw.grob","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","length","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","%in%","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","e1[n] <- e2[n]","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","x$childrenOrder <- childNames","setChildren","gTree","absoluteGrob","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","diff.default","diff","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","paste","paste","grobAutoName","grobName","ggname","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","just <- as.integer(match(just[1L], c(\"left\", \"right\", \"bottom\", \"top\",","valid.charjust","valid.just","validDetails.text","validDetails","validGrob.grob","validGrob","grob","textGrob","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","$<-","gtable_add_grob","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","vapply","f","Reduce","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","%in%","validGP","gpar","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[.data.frame","[","ggplot_gtable.ggplot_built","ggplot_gtable","eval(`_inherit`, env, NULL)","super","fetch_ggproto","fetch_ggproto","$.ggproto","$","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","label_y <- switch(position,","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gtable_add_grob","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","unique","simplify2array","sapply","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","length","length","[.data.frame","[","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(gpars[[gparname]]))","numnotnull","validGP","gpar","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","coord_bg <- self$coord$render_bg(self$panel_params[[i]], theme)","$","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","vapply","gtable_add_grob","gtable_matrix","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","children <- children[!sapply(children, is.null)]","[","setChildren","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","logical","vapply","gtable_add_grob","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","$<-","gtable_add_rows","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.grob(grob))","grobName","ggname","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","diff.default","diff","valid.viewport","viewport","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","checkgpSlot(x$gp)","$","checkgpSlot","validGrob.gTree","validGrob","gTree","add_margins","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","UseMethod(\"postDraw\")","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","ggname(\"geom_point\",","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","grob <- element_grob(el, ...)","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.numeric(index) && any(index > n)) {","[.unit","[","rep.unit","rep","is.unit","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","logical","vapply","gtable_add_grob","gtable_matrix","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_rows","ggplot_gtable.ggplot_built","ggplot_gtable","render_fg = function(panel_params, theme) element_render(theme, \"panel.border\"),","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","as.list","lapply","sapply","[.gList","[","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","checkgpSlot(x$gp)","validGrob.gTree","validGrob","gTree","gtable","gtable_row","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","res <- fetch_ggproto(super(), name)","fetch_ggproto","$.ggproto","$","f","self$xlabel","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","is.factor","unique.default","unique","setdiff","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","any","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<Anonymous>","mapply","<Anonymous>","do.call","duplicated","duplicated.data.frame","duplicated","[.data.frame","[","unique.data.frame","unique","panel_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","UseMethod(\"grobHeight\")","grobHeight","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","get0","getExportedValue","::","alpha","numnotnull","validGP","gpar","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(C_constructUnits, x, data, units)","unit","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x <- validDetails(x)","validDetails","validGrob.grob","validGrob","grob","textGrob","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","c","new_data_frame","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","checkgpSlot(x$gp)","$","checkgpSlot","validGrob.gTree","validGrob","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(gparname, names(gpars)))) {","checkNA","validGP","gpar","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","grepl","[.data.frame","[","panel_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","rescale_x <- function(data) rescale(data, from = panel_params$x.range)","FUN","lapply","transform_position","f","coord$transform","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","el <- calc_element(element, theme)","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","angle <- (angle %||% 0) %% 360","rotate_just","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$vp))","$","pushvpgp","preDraw.grob","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","dim","dim","nrow","logical","vapply","cases","remove_missing","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","if (!is.na(match(\"font\", names(gpars)))) {","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gt <- list(..., name=name, gp=gp, vp=vp)","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gt <- validGrob(gt, childrenvp)","validGrob","gTree","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","\t.Call(C_asUnit, x)","as.unit","Ops.unit","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(theme[[element]]) &&","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","isFALSE","sapply","gList","do.call","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","bounds <- grid.Call(C_textBounds, as.graphicsAnnot(x$label),","as.graphicsAnnot","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","unique.default","unique","simplify2array","sapply","gList","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_cols","ggplot_gtable.ggplot_built","ggplot_gtable","[[","vapply","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","element_gp <- gpar(lwd = len0_null(element$size * .pt), col = element$colour,","numnotnull","validGP","gpar","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x$name <- checkNameSlot(x)","validGrob.gTree","validGrob","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","pnames <- ggplot_global$element_tree[[element]]$inherit","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","UseMethod(\"grobWidth\")","grobWidth","is.unit","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","is.atomic","ifelse","neg_to_pos","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","unique","factor","unique.default","unique","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","ggname(paste(element, name, sep = \".\"), grob)","paste","grobAutoName","grobName","ggname","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","vapply","gtable_add_grob","gtable_col","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","sapply","[.gList","[","setChildren","gTree","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gp <- gpar(fontsize = size, col = colour,","numnotnull","validGP","gpar","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","alpha","numnotnull","validGP","gpar","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","checkgpSlot(x$gp)","checkgpSlot","validGrob.gTree","validGrob","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","if (inherits(e2, \"element_blank\")) {","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","$<-.data.frame","$<-","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (inherits(theme[[element]], \"element_blank\")) {","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","is.factor","unique.default","unique","simplify2array","sapply","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","class(gl) <- c(\"gList\")","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$id) && (length(x$id) != length(x$x)))","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","paste0","font_descent","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gtable_add_rows","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","ggname(paste(element, name, sep = \".\"), grob)","paste","grobAutoName","grobName","ggname","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","e1$size <- e2$size * unclass(e1$size)","$<-","f","Reduce","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if ((is.simpleUnit(e1) && is.simpleUnit(e2)) && (attr(e1, 'unit') == attr(e2, 'unit'))) {","Ops.unit","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$vjust))","$","validDetails.text","validDetails","validGrob.grob","validGrob","grob","textGrob","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","unclass","[.unit","[","unit.c","add_margins","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","simplify2array","sapply","gList","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x$name <- checkNameSlot(x)","validGrob.grob","validGrob","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","if (!is.unit(y))","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","arrow <- if (is.logical(element$arrow) && !element$arrow) {","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","list","valid.viewport","viewport","makeContext.gtable","makeContext","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","is.grob","FUN","lapply","sapply","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","sapply","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x$name <- checkNameSlot(x)","validGrob.grob","validGrob","grob","textGrob","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","temp$cex <- tempcex","set.gpar","pushvpgp","preDraw.grob","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","temp$cex <- tempcex","set.gpar","pushvpgp","preDraw.grob","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","temp$cex <- tempcex","set.gpar","pushvpgp","preDraw.grob","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","temp$cex <- tempcex","set.gpar","pushvpgp","preDraw.grob","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","temp$cex <- tempcex","set.gpar","pushvpgp","preDraw.grob","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (length(just) < 2) {","valid.charjust","valid.just","validDetails.rect","validDetails","validGrob.grob","validGrob","grob","rectGrob","element_grob.element_rect","element_grob","element_render","is.grob","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","parents <- lapply(pnames, calc_element, theme, verbose)","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","valid.layout(nrow, ncol, widths, heights, respect, just)","grid.layout","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","e1[n] <- e2[n]","f","Reduce","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","element_gp <- gpar(lwd = len0_null(element$size * .pt), col = element$colour,","numnotnull","validGP","gpar","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[[","[.data.frame","[","unique.data.frame","unique","panel_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.rel(e1$size)) {","is.rel","f","Reduce","calc_element","element_render","ggplot_gtable.ggplot_built","ggplot_gtable","ggname(\"geom_point\",","$","numnotnull","validGP","gpar","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","x$name <- checkNameSlot(x)","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x$name <- checkNameSlot(x)","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","getExportedValue","::","font_descent","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","grob(label=label, x=x, y=y, just=just, hjust=hjust, vjust=vjust,","textGrob","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","vapply","FUN","lapply","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","eval(`_inherit`, env, NULL)","super","fetch_ggproto","fetch_ggproto","fetch_ggproto","$.ggproto","$","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(\"lty\", names(gpars)))) {","validGP","gpar","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","length","gtable_matrix","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_rows","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$id) && (length(x$id) != length(x$x)))","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","for (i in names(new)) old[[i]] <- new[[i]]","modify_list","grob","textGrob","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","ticks <- switch(position,","rep","is.unit","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","sapply","gList","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (length(just) == 0)","valid.charjust","valid.just","validDetails.rect","validDetails","validGrob.grob","validGrob","grob","rectGrob","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!all(is.finite(x$rot)) || length(x$rot) == 0)","validDetails.text","validDetails","validGrob.grob","validGrob","grob","textGrob","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","convertUnit(x, unitTo, \"y\", \"dimension\", \"y\", \"dimension\",","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","zero_range","rescale.numeric","rescale","FUN","lapply","transform_position","f","coord$transform","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","as.list","vapply","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.rel(e1$size)) {","$","is.rel","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_rows","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(C_constructUnits, x, data, units)","unit","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","names","names","vapply","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","strips <- render_strips(col_vars, row_vars, params$labeller, theme)","calc_element","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[.data.frame","[","ggplot_gtable.ggplot_built","ggplot_gtable","ggname(","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","list","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","unique.default","unique","simplify2array","sapply","[.gList","[","setChildren","gTree","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","guide_grid(theme,","as.vector","setdiff","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","as.environment","exists","grDevices::dev.cur","font_descent","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(cl) &&","grob","textGrob","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","vapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","UseMethod(\"element_grob\")","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","checkgpSlot(x$gp)","$","checkgpSlot","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(e2) || inherits(e1, \"element_blank\")) return(e1)","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","sapply","gList","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.unit(x$x) ||","$","is.unit","validDetails.text","validDetails","validGrob.grob","validGrob","grob","textGrob","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.unit(height))","rectGrob","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(gpars$col))","validGP","gpar","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_cols","ggplot_gtable.ggplot_built","ggplot_gtable","element_gp <- gpar(","numnotnull","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","paste(prefix, suffix, index, sep=\".\")","grobAutoName","grobName","ggname","element_render","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","class(gp) <- \"gpar\"","gpar","is.gpar","valid.viewport","viewport","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[.factor","[","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","grob$name <- grobName(grob, prefix)","$<-","ggname","element_render","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","attributes","[.unit","[","unit.c","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","e1[n] <- e2[n]","f","Reduce","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(x$name))","paste","grobAutoName","checkNameSlot","validGrob.grob","validGrob","grob","rectGrob","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","names","names","vapply","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","ggname(\"grill\", grobTree(","is.unit","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(gpars[[gparname]]))","numnotnull","validGP","gpar","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(x$name))","$","checkNameSlot","validGrob.grob","validGrob","grob","textGrob","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","n <- vapply(e1[names(e2)], is.null, logical(1))","f","Reduce","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","checkgpSlot(x$gp)","$","checkgpSlot","validGrob.gTree","validGrob","gTree","gtable","gtable_row","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x <- x %||% unit(rep(just$hjust, n), \"npc\")","%||%","FUN","lapply","create_strip_labels","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","heights <- unit.c(margin[1], height, margin[3])","unit.c","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lengths","unique","simplify2array","sapply","gList","do.call","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","paste","grobAutoName","checkNameSlot","validGrob.gTree","validGrob","gTree","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x <- unlist(lapply(units, as.unit), recursive = FALSE)","unlist","Summary.unit","sum","gtable_width","gTree","absoluteGrob","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","UseMethod(\"preDraw\")","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","length","length","validDetails.points","validDetails","validGrob.grob","validGrob","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","arrow <- if (is.logical(element$arrow) && !element$arrow) {","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_cols","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","sapply","[.gList","[","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","list","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","length","length","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","unique.default","unique","setdiff","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gsub","snakeize","snake_class","remove_missing","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$id.lengths) && (sum(x$id.lengths) != length(x$x)))","$","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(gparname, names(gpars)))) {","checkNA","validGP","gpar","is.gpar","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x$name","$","FUN","lapply","sapply","setChildren","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (x$n == 1)","$","as.character.path","as.character","as.character","strsplit","unlist","[.vpPath","[","upViewport","popgrobvp.viewport","popgrobvp","postDraw.grob","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (inherits(theme[[element]], \"element_blank\")) {","calc_element","element_render","is.grob","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","if (length(gpars[[gparname]]) == 0)","check.length","numnotnull","validGP","gpar","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","e1[n] <- e2[n]","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gp <- validGP(list(...))","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","unique.default","unique","simplify2array","sapply","vpListFromList","vpList","vpTree","gTree","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","n <- vapply(e1[names(e2)], is.null, logical(1))","vapply","f","Reduce","calc_element","element_render","ggplot_gtable.ggplot_built","ggplot_gtable","FUN","vapply","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(children) &&","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","sys.call","%in%","[[.data.frame","[[","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","polylineGrob(","modify_list","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(x$name))","$","checkNameSlot","validGrob.gTree","validGrob","gTree","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","mapply","<Anonymous>","do.call","duplicated","duplicated.data.frame","duplicated","[.data.frame","[","unique.data.frame","unique","panel_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","grDevices::col2rgb","alpha","numnotnull","validGP","gpar","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$id.lengths))","$","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gTree(","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","names","%in%","[[.data.frame","[[","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","gp <- validGP(list(...))","gpar","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","neg_to_pos","gtable_add_grob","gtable_row","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","%in%","[[.data.frame","[[","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","x$name <- checkNameSlot(x)","$<-","validGrob.grob","validGrob","grob","rectGrob","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","match.fun","lapply","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","UseMethod(\"postDraw\")","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","%in%","aes_to_scale","transform_position","f","coord$transform","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","unique","simplify2array","sapply","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","new_data_frame","gtable_add_grob","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(theme[[element]]) &&","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","units <- list(...)","Summary.unit","sum","gtable_height","is.unit","viewport","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","\te2 <- -e2","Ops.unit","-","unit.c","is.unit","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","just <- as.integer(match(just[1L], c(\"left\", \"right\", \"bottom\", \"top\",","valid.charjust","valid.just","validDetails.rect","validDetails","validGrob.grob","validGrob","grob","rectGrob","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","UseMethod(\"postDraw\")","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","::","alpha","numnotnull","validGP","gpar","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","if (length(x$x) != length(x$y))","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$vjust))","validDetails.text","validDetails","validGrob.grob","validGrob","grob","textGrob","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","e1[n] <- e2[n]","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","list","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","grob(x=x, y=y, id=id, id.lengths=id.lengths,","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<Anonymous>","[[.data.frame","[[","[.data.frame","[","panel_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","grDevices::rgb","alpha","numnotnull","validGP","gpar","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$id.lengths) && (sum(x$id.lengths) != length(x$x)))","$","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","simplify2array","sapply","gList","title_spec","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","grDevices::rgb","alpha","numnotnull","validGP","gpar","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","x$name","$","FUN","lapply","sapply","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","sapply","gList","do.call","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(x$name))","$","checkNameSlot","validGrob.gTree","validGrob","gTree","add_margins","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gtable_add_grob","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","min","zero_range","rescale.numeric","rescale","FUN","lapply","transform_position","f","coord$transform","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","if (is.null(x$name))","checkNameSlot","validGrob.gTree","validGrob","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x <- x[index]","[.unit","[","rep.unit","rep","is.unit","polylineGrob","element_grob.element_line","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","c","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","list","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","list","valid.viewport","viewport","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (inherits(e2, \"element_blank\")) {","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","e1$size <- e2$size * unclass(e1$size)","$<-","f","Reduce","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","neg_to_pos","gtable_add_rows","gtable_add_row_space","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ifelse","gtable_add_cols","ggplot_gtable.ggplot_built","ggplot_gtable","x$name <- checkNameSlot(x)","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","ticks <- switch(position,","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[[","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","\t.Call(C_asUnit, x)","FUN","lapply","unlist","Summary.unit","sum","gtable_width","is.unit","viewport","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","$","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","class(gp) <- \"gpar\"","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce(combine_elements, parents, theme[[element]])","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (inherits(theme[[element]], \"element_blank\")) {","FUN","lapply","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","panels <- gtable_add_grob(panels, labels$x[[2]], name = \"xlab-b\",","$","vapply","gtable_add_grob","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[[","vapply","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$vp))","$","checkvpSlot","validGrob.gTree","validGrob","gTree","absoluteGrob","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gpar <- function(...) {","gpar","is.gpar","valid.viewport","viewport","makeContext.gtable","makeContext","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","[.data.frame","[","find_panel","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","vapply","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","element_gp <- gpar(","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lengths","unique","simplify2array","sapply","gList","setChildren","gTree","absoluteGrob","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","unlist","unit.c","insert.unit","gtable_add_rows","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(gparname, names(gpars)))) {","checkNA","validGP","gpar","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","element_gp <- gpar(","$","numnotnull","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","heights <- unit.c(margin[1], height, margin[3])","[","unit.c","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","dim","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$id.lengths))","$<-","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","defaults <- function(x, y) c(x, y[setdiff(names(y), names(x))])","defaults","plot_theme","ggplot_gtable.ggplot_built","ggplot_gtable","arrow <- if (is.logical(element$arrow) && !element$arrow) {","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","unlist","Summary.unit","sum","gtable_height","gTree","absoluteGrob","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","self$facet$draw_labels(","$","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","check.length <- function(gparname) {","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","paste","grobAutoName","checkNameSlot","validGrob.gTree","validGrob","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce(combine_elements, parents, theme[[element]])","Reduce","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lengths","unique","simplify2array","sapply","setChildren","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (.Generic %in% c(\"*\", \"/\")) {","Ops.unit","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","plot_table <- gtable_add_rows(plot_table, theme$plot.margin[3])","[","gtable_add_rows","ggplot_gtable.ggplot_built","ggplot_gtable","new_data_frame","gtable","gtable_col","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","unique","intersect","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","class(gl) <- c(\"gList\")","gList","do.call","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(theme[[element]]) &&","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","vapply","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobName","ggname","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce","FUN","lapply","FUN","lapply","FUN","lapply","calc_element","element_render","FUN","lapply","FUN","lapply","f","self$render_labels","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","Reduce","FUN","lapply","calc_element","element_render","ggplot_gtable.ggplot_built","ggplot_gtable","x$pch <- valid.pch(x$pch)","$<-","validDetails.points","validDetails","validGrob.grob","validGrob","grob","pointsGrob","grobName","ggname","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.na(match(gparname, names(gpars)))) {","numnotnull","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x <- validDetails(x)","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","FUN","vapply","f","Reduce","FUN","lapply","calc_element","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<Anonymous>","[[.data.frame","[[","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","n <- vapply(e1[names(e2)], is.null, logical(1))","f","Reduce","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","children <- children[!sapply(children, is.null)]","[","setChildren","gTree","add_margins","FUN","apply","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","remove_missing(data, params$na.rm,","$","as.vector","unique","intersect","remove_missing","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","n <- vapply(e1[names(e2)], is.null, logical(1))","vapply","f","Reduce","FUN","lapply","FUN","lapply","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","c","new_data_frame","gtable_add_grob","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.unit(x$x) ||","$","is.unit","validDetails.polyline","validDetails","validGrob.grob","validGrob","grob","polylineGrob","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","element_gp <- gpar(","$","numnotnull","validGP","gpar","element_grob.element_line","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.null(x$gp)) {","$","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","df[scales == \"x\"] <- lapply(df[scales == \"x\"], trans_x, ...)","transform_position","f","coord$transform","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","if (!is.unit(x$x) ||","$","is.unit","validDetails.rect","validDetails","validGrob.grob","validGrob","grob","rectGrob","element_grob.element_rect","element_grob","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","pnames <- ggplot_global$element_tree[[element]]$inherit","calc_element","element_render","gList","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","lapply","sapply","gList","do.call","setChildren","gTree","grobName","ggname","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","x$name <- checkNameSlot(x)","$<-","validGrob.gTree","validGrob","gTree","gtable","gtable_row","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","oldClass","diff.default","diff","valid.viewport","viewport","makeContext.gtable","makeContext","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","fun <- function(...) f(...)","coord$transform","f","<Anonymous>","do.call","FUN","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","Reduce","FUN","lapply","calc_element","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","anyDuplicated","[.data.frame","[","FUN","lapply","split.data.frame","split","lapply","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","[[","lapply","sapply","[.gList","[","setChildren","gTree","grobTree","grobName","ggname","guide_grid","f","<Anonymous>","FUN","lapply","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","unique.default","unique","simplify2array","sapply","vpListFromList","vpList","vpTree","gTree","add_margins","titleGrob","element_grob.element_text","element_grob","element_render","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","gsub","snakeize","snake_class","remove_missing","f","<Anonymous>","f","l$draw_geom","<Anonymous>","mapply","Map","ggplot_gtable.ggplot_built","ggplot_gtable","rev","gtable_add_grob","gtable_col","guide_axis","render_axis","f","FUN","lapply","render_axes","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","ggstrip","build_strip","render_strips","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","heightDetails.text","heightDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertHeight","FUN","lapply","unlist","max_height","gtable_add_rows","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable",".Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks","grid.Call","widthDetails.text","widthDetails","<Anonymous>","grid.Call.graphics","push.vp.viewport","push.vp","push.vp.vpTree","FUN","lapply","pushViewport","pushgrobvp.viewport","pushgrobvp","pushvpgp","preDraw.gTree","<Anonymous>","grid.Call","convertUnit","convertWidth","FUN","lapply","unlist","max_width","gtable_add_cols","f","<Anonymous>","f","layout$render","ggplot_gtable.ggplot_built","ggplot_gtable","plot_table$grobs <- plot_table$grobs[c(nrow(plot_table$layout), 1:(nrow(plot_table$layout) - 1))]","ggplot_gtable.ggplot_built","ggplot_gtable","<GC>","gc","profvis_new_iteration","profvis","eval","eval","withVisible","withCallingHandlers","handle","timing_fn","evaluate_call","evaluate::evaluate","evaluate","in_dir","block_exec","call_block","process_group.block","process_group","withCallingHandlers","process_file","knitr::knit","rmarkdown::render","vweave_rmarkdown","engine$weave","doTryCatch","tryCatchOne","tryCatchList","tryCatch","tools::buildVignettes","<GC>","gc","profvis_new_iteration","profvis","eval","eval","withVisible","withCallingHandlers","handle","timing_fn","evaluate_call","evaluate::evaluate","evaluate","in_dir","block_exec","call_block","process_group.block","process_group","withCallingHandlers","process_file","knitr::knit","rmarkdown::render","vweave_rmarkdown","engine$weave","doTryCatch","tryCatchOne","tryCatchList","tryCatch","tools::buildVignettes","<GC>","gc","profvis_new_iteration","profvis","eval","eval","withVisible","withCallingHandlers","handle","timing_fn","evaluate_call","evaluate::evaluate","evaluate","in_dir","block_exec","call_block","process_group.block","process_group","withCallingHandlers","process_file","knitr::knit","rmarkdown::render","vweave_rmarkdown","engine$weave","doTryCatch","tryCatchOne","tryCatchList","tryCatch","tools::buildVignettes","<GC>","gc","profvis_new_iteration","profvis","eval","eval","withVisible","withCallingHandlers","handle","timing_fn","evaluate_call","evaluate::evaluate","evaluate","in_dir","block_exec","call_block","process_group.block","process_group","withCallingHandlers","process_file","knitr::knit","rmarkdown::render","vweave_rmarkdown","engine$weave","doTryCatch","tryCatchOne","tryCatchList","tryCatch","tools::buildVignettes","<GC>","gc","profvis_new_iteration","profvis","eval","eval","withVisible","withCallingHandlers","handle","timing_fn","evaluate_call","evaluate::evaluate","evaluate","in_dir","block_exec","call_block","process_group.block","process_group","withCallingHandlers","process_file","knitr::knit","rmarkdown::render","vweave_rmarkdown","engine$weave","doTryCatch","tryCatchOne","tryCatchList","tryCatch","tools::buildVignettes","<GC>","gc","profvis_new_iteration","profvis","eval","eval","withVisible","withCallingHandlers","handle","timing_fn","evaluate_call","evaluate::evaluate","evaluate","in_dir","block_exec","call_block","process_group.block","process_group","withCallingHandlers","process_file","knitr::knit","rmarkdown::render","vweave_rmarkdown","engine$weave","doTryCatch","tryCatchOne","tryCatchList","tryCatch","tools::buildVignettes"],"filenum":[null,null,null,1,null,2,1,3,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,8,8,9,10,9,null,9,3,7,7,null,11,12,12,13,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,13,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,11,12,12,13,13,null,21,21,17,18,3,9,3,7,7,null,null,8,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,18,3,9,3,7,7,null,22,7,7,null,16,null,23,16,3,9,null,9,3,7,7,null,24,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,19,8,8,8,8,19,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,7,7,null,25,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,10,9,null,9,3,7,7,null,25,25,25,26,26,26,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,26,26,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,12,null,null,15,27,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,8,8,10,14,7,7,null,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,15,27,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,17,17,18,3,9,3,7,7,null,null,null,null,4,25,25,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,12,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,3,28,3,9,3,9,3,9,3,7,7,null,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,25,25,25,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,8,8,8,null,null,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,12,12,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,3,3,4,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,8,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,null,12,13,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,null,null,null,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,14,14,25,25,14,14,14,9,null,9,null,9,3,9,3,7,7,null,3,3,9,9,null,9,3,7,7,null,8,null,9,8,9,10,9,null,9,3,7,7,null,8,8,null,null,8,8,27,15,16,16,3,null,17,18,3,9,3,7,7,null,null,null,null,null,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,null,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,24,null,24,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,null,null,null,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,19,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,null,8,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,29,24,7,7,null,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,17,17,18,3,9,3,7,7,null,null,null,7,7,null,25,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,16,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,24,null,24,null,24,14,7,7,null,null,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,25,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,24,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,23,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,26,26,15,16,16,3,null,17,18,3,9,3,7,7,null,null,null,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,24,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,null,null,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,23,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,8,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,12,15,15,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,null,19,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,25,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,null,24,null,24,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,8,8,8,null,null,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,7,7,null,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,17,3,9,3,7,7,null,25,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,17,17,17,3,9,3,7,7,null,8,8,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,26,26,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,null,8,null,9,8,9,10,9,null,9,3,7,7,null,null,24,null,24,null,24,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,17,3,9,3,7,7,null,3,5,5,null,5,3,6,3,7,null,null,7,7,null,null,8,8,8,8,9,10,9,null,9,3,7,7,null,14,8,8,10,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,25,25,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,8,8,8,8,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,11,11,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,8,8,27,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,26,26,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,14,8,8,10,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,30,30,19,8,8,8,8,19,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,17,3,9,3,7,7,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,25,25,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,7,7,7,null,3,3,3,3,9,9,null,9,3,7,7,null,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,17,3,9,3,7,7,null,null,null,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,7,7,7,null,25,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,9,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,null,null,21,null,21,21,17,18,3,9,3,7,7,null,8,8,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,18,3,9,3,7,7,null,null,7,7,null,8,10,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,null,26,26,15,16,16,3,null,17,18,3,9,3,7,7,null,8,8,8,8,8,13,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,12,12,12,15,15,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,null,null,null,null,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,16,3,9,null,9,3,7,7,null,null,null,8,8,8,8,9,10,9,null,9,3,7,7,null,8,8,8,null,null,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,3,3,9,9,3,9,3,9,3,7,7,null,null,null,null,23,16,3,9,null,9,3,7,7,null,26,26,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,null,null,null,null,17,18,3,9,3,7,7,null,null,12,17,3,9,3,7,7,null,null,null,null,4,25,25,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,12,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,19,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,7,7,null,8,8,8,8,8,9,10,9,null,9,3,7,7,null,25,25,25,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,17,17,18,3,9,3,7,7,null,null,1,null,2,1,3,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,13,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,8,8,8,8,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,31,31,31,31,5,3,6,3,7,null,null,7,7,null,null,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,9,10,9,null,9,3,7,7,null,8,8,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,12,12,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,8,null,9,8,9,10,9,null,9,3,7,7,null,19,19,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,null,null,null,8,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,14,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,9,10,9,null,9,3,7,7,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,12,10,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,17,3,9,3,7,7,null,null,null,null,17,3,9,3,7,7,null,null,14,8,8,10,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,null,15,16,16,3,null,17,18,3,9,3,7,7,null,8,8,8,8,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,14,25,25,14,14,14,9,null,9,null,9,3,9,3,7,7,null,4,25,25,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,8,8,8,8,9,10,9,null,9,3,7,7,null,null,24,null,24,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,24,null,24,null,24,null,24,14,9,null,9,null,9,3,9,3,7,7,null,null,null,null,null,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,19,8,8,8,8,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,13,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,7,7,null,null,14,8,8,10,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,12,15,16,16,3,null,17,18,3,9,3,7,7,null,19,19,8,8,8,8,19,13,null,21,21,17,18,3,9,3,7,7,null,null,12,13,13,13,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,8,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,8,8,8,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,null,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,26,26,null,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,8,null,null,8,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,19,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,25,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,25,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,25,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,25,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,25,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,30,30,19,8,8,8,8,19,14,14,14,7,null,7,7,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,32,13,26,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,24,null,24,null,24,14,21,21,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,14,25,25,14,14,14,21,21,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,17,18,3,9,3,7,7,null,24,24,null,24,14,7,7,null,4,4,25,25,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,13,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,19,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,24,null,24,null,24,null,24,null,24,14,9,null,9,null,9,3,9,3,7,7,null,3,3,3,3,3,9,9,null,9,3,7,7,null,25,25,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,null,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,33,14,19,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,null,15,15,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,8,13,null,21,21,17,18,3,9,3,7,7,null,30,30,19,8,8,8,8,19,14,14,14,21,21,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,19,8,8,8,8,19,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,1,null,2,1,3,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,24,24,null,24,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,12,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,24,24,null,24,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,18,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,7,7,7,null,9,8,9,10,9,null,9,3,7,7,null,26,26,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,8,8,8,8,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,16,null,23,16,3,9,null,9,3,7,7,null,null,null,13,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,8,19,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,null,24,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,null,8,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,19,19,19,8,8,8,8,19,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,14,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,10,14,16,3,9,null,9,3,7,7,null,25,26,26,26,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,10,10,14,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,12,13,13,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,24,24,null,24,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,7,7,null,23,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,25,25,25,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,8,8,8,8,8,19,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,8,null,null,15,16,16,3,null,17,18,3,9,3,7,7,null,13,13,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,13,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,null,null,null,8,null,9,8,9,10,9,null,9,3,7,7,null,8,8,8,8,8,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,12,12,null,null,15,27,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,19,8,8,8,8,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,null,8,8,8,8,9,10,9,null,9,3,7,7,null,26,26,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,null,null,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,31,31,5,5,3,6,3,7,null,null,7,7,null,19,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,25,25,25,26,26,26,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,8,8,null,null,8,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,26,26,null,null,26,26,26,11,11,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,24,14,7,null,7,7,null,25,25,25,25,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,null,null,26,26,13,13,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,24,24,null,24,14,7,7,null,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,9,10,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,14,14,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,8,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,null,null,null,null,17,18,3,9,3,7,7,null,null,4,25,25,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,19,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,null,null,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,34,2,1,3,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,null,null,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,17,3,9,3,7,7,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,12,null,null,15,26,15,16,16,3,null,17,18,3,9,3,7,7,null,12,null,12,15,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,30,30,19,8,8,8,8,19,14,14,14,21,21,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,4,25,25,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,19,8,8,8,8,19,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,17,3,9,3,7,7,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,26,26,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,17,17,18,3,9,3,7,7,null,null,4,25,25,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,19,19,8,8,8,8,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,8,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,null,4,25,25,4,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,8,8,null,null,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,null,9,8,9,10,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,8,8,8,8,8,13,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,18,3,9,3,7,7,null,null,null,null,1,null,2,1,3,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,8,8,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,12,12,12,15,15,19,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,26,26,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,26,26,13,13,14,14,14,9,null,9,null,9,3,9,3,7,7,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,null,null,null,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,24,null,24,14,21,21,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,12,null,12,12,null,null,15,26,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,7,7,null,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,17,17,null,17,3,9,3,7,7,null,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,8,27,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,25,26,26,26,null,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,17,17,17,3,9,3,7,7,null,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,null,null,8,15,8,27,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,12,12,null,null,7,7,null,25,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,14,14,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,13,13,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,19,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,29,24,7,7,null,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,12,12,null,null,15,27,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,9,9,3,7,7,null,null,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,null,null,null,8,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,12,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,7,7,7,7,null,null,null,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,5,3,6,3,7,null,null,7,7,null,8,null,9,8,9,10,9,null,9,3,7,7,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,24,null,24,null,24,14,21,21,8,21,10,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,24,null,24,null,24,null,24,14,9,null,9,null,9,3,9,3,7,7,null,null,24,null,24,14,7,7,null,19,19,8,8,8,8,19,4,10,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,25,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,24,null,24,null,24,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,8,8,8,13,21,null,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,5,5,null,null,31,5,3,6,3,7,null,null,7,7,null,24,24,null,24,null,24,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,7,7,null,19,19,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,14,14,25,25,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,2,1,3,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,19,19,19,8,8,8,8,19,14,14,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,24,14,23,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,8,null,9,8,9,10,9,null,9,3,7,7,null,8,8,8,8,null,null,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,26,26,null,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,3,4,3,null,5,null,5,3,6,3,7,null,null,7,7,null,24,null,24,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,null,null,null,null,null,null,5,5,3,6,3,7,null,null,7,7,null,null,null,8,8,8,8,8,23,10,23,16,3,9,null,9,3,7,7,null,null,null,null,null,26,26,13,13,13,13,14,14,14,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,31,31,5,5,3,6,3,7,null,null,7,7,null,null,null,15,16,16,3,null,17,18,3,9,3,7,7,null,11,19,20,20,11,12,12,10,null,17,17,21,21,17,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,11,19,20,20,11,11,11,11,11,null,11,8,8,8,8,8,11,12,12,10,null,17,17,18,18,3,9,3,7,7,null,7,7,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"linenum":[null,null,null,95,null,84,98,179,121,179,null,88,null,84,177,335,177,168,null,null,168,158,null,268,309,89,12,89,null,77,177,169,158,null,472,65,105,341,68,184,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,317,46,184,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1464,102,473,65,105,341,68,null,579,524,640,308,179,94,177,169,158,null,null,93,308,640,12,640,null,636,536,640,308,179,94,177,169,158,null,24,84,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,389,179,94,177,169,158,null,117,178,158,null,67,null,9,67,179,82,null,77,177,169,158,null,552,552,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,1385,85,98,93,115,1480,52,184,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,268,158,null,48,77,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,43,12,89,null,77,177,169,158,null,47,78,24,239,41,239,125,195,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,78,239,125,195,216,173,153,249,null,240,null,239,177,111,177,169,158,null,94,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,222,null,null,109,11,109,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,121,43,12,154,248,158,null,null,552,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,537,null,549,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,109,11,109,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,513,513,373,179,94,177,169,158,null,null,null,null,122,71,24,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,26,314,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,98,145,177,234,177,107,179,107,177,169,158,null,101,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,47,78,24,209,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,189,271,309,null,null,668,null,658,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,411,411,129,195,216,173,153,249,null,240,null,239,177,111,177,169,158,null,112,152,121,121,179,null,88,null,84,177,335,177,168,null,null,168,158,null,24,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,32,71,100,93,115,316,243,173,153,58,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,null,411,114,621,null,617,536,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,null,null,null,668,null,658,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,212,212,71,24,212,173,153,249,null,240,null,239,177,111,177,169,158,null,174,157,82,82,null,77,177,169,158,null,188,null,89,309,89,12,89,null,77,177,169,158,null,250,250,null,null,267,309,11,109,161,86,179,null,608,299,179,94,177,169,158,null,null,null,null,null,668,null,658,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,282,158,null,null,267,309,317,11,12,11,67,179,82,null,77,177,169,158,null,94,24,229,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,537,null,549,null,549,null,549,147,58,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,null,null,null,345,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,238,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,552,null,549,147,49,161,77,179,null,605,299,179,94,177,169,158,null,316,316,243,173,153,58,161,86,179,null,608,299,179,94,177,169,158,null,null,193,83,null,579,533,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,14,402,166,158,null,246,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,114,1180,189,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,519,519,397,179,94,177,169,158,null,null,null,276,158,null,48,77,24,229,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,314,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,161,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,1807,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,537,null,549,null,549,147,256,158,null,null,240,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,24,209,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,353,158,null,552,552,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,11,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,52,239,102,161,77,179,null,605,299,179,94,177,169,158,null,null,null,668,null,658,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,280,158,null,617,617,null,552,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,null,null,301,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,351,158,null,null,537,null,549,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,11,314,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,352,158,null,32,71,100,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,420,58,58,314,243,173,153,58,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,null,1442,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,276,158,null,51,77,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,622,null,552,null,549,500,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,188,271,309,null,null,668,null,658,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,352,158,null,126,24,185,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,110,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,552,552,147,49,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,152,179,112,177,169,158,null,48,77,24,229,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,244,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,501,501,143,179,112,177,169,158,null,239,262,262,309,317,11,12,11,67,179,82,null,77,177,169,158,null,109,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,55,239,132,195,216,173,153,249,null,240,null,239,177,111,177,169,158,null,null,189,null,89,309,89,12,89,null,77,177,169,158,null,null,537,null,549,null,549,500,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,135,179,112,177,169,158,null,152,87,87,null,84,177,335,177,168,null,null,168,158,null,null,239,262,262,309,89,12,89,null,77,177,169,158,null,154,32,43,12,154,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,87,24,229,173,153,58,161,77,179,null,605,299,179,94,177,169,158,null,287,287,93,308,148,195,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,252,237,1738,1733,1812,1807,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,272,158,null,80,24,229,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,618,null,552,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,269,309,11,109,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,55,239,125,195,216,173,153,249,null,240,null,239,177,111,177,169,158,null,154,32,43,12,154,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,39,91,1388,85,98,93,115,1480,52,184,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,147,179,112,177,169,158,null,617,null,552,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,80,24,212,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,360,360,158,null,76,120,120,152,81,81,null,77,177,169,158,null,28,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,147,179,112,177,169,158,null,null,null,267,309,317,11,12,11,67,179,82,null,77,177,169,158,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,264,264,158,null,48,77,24,185,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,82,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,null,null,668,null,658,536,640,308,179,94,177,169,158,null,262,262,309,640,12,640,null,636,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,389,179,94,177,169,158,null,null,353,158,null,43,12,154,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,null,55,239,102,161,86,179,null,608,299,179,94,177,169,158,null,288,288,288,93,308,148,621,null,617,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,1807,473,65,96,18,null,481,481,412,412,179,94,177,169,158,null,null,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,359,421,421,58,58,312,243,173,153,58,161,86,179,null,608,299,179,94,177,169,158,null,null,null,null,null,668,null,658,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,353,158,null,64,179,81,null,77,177,169,158,null,null,null,239,262,262,309,89,12,89,null,77,177,169,158,null,288,93,308,null,null,78,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,120,152,214,214,177,107,179,107,177,169,158,null,null,null,null,9,67,179,82,null,77,177,169,158,null,52,239,132,195,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,null,null,null,null,null,520,397,179,94,177,169,158,null,null,572,133,179,112,177,169,158,null,null,null,null,122,71,24,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,36,314,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,98,98,93,115,1480,52,null,579,524,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,276,158,null,288,288,288,93,308,89,12,89,null,77,177,169,158,null,57,76,24,229,173,153,58,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,519,519,397,179,94,177,169,158,null,null,95,null,84,98,179,121,179,null,88,null,84,177,335,177,168,null,null,168,158,null,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,316,46,null,579,524,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,1750,1750,1777,1746,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,114,114,114,95,68,177,334,177,168,null,null,168,158,null,null,131,24,229,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,303,89,12,89,null,77,177,169,158,null,308,308,148,195,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,193,310,73,184,216,173,153,249,null,240,null,239,177,111,177,169,158,null,526,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,193,null,89,309,89,12,89,null,77,177,169,158,null,1442,1442,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,null,null,null,189,83,null,579,550,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,354,158,null,null,537,null,549,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,186,71,24,186,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,287,93,308,89,12,89,null,77,177,169,158,null,532,147,58,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,551,18,61,96,18,null,481,481,358,358,179,94,177,169,158,null,null,null,null,139,179,112,177,169,158,null,null,null,null,122,179,60,177,169,158,null,null,154,32,43,12,154,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,null,78,161,77,179,null,605,299,179,94,177,169,158,null,239,262,262,309,148,195,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,209,71,24,209,173,153,249,null,240,null,239,177,111,177,169,158,null,122,71,24,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,288,288,93,308,89,12,89,null,77,177,169,158,null,null,611,null,552,null,549,null,549,147,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,347,347,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,519,null,549,null,549,null,549,147,249,null,240,null,239,177,111,177,169,158,null,null,null,null,null,267,309,317,11,12,11,67,179,82,null,77,177,169,158,null,195,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,242,85,98,93,115,316,243,173,153,58,161,77,179,null,605,299,179,94,177,169,158,null,336,68,null,579,524,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,271,158,null,null,154,32,43,12,154,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,622,622,null,552,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,297,22,161,86,179,null,608,299,179,94,177,169,158,null,1391,1391,85,98,93,115,1480,52,null,579,533,640,308,179,94,177,169,158,null,null,357,115,115,115,621,null,617,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,189,83,184,216,173,153,249,null,240,null,239,177,111,177,169,158,null,100,93,115,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,null,314,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,238,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,78,239,null,1758,1784,1746,473,65,96,18,null,481,481,412,412,179,94,177,169,158,null,165,null,null,189,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,193,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,100,93,115,1480,52,184,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,227,1753,1777,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,227,1753,1777,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,227,1753,1777,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,227,1753,1777,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,227,1753,1777,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,57,91,1109,85,98,93,115,1180,189,173,153,357,null,357,158,null,549,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,155,131,239,131,195,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,618,null,552,null,549,147,640,640,309,640,12,640,null,636,525,640,308,179,94,177,169,158,null,186,71,24,186,173,153,640,640,309,640,12,640,null,636,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,null,null,null,514,359,179,94,177,169,158,null,621,621,null,552,147,261,158,null,122,122,71,24,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,100,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,100,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,335,68,184,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,1480,52,null,579,533,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,537,null,549,null,549,null,549,null,549,147,249,null,240,null,239,177,111,177,169,158,null,76,120,120,120,152,81,81,null,77,177,169,158,null,101,24,212,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,null,668,null,658,552,640,308,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,279,158,null,242,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,48,216,1480,52,184,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,null,58,58,312,243,173,153,58,161,86,179,null,608,299,179,94,177,169,158,null,189,83,null,579,524,640,308,179,94,177,169,158,null,58,91,1109,85,98,93,115,1180,189,173,153,640,640,309,640,12,640,null,636,525,640,308,179,94,177,169,158,null,1386,85,98,93,115,1480,52,null,579,550,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,105,29,null,474,474,388,388,179,94,177,169,158,null,null,null,96,null,87,98,179,121,179,null,88,null,84,177,335,177,168,null,null,168,158,null,null,537,null,549,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,621,621,621,null,552,null,549,null,549,147,58,161,77,179,null,605,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,271,158,null,36,312,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,617,617,null,552,null,549,null,549,147,43,161,77,179,null,605,299,179,94,177,169,158,null,308,500,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,360,360,158,null,89,309,89,12,89,null,77,177,169,158,null,78,239,125,195,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,null,null,239,262,262,309,148,195,216,173,153,249,null,240,null,239,177,111,177,169,158,null,67,null,9,67,179,82,null,77,177,169,158,null,null,null,335,68,184,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,111,1480,52,184,216,173,153,249,null,240,null,239,177,111,177,169,158,null,537,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,101,101,101,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,606,null,552,null,549,null,549,147,58,161,77,179,null,605,299,179,94,177,169,158,null,null,189,83,null,579,524,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,1382,1382,1382,85,98,93,115,1480,52,184,216,173,153,249,null,240,null,239,177,111,177,169,158,null,1178,189,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,88,24,185,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,352,158,null,233,71,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,32,43,12,154,64,179,81,null,77,177,169,158,null,25,239,41,239,102,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,12,12,154,64,179,81,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,356,129,129,129,195,216,173,153,249,null,240,null,239,177,111,177,169,158,null,618,null,552,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,71,32,71,100,93,115,1180,189,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,617,617,null,552,null,549,null,549,147,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,357,158,null,11,314,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,48,77,24,229,173,153,58,161,86,179,null,608,299,179,94,177,169,158,null,71,71,100,93,115,1480,52,null,579,533,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,null,617,null,552,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,288,288,288,93,308,null,null,78,161,86,179,null,608,299,179,94,177,169,158,null,49,49,null,579,550,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,129,129,195,216,173,153,249,null,240,null,239,177,111,177,169,158,null,null,null,null,189,null,89,309,89,12,89,null,77,177,169,158,null,32,71,287,93,308,148,195,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,229,229,null,null,109,11,109,161,86,179,null,608,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,1746,473,65,96,18,null,481,481,412,412,179,94,177,169,158,null,null,1518,85,98,93,115,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,238,173,153,58,161,77,179,null,605,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,282,158,null,null,239,262,262,309,89,12,89,null,77,177,169,158,null,78,239,125,195,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,null,null,8,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,331,342,68,68,177,334,177,168,null,null,168,158,null,246,246,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,57,74,24,239,41,239,132,195,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,250,250,null,null,267,309,640,12,640,null,636,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,346,346,null,null,358,358,358,238,238,1738,1733,1812,1807,473,65,105,29,null,474,474,388,388,179,94,177,169,158,null,519,147,357,null,357,158,null,41,51,71,24,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,618,null,552,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,null,null,257,268,148,148,148,195,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,617,617,null,552,147,252,158,null,null,617,null,552,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,256,309,89,12,89,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,243,243,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,71,71,287,93,308,148,195,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,null,null,null,null,null,520,397,179,94,177,169,158,null,null,122,71,24,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,248,248,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,148,195,216,173,153,43,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,24,185,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,null,null,78,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,100,100,93,115,1180,189,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,549,null,549,147,49,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,1807,473,65,105,29,null,474,474,388,388,179,94,177,169,158,null,177,81,98,179,121,179,null,88,null,84,177,335,177,168,null,null,168,158,null,null,null,267,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,152,179,112,177,169,158,null,526,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,208,null,null,102,237,102,161,77,179,null,605,299,179,94,177,169,158,null,308,null,406,58,312,243,173,153,58,161,86,179,null,608,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,39,91,1109,85,98,93,115,1180,189,173,153,640,640,309,640,12,640,null,636,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,1807,473,65,96,18,null,481,481,412,412,179,94,177,169,158,null,null,122,71,24,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,240,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,1391,85,98,93,115,1480,52,184,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,134,179,112,177,169,158,null,618,null,552,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,78,239,132,195,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,316,243,173,153,58,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,null,null,519,519,360,179,94,177,169,158,null,null,122,71,24,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,246,246,85,98,93,115,316,243,173,153,58,161,77,179,null,605,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,189,83,184,216,173,153,249,null,240,null,239,177,111,177,169,158,null,null,122,71,24,122,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,250,250,null,null,267,309,317,11,12,11,67,179,82,null,77,177,169,158,null,189,null,89,309,89,12,89,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,71,71,287,93,308,148,621,null,617,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,413,179,94,177,169,158,null,null,null,null,96,null,87,98,179,121,179,null,88,null,84,177,335,177,168,null,null,168,158,null,71,287,93,308,317,11,12,11,67,179,82,null,77,177,169,158,null,363,421,421,58,58,312,243,173,153,58,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,357,158,null,552,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,78,239,132,195,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,78,239,124,195,216,173,153,249,null,240,null,239,177,111,177,169,158,null,611,null,552,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,622,622,null,552,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,null,null,null,351,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,352,158,null,100,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,58,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,552,null,549,147,640,640,309,640,12,640,null,636,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,549,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,193,null,229,229,null,null,102,235,102,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,276,158,null,25,229,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,552,552,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,519,null,549,null,549,147,58,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,140,140,null,140,179,112,177,169,158,null,null,537,null,549,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,289,289,289,93,308,11,109,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,23,239,41,239,null,1758,1784,1746,473,65,105,29,null,474,474,388,388,179,94,177,169,158,null,501,501,143,179,112,177,169,158,null,537,null,549,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,null,null,193,109,309,11,109,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,411,411,null,null,267,158,null,57,74,24,185,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,233,233,71,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,129,129,129,195,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,248,248,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,14,402,166,158,null,238,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,229,229,null,null,109,11,109,161,77,179,null,605,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,112,112,177,169,158,null,null,40,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,32,71,287,93,308,317,11,12,11,67,179,82,null,77,177,169,158,null,552,552,147,49,161,86,179,null,608,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,null,null,null,267,309,640,12,640,null,636,525,640,308,179,94,177,169,158,null,270,654,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,353,353,353,158,null,null,null,78,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,81,177,335,177,168,null,null,168,158,null,195,null,89,309,89,12,89,null,77,177,169,158,null,526,147,49,161,77,179,null,605,299,179,94,177,169,158,null,537,null,549,null,549,147,640,640,309,640,12,640,null,636,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,552,null,549,null,549,null,549,147,249,null,240,null,239,177,111,177,169,158,null,null,552,null,549,147,256,158,null,1520,1520,85,98,93,115,1570,122,12,122,179,null,88,null,84,177,335,177,168,null,null,168,158,null,47,120,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,98,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,617,null,552,null,549,500,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,null,null,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,552,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,617,null,552,null,549,147,43,161,77,179,null,605,299,179,94,177,169,158,null,262,262,309,148,621,null,617,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,68,68,null,null,88,68,177,334,177,168,null,null,168,158,null,617,617,null,552,null,549,null,549,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,272,158,null,235,235,235,85,98,93,115,316,243,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,233,233,71,24,233,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,1752,1752,1790,1746,473,65,96,18,null,481,481,412,412,179,94,177,169,158,null,84,99,179,121,179,null,88,null,84,177,335,177,168,null,null,168,158,null,1104,1104,1104,85,98,93,115,1180,189,173,153,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,532,147,11,317,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,189,null,89,309,89,12,89,null,77,177,169,158,null,287,287,93,308,null,null,78,161,86,179,null,608,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,52,239,null,1758,1784,1746,473,65,96,18,null,481,481,412,412,179,94,177,169,158,null,179,121,179,null,88,null,84,177,335,177,168,null,null,168,158,null,552,null,549,147,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,null,null,null,null,null,null,84,84,177,335,177,168,null,null,168,158,null,null,null,239,262,262,309,317,11,12,11,67,179,82,null,77,177,169,158,null,null,null,null,null,257,268,148,148,148,195,216,173,153,43,161,77,179,null,605,299,179,94,177,169,158,null,473,1442,84,80,473,65,105,31,null,474,474,609,525,640,308,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,552,640,308,179,94,177,169,158,null,473,1442,84,80,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,331,342,68,68,177,334,177,168,null,null,168,158,null,null,null,78,161,77,179,null,605,299,179,94,177,169,158,null,473,1430,69,65,473,65,96,20,null,481,481,613,536,640,308,179,94,177,169,158,null,473,1442,84,80,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,105,29,null,474,474,356,356,179,94,177,169,158,null,473,1430,69,65,486,52,24,82,24,null,101,1725,1721,1750,1790,1746,473,65,96,18,null,481,481,357,357,179,94,177,169,158,null,361,158,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"memalloc":[25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.1380233764648,25.9584579467773,25.9584579467773,25.9584579467773,25.9584579467773,25.9584579467773,25.9584579467773,25.9584579467773,25.9584579467773,25.9584579467773,25.9584579467773,25.9584579467773,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,26.7347869873047,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.4794769287109,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.7853088378906,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,27.9719696044922,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.0623626708984,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.2521514892578,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3046264648438,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.3513565063477,25.5254974365234,25.5254974365234,25.5254974365234,25.5254974365234,25.5254974365234,25.5254974365234,25.5254974365234,25.5254974365234,25.5254974365234,25.8469772338867,25.8469772338867,25.8469772338867,25.8469772338867,26.150993347168,26.150993347168,26.150993347168,26.150993347168,26.150993347168,26.150993347168,26.150993347168,26.150993347168,26.150993347168,26.150993347168,26.150993347168,26.150993347168,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.4107055664062,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,26.0507507324219,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.1036758422852,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.276237487793,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.3728866577148,25.7326278686523,25.7326278686523,25.7326278686523,25.7326278686523,25.7326278686523,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,26.0663223266602,25.1228408813477,25.1228408813477,25.1228408813477,25.1228408813477,25.1228408813477,25.1228408813477,25.1228408813477,25.1228408813477,25.1228408813477,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.3363418579102,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.4456787109375,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.6181793212891,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.7222061157227,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.9951705932617,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.2705154418945,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.6837005615234,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,25.8754806518555,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,26.0415496826172,25.4455261230469,25.4455261230469,25.4455261230469,25.4455261230469,25.4455261230469,25.4455261230469,25.4455261230469,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,25.7965698242188,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.0294189453125,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,26.2378768920898,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.4496765136719,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.5965957641602,25.7565765380859,25.7565765380859,25.7565765380859,25.7565765380859,25.7565765380859,25.7565765380859,25.7565765380859,25.7565765380859,25.7565765380859,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.1739044189453,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,26.4705657958984,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.6797180175781,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,25.9252014160156,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.0189971923828,26.2735061645508,26.2735061645508,26.2735061645508,26.2735061645508,26.2735061645508,26.2735061645508,26.2735061645508,26.2735061645508,26.2735061645508,26.2735061645508,26.2735061645508,26.2735061645508,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,26.6639709472656,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,25.8974685668945,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.1028747558594,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.2955627441406,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.4193649291992,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,26.7068481445312,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,25.9985427856445,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.2455978393555,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.5077514648438,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.6640090942383,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,26.7532272338867,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9169998168945,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,25.9696044921875,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0260467529297,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.0638427734375,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.1450119018555,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.3900833129883,26.7508392333984,26.7508392333984,26.7508392333984,26.7508392333984,26.7508392333984,26.7508392333984,26.7508392333984,26.7508392333984,26.7508392333984,26.7508392333984,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,27.0200729370117,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.1473693847656,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.3236236572266,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.476921081543,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.5942840576172,26.9494552612305,26.9494552612305,26.9494552612305,26.9494552612305,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.199836730957,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.3692321777344,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.5273284912109,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.6904220581055,26.8912506103516,26.8912506103516,26.8912506103516,26.8912506103516,26.8912506103516,26.8912506103516,26.8912506103516,26.8912506103516,26.8912506103516,26.8912506103516,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.2379608154297,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.3092575073242,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,25.8144149780273,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.1083755493164,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.2953948974609,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,26.4611358642578,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.4021835327148,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.583610534668,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,25.7030258178711,26.1372299194336,26.1372299194336,26.1372299194336,26.1372299194336,26.1372299194336,26.1372299194336,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,26.4061050415039,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.457763671875,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.7020797729492,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.8469696044922,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,25.9774169921875,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.0076217651367,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.05126953125,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.2206878662109,26.4248123168945,26.4248123168945,26.4248123168945,26.4248123168945,26.4248123168945,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.6501922607422,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,25.8737945556641,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.0621032714844,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.2511215209961,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.3980102539062,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,26.5208892822266,25.9155197143555,25.9155197143555,25.9155197143555,25.9155197143555,25.9155197143555,25.9155197143555,25.9155197143555,25.9155197143555,25.9155197143555,25.9155197143555,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.4635162353516,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,26.6798553466797,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.8226547241211,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,25.9953231811523,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.1181259155273,26.5297470092773,26.5297470092773,26.5297470092773,26.5297470092773,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.8678665161133,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.9695434570312,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.0188064575195,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.2163314819336,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.4129333496094,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.5096740722656,26.9003219604492,26.9003219604492,26.9003219604492,26.9003219604492,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.1693649291992,26.6325149536133,26.6325149536133,26.6325149536133,26.6325149536133,26.6325149536133,26.6325149536133,26.6325149536133,26.6325149536133,26.6325149536133,26.6325149536133,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.7954254150391,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.1794738769531,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.2908325195312,26.6871948242188,26.6871948242188,26.6871948242188,26.6871948242188,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,26.9030838012695,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,27.1162719726562,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.3560562133789,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6012496948242,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,26.6979904174805,27.1282806396484,27.1282806396484,27.1282806396484,27.1282806396484,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.3271636962891,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,26.7719955444336,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.0020217895508,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,27.1406478881836,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.5524749755859,26.876708984375,26.876708984375,26.876708984375,26.876708984375,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,27.2566757202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.6551132202148,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8088302612305,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.8620910644531,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9255142211914,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,26.9858322143555,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.0764999389648,27.4357070922852,27.4357070922852,27.4357070922852,27.4357070922852,27.4357070922852,27.4357070922852,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,26.7458038330078,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.0014038085938,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.1922302246094,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,27.3651809692383,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.8283309936523,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,26.9472961425781,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,27.6075210571289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,26.8750991821289,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.0928192138672,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.234977722168,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.3791046142578,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,27.4990463256836,26.955322265625,26.955322265625,26.955322265625,26.955322265625,26.955322265625,26.955322265625,26.955322265625,26.955322265625,26.955322265625,26.955322265625,26.955322265625,26.955322265625,26.955322265625,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.3125152587891,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.5826568603516,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.0307083129883,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.2758865356445,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.3726119995117,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.6372528076172,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.1347579956055,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.6057052612305,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.7606048583984,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.2931518554688,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.4074249267578,27.6756286621094,27.6756286621094,27.6756286621094,27.6756286621094,27.6756286621094,27.6756286621094,27.6756286621094,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,27.869255065918,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.0080032348633,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,28.146842956543,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.4206161499023,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.5762252807617,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.7505340576172,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,27.8897857666016,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0183792114258,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,28.0237350463867,26.2228622436523,26.2228622436523,26.2228622436523,26.2228622436523,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.4757766723633,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.7018280029297,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.989501953125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.1085205078125,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.2783813476562,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.3750915527344,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.6548690795898,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.1473236083984,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.2867050170898,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.487907409668,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.7330856323242,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.8298263549805,26.2662658691406,26.2662658691406,26.2662658691406,26.2662658691406,26.2662658691406,26.2662658691406,26.2662658691406,26.2662658691406,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,26.5789413452148,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,27.0547332763672,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.33154296875,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.5041351318359,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,26.6008758544922,27.055305480957,27.055305480957,27.055305480957,27.055305480957,27.3486175537109,27.3486175537109,27.3486175537109,27.3486175537109,27.3486175537109,27.3486175537109,27.3486175537109,27.3486175537109,27.3486175537109,27.3486175537109,27.3486175537109,27.3486175537109,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.523307800293,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.7328033447266,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,26.9779815673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.0717315673828,27.3933029174805,27.3933029174805,27.3933029174805,27.3933029174805,27.3933029174805,27.3933029174805,27.3933029174805,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,26.8332595825195,27.3094329833984,27.3094329833984,27.3094329833984,27.3094329833984,27.3094329833984,27.3094329833984,27.3094329833984,27.3094329833984,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.6532592773438,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.8258514404297,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,26.9225463867188,27.2688064575195,27.2688064575195,27.2688064575195,27.2688064575195,27.2688064575195,27.2688064575195,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,27.6735916137695,26.807243347168,26.807243347168,26.807243347168,26.807243347168,26.807243347168,26.807243347168,26.807243347168,26.807243347168,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.0959243774414,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2197570800781,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.2665328979492,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.342399597168,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4026870727539,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,27.4646301269531,26.8570251464844,26.8570251464844,26.8570251464844,26.8570251464844,26.8570251464844,26.8570251464844,26.8570251464844,26.8570251464844,26.8570251464844,27.1231918334961,27.1231918334961,27.1231918334961,27.1231918334961,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.3607788085938,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.7533798217773,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.035026550293,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.2557983398438,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.3495635986328,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.568244934082,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.9336700439453,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.2595138549805,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.5709915161133,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.7226257324219,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.2377548217773,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.3344650268555,27.7721786499023,27.7721786499023,27.7721786499023,27.7721786499023,28.0823211669922,28.0823211669922,28.0823211669922,28.0823211669922,28.0823211669922,28.0823211669922,28.0823211669922,28.0823211669922,28.0823211669922,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.3040618896484,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.4991836547852,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.6954803466797,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.8423385620117,27.4850540161133,27.4850540161133,27.4850540161133,27.4850540161133,27.4850540161133,27.4850540161133,27.4850540161133,27.4850540161133,27.4850540161133,27.4850540161133,27.4850540161133,27.4850540161133,27.869140625,27.869140625,27.869140625,27.869140625,27.869140625,27.869140625,27.869140625,27.869140625,27.869140625,27.869140625,27.869140625,27.869140625,27.869140625,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,28.1941909790039,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.5662841796875,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.7111740112305,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.841682434082,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.8750762939453,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,27.9150848388672,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.0891265869141,28.195198059082,28.195198059082,28.195198059082,28.195198059082,28.195198059082,28.195198059082,28.195198059082,28.195198059082,28.195198059082,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,27.7014923095703,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,28.0713958740234,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.6288604736328,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.7759780883789,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,27.915168762207,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.0325164794922,28.3582382202148,28.3582382202148,28.3582382202148,28.3582382202148,28.3582382202148,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,27.7913513183594,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,28.1579818725586,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.7433624267578,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,27.8827896118164,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.0296630859375,28.2617950439453,28.2617950439453,28.2617950439453,28.2617950439453,28.2617950439453,28.2617950439453,28.2617950439453,28.2617950439453,28.2617950439453,28.2617950439453,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.6157150268555,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.145149230957,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,28.4239196777344,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.5818786621094,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.7530059814453,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,26.8482208251953,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.3198165893555,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,27.5890426635742,26.7118453979492,26.7118453979492,26.7118453979492,26.7118453979492,26.7118453979492,26.7118453979492,26.7118453979492,26.7118453979492,26.7118453979492,26.7118453979492,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,26.9373550415039,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.1434326171875,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.2826385498047,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,27.4029312133789,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,26.8486099243164,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.1824111938477,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,27.4506072998047,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,26.8760070800781,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.0133438110352,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.1550064086914,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.274169921875,27.6661071777344,27.6661071777344,27.6661071777344,27.6661071777344,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,26.9296264648438,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.0757369995117,27.2247772216797,27.2247772216797,27.2247772216797,27.2247772216797,27.2247772216797,27.2247772216797,27.2247772216797,27.2247772216797,27.2247772216797,27.2247772216797,27.2247772216797,27.2247772216797,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.4056701660156,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.5784759521484,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.0750579833984,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.1655120849609,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2042846679688,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.2432479858398,27.4653396606445,27.4653396606445,27.4653396606445,27.4653396606445,27.4653396606445,27.4653396606445,27.4653396606445,27.4653396606445,27.4653396606445,27.4653396606445,27.7564392089844,27.7564392089844,27.7564392089844,27.7564392089844,27.7564392089844,27.7564392089844,27.7564392089844,27.7564392089844,27.7564392089844,27.7564392089844,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,28.0463638305664,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.1748962402344,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.2918014526367,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.4308090209961,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6034927368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.6972427368164,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.181755065918,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.4994812011719,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.8673706054688,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.2525405883789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.4058609008789,27.540397644043,27.540397644043,27.540397644043,27.540397644043,27.540397644043,27.540397644043,27.540397644043,27.540397644043,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.6722946166992,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.9277572631836,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.4358215332031,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.6295394897461,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.7767944335938,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.9529571533203,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.4508056640625,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.6180267333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,27.7117767333984,28.0747451782227,28.0747451782227,28.0747451782227,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,28.3978118896484,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.6303558349609,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,27.8762130737305,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,28.0575256347656,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6036987304688,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.6959686279297,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.7261276245117,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.767219543457,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,27.8284912109375,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.0538482666016,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.3779373168945,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,28.5659866333008,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,27.7880630493164,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.0652847290039,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,28.2048034667969,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.7993698120117,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,27.8927993774414,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.1172409057617,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,28.5569381713867,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,27.8919830322266,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.0497283935547,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.2591781616211,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.4351425170898,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,28.442138671875,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.2511672973633,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3012084960938,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.3917083740234,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,26.7883224487305,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.0606842041016,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.3268127441406,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.5260696411133,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.6603240966797,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.7984771728516,27.9190979003906,27.9190979003906,27.9190979003906,27.9190979003906,27.9190979003906,27.9190979003906,27.9190979003906,27.9190979003906,27.9190979003906,27.9190979003906,27.9190979003906,27.9190979003906,28.1805038452148,28.1805038452148,28.1805038452148,28.1805038452148,28.1805038452148,28.1805038452148,28.1805038452148,28.1805038452148,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.3861541748047,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.5568771362305,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.7647171020508,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,28.9160079956055,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,29.0503463745117,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.493766784668,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.6545104980469,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,26.9457702636719,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.4799270629883,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.6756973266602,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,27.84716796875,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.0362243652344,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.1863708496094,28.5733947753906,28.5733947753906,28.5733947753906,28.5733947753906,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,28.9696350097656,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,29.2055511474609,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6007232666016,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.6831283569336,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.7285385131836,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.8238677978516,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,26.9372634887695,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.0085144042969,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.1623077392578,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.5792694091797,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,27.834358215332,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.0603485107422,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.2607421875,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.444450378418,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.5660400390625,28.8935089111328,28.8935089111328,28.8935089111328,28.8935089111328,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,29.2708053588867,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,26.8601379394531,27.0531616210938,27.0531616210938,27.0531616210938,27.0531616210938,27.0531616210938,27.0531616210938,27.0531616210938,27.0531616210938,27.0531616210938,27.0531616210938,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.2085266113281,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.3746871948242,27.8667068481445,27.8667068481445,27.8667068481445,27.8667068481445,28.195068359375,28.195068359375,28.195068359375,28.195068359375,28.195068359375,28.195068359375,28.195068359375,28.195068359375,28.195068359375,28.195068359375,28.195068359375,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.5294494628906,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.7048187255859,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,28.870979309082,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,29.1737289428711,26.9975357055664,26.9975357055664,26.9975357055664,26.9975357055664,26.9975357055664,26.9975357055664,26.9975357055664,26.9975357055664,26.9975357055664,26.9975357055664,26.9975357055664,26.9975357055664,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.279426574707,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.4803848266602,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.7258377075195,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,27.8298492431641,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.0813751220703,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.4947662353516,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.5854797363281,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.6811447143555,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.8162841796875,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,28.9711380004883,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.1162872314453,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.2555999755859,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,29.3758773803711,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.2643280029297,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.626708984375,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,27.8976058959961,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.1443557739258,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.3898086547852,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.4865036010742,28.9106597900391,28.9106597900391,28.9106597900391,28.9106597900391,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.2509307861328,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.3904190063477,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,29.5552825927734,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.4092864990234,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,27.5562973022461,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.0963287353516,28.3990097045898,28.3990097045898,28.3990097045898,28.3990097045898,28.3990097045898,28.3990097045898,28.3990097045898,28.3990097045898,28.3990097045898,28.3990097045898,28.3990097045898,28.3990097045898,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,28.7659683227539,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.0114212036133,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.1154327392578,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.3696212768555,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,29.7471389770508,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,30.0180053710938,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,26.9226455688477,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.1076354980469,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.2804718017578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.3771514892578,27.8288803100586,27.8288803100586,27.8288803100586,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.222053527832,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.4366836547852,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.596549987793,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.7767486572266,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,28.8705139160156,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.3598861694336,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,29.5847320556641,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.4008331298828,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.5922241210938,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,27.7443542480469,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.0613555908203,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.5841293334961,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.8236541748047,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9012908935547,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,28.9595031738281,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0267181396484,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.0991134643555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2104415893555,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.2962341308594,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,29.4995346069336,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.438606262207,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.7281875610352,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,27.9581298828125,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.1546859741211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.3275375366211,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.4315032958984,28.8299026489258,28.8299026489258,28.8299026489258,28.8299026489258,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.2092895507812,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.5109786987305,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,29.7179107666016,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.5086364746094,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,27.6119766235352,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.0846786499023,28.470573425293,28.470573425293,28.470573425293,28.470573425293,28.470573425293,28.470573425293,28.470573425293,28.470573425293,28.470573425293,28.470573425293,28.470573425293,28.470573425293,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,28.7588043212891,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.0042572021484,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.1009826660156,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.5685653686523,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,29.8813171386719,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,30.1227951049805,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.699592590332,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,27.8774490356445,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.0162963867188,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.2050933837891,28.4880676269531,28.4880676269531,28.4880676269531,28.4880676269531,28.4880676269531,28.4880676269531,28.4880676269531,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.6146240234375,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.7390365600586,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,28.8773498535156,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.0329895019531,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.1958847045898,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.3354949951172,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.4715423583984,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.5738754272461,29.8792953491211,29.8792953491211,29.8792953491211,29.8792953491211,29.8792953491211,29.8792953491211,29.8792953491211,29.8792953491211,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,30.2220458984375,27.9876708984375,27.9876708984375,27.9876708984375,27.9876708984375,27.9876708984375,27.9876708984375,27.9876708984375,27.9876708984375,27.9876708984375,27.9876708984375,27.9876708984375,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.2010498046875,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.4465026855469,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,28.5432281494141,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.0325622558594,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.3232498168945,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.59912109375,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.7727508544922,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,29.9428405761719,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.0468215942383,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,30.220703125,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.3532028198242,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.7279052734375,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,28.9492111206055,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.1243896484375,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.2714004516602,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.3913116455078,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,29.8013534545898,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.2345581054688,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,30.4570999145508,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.2307815551758,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.406852722168,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.5258178710938,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,28.9866790771484,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.2934646606445,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.6206588745117,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.7940063476562,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,29.9601669311523,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.1204528808594,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,30.540168762207,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.4577407836914,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.7120666503906,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,28.95751953125,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.0615310668945,29.3852005004883,29.3852005004883,29.3852005004883,29.3852005004883,29.3852005004883,29.3852005004883,29.3852005004883,29.3852005004883,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,29.8226089477539,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.0907516479492,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.1799468994141,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2083587646484,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.2810363769531,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.3780670166016,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.484001159668,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,30.5760879516602,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.6641006469727,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,28.9860916137695,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.1856460571289,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.4357604980469,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.6775817871094,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.8536376953125,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,29.9726181030273,30.2400665283203,30.2400665283203,30.2400665283203,30.2400665283203,30.2400665283203,30.2400665283203,30.2400665283203,30.2400665283203,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.7024993896484,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,30.938117980957,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.727294921875,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,28.9257431030273,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.0758819580078,29.2184219360352,29.2184219360352,29.2184219360352,29.2184219360352,29.2184219360352,29.2184219360352,29.2184219360352,29.2184219360352,29.2184219360352,29.2184219360352,29.2184219360352,29.2184219360352,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,29.6390991210938,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.0995025634766,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.3582305908203,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.5343322753906,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.6532821655273,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,30.888786315918,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,31.125602722168,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,28.9513778686523,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.225341796875,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.4395446777344,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.5910263061523,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7453155517578,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.7890090942383,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,29.8175659179688,30.0264434814453,30.0264434814453,30.0264434814453,30.0264434814453,30.0264434814453,30.0264434814453,30.0264434814453,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.3597412109375,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.5704727172852,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,30.8449401855469,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,31.0139770507812,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.1110076904297,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.2448577880859,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.365119934082,29.7599716186523,29.7599716186523,29.7599716186523,29.7599716186523,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.0697250366211,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.3311309814453,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.5349044799805,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.7110061645508,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,30.8299560546875,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.0831680297852,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,31.4491348266602,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.3751449584961,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.6172943115234,29.8355331420898,29.8355331420898,29.8355331420898,29.8355331420898,29.8355331420898,29.8355331420898,29.8355331420898,29.8355331420898,29.8355331420898,29.8355331420898,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,29.95654296875,30.3881607055664,30.3881607055664,30.3881607055664,30.3881607055664,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.6885375976562,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,30.9207153320312,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.1163177490234,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,31.2795791625977,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.4844207763672,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,29.5986633300781,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.0575714111328,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.3386383056641,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.6384201049805,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,30.8639068603516,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.010856628418,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.1308135986328,31.4451217651367,31.4451217651367,31.4451217651367,31.4451217651367,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,31.7655487060547,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.6583633422852,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,29.8618087768555,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.0346221923828,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.1816177368164,30.5407562255859,30.5407562255859,30.5407562255859,30.5407562255859,30.5407562255859,30.5407562255859,30.5407562255859,30.5407562255859,30.5407562255859,30.5407562255859,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,30.9919662475586,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.2116851806641,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.3913040161133,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,31.536376953125,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8101043701172,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.8958969116211,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,29.9499740600586,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.0118026733398,30.2030487060547,30.2030487060547,30.2030487060547,30.2030487060547,30.2030487060547,30.2030487060547,30.2030487060547,30.2030487060547,30.2030487060547,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.5727462768555,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.7919845581055,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,30.9982604980469,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.1896209716797,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.3403549194336,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.4602813720703,31.7458953857422,31.7458953857422,31.7458953857422,31.7458953857422,31.7458953857422,31.7458953857422,31.7458953857422,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,32.0689926147461,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,29.9251556396484,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.1283874511719,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.3359756469727,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.5120468139648,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,30.6310272216797,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.0899276733398,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.3794631958008,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,31.7595901489258,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.0915679931641,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.2309112548828,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.3584442138672,30.7569580078125,30.7569580078125,30.7569580078125,30.7569580078125,30.7569580078125,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.0539932250977,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.3002090454102,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.5209274291992,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.6969985961914,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,31.7977447509766,32.0727462768555,32.0727462768555,32.0727462768555,32.0727462768555,32.0727462768555,32.0727462768555,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,32.4311904907227,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.4273910522461,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.6496658325195,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7175140380859,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.7596130371094,30.833122253418,30.833122253418,30.833122253418,30.833122253418,30.833122253418,30.833122253418,30.833122253418,30.833122253418,30.833122253418,30.833122253418,30.833122253418,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,30.9635467529297,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.0238494873047,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.1212692260742,31.4879989624023,31.4879989624023,31.4879989624023,31.4879989624023,31.4879989624023,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,32.0259246826172,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.4124145507812,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.5492935180664,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.6962280273438,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,30.8162002563477,31.2244720458984,31.2244720458984,31.2244720458984,31.2244720458984,31.2244720458984,31.2244720458984,31.2244720458984,31.2244720458984,31.2244720458984,31.2244720458984,31.2244720458984,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.5366744995117,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.7768478393555,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,31.9323501586914,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.1514282226562,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.2481384277344,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5009613037109,32.5907745361328,32.5907745361328,32.5907745361328,32.5907745361328,32.5907745361328,32.5907745361328,32.5907745361328,32.5907745361328,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.4986343383789,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.613166809082,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,28.8227157592773,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.1101303100586,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.264518737793,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.4114685058594,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,29.9496765136719,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.2172470092773,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.4456787109375,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,30.6395416259766,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.5363006591797,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.683235168457,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,28.8031768798828,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.2057189941406,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.4548110961914,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,29.8929824829102,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.1384353637695,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.2351760864258,30.6045227050781,30.6045227050781,30.6045227050781,30.6045227050781,30.6045227050781,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,30.9957504272461,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.6897583007812,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,28.9625549316406,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.2080078125,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.3047027587891,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.533317565918,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.8638229370117,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,29.9415969848633,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.0340805053711,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.1278381347656,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.370361328125,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.5315246582031,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7042999267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,30.7980499267578,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,28.9483108520508,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.254020690918,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.6715393066406,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,29.8791885375977,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.124641418457,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.2213363647461,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,30.698356628418,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.0423431396484,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,31.2447357177734,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.0996932983398,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.2420349121094,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.3862380981445,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.5061798095703,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,29.9094543457031,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.4447708129883,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.6686630249023,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.8447189331055,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,30.9352340698242,31.3974227905273,31.3974227905273,31.3974227905273,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688,31.3995971679688],"meminc":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8204345703125,0,0,0,0,0,0,0,0,0,0,0.776329040527344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.74468994140625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.305831909179688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.186660766601562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.90960693359375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.189788818359375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0524749755859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0467300415039062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.174140930175781,0,0,0,0,0,0,0,0,0.321479797363281,0,0,0,0.30401611328125,0,0,0,0,0,0,0,0,0,0,0,0.259712219238281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.359954833984375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.947074890136719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172561645507812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.096649169921875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.3597412109375,0,0,0,0,0.333694458007812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.9434814453125,0,0,0,0,0,0,0,0,0.2135009765625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.109336853027344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172500610351562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.104026794433594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.272964477539062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.724655151367188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.413185119628906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.191780090332031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.166069030761719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.596023559570312,0,0,0,0,0,0,0.351043701171875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.23284912109375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.208457946777344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.788200378417969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146919250488281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.159980773925781,0,0,0,0,0,0,0,0,0.417327880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.296661376953125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.790847778320312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2454833984375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0937957763671875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.254508972167969,0,0,0,0,0,0,0,0,0,0,0,0.390464782714844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.766502380371094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.205406188964844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.19268798828125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.123802185058594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.287483215332031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.708305358886719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.247055053710938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.262153625488281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.156257629394531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0892181396484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.836227416992188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0526046752929688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0564422607421875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0377960205078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0811691284179688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245071411132812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.360755920410156,0,0,0,0,0,0,0,0,0,0.269233703613281,0,0,0,0,0,0,0,0,0,0,0,0,-0.872703552246094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.176254272460938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.153297424316406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.117362976074219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.355171203613281,0,0,0,-0.749618530273438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.169395446777344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.158096313476562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.163093566894531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.200828552246094,0,0,0,0,0,0,0,0,0,-1.65328979492188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0712966918945312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.505157470703125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.293960571289062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.187019348144531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.165740966796875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.05895233154297,0,0,0,0,0,0,0,0,0,0,0,0,0,0.181427001953125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.119415283203125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.4342041015625,0,0,0,0,0,0.268875122070312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.948341369628906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.244316101074219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.144889831542969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.130447387695312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0302047729492188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0436477661132812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.169418334960938,0,0,0,0,0,0,0,0,0,0,0,0,0.204124450683594,0,0,0,0,-0.774620056152344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.223602294921875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.188308715820312,0,0,0,0,0,0,0,0,0,0,0,0,0.189018249511719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146888732910156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.122879028320312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.605369567871094,0,0,0,0,0,0,0,0,0,0.547996520996094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.216339111328125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.857200622558594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.17266845703125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.122802734375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.41162109375,0,0,0,0.338119506835938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.101676940917969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.950736999511719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.197525024414062,0,0,0,0,0,0,0,0,0,0,0,0,0,0.196601867675781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09674072265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.390647888183594,0,0,0,-0.73095703125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.463150024414062,0,0,0,0,0,0,0,0,0,0.162910461425781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.615951538085938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.111358642578125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.3963623046875,0,0,0,0.215888977050781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.213188171386719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.760215759277344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245193481445312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09674072265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.430290222167969,0,0,0,-0.801116943359375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.444831848144531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.230026245117188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.138626098632812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.588172912597656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.324234008789062,0,0,0,0.379966735839844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.6015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0.153717041015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0532608032226562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0634231567382812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0603179931640625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.090667724609375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.359207153320312,0,0,0,0,0,-0.689903259277344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.255599975585938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.190826416015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172950744628906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.536849975585938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.118965148925781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.305244445800781,0,0,0,0,0,0,0,0,0.35498046875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.732421875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.217720031738281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.142158508300781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.144126892089844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.119941711425781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.543724060058594,0,0,0,0,0,0,0,0,0,0,0,0,0.357192993164062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2701416015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.551948547363281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.24517822265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0967254638671875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.264640808105469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.502494812011719,0,0,0,0,0,0,0,0,0,0,0,0,0,0.470947265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.154899597167969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.467453002929688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.114273071289062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.268203735351562,0,0,0,0,0,0,0.193626403808594,0,0,0,0,0,0,0,0,0,0,0,0,0,0.138748168945312,0,0,0,0,0,0,0,0,0,0,0,0,0,0.138839721679688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.726226806640625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.155609130859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.174308776855469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139251708984375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.128593444824219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0053558349609375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.80087280273438,0,0,0,0.252914428710938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.226051330566406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.287673950195312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.8809814453125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.16986083984375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.096710205078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.279777526855469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.507545471191406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139381408691406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.201202392578125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.24517822265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09674072265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.563560485839844,0,0,0,0,0,0,0,0.312675476074219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.475791931152344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.723190307617188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172592163085938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09674072265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.454429626464844,0,0,0,0.293312072753906,0,0,0,0,0,0,0,0,0,0,0,-0.825309753417969,0,0,0,0,0,0,0,0,0,0,0,0,0.209495544433594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.24517822265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.321571350097656,0,0,0,0,0,0,-0.560043334960938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.476173400878906,0,0,0,0,0,0,0,-0.656173706054688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172592163085938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0966949462890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.346260070800781,0,0,0,0,0,0.40478515625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.866348266601562,0,0,0,0,0,0,0,0.288681030273438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.123832702636719,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0467758178710938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.07586669921875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0602874755859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0619430541992188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.60760498046875,0,0,0,0,0,0,0,0,0.266166687011719,0,0,0,0.237586975097656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.392601013183594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.718353271484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.220771789550781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0937652587890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.218681335449219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.365425109863281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.674156188964844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.311477661132812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.151634216308594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.484870910644531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.096710205078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.437713623046875,0,0,0,0.310142517089844,0,0,0,0,0,0,0,0,-0.77825927734375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.195121765136719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.196296691894531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146858215332031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.357284545898438,0,0,0,0,0,0,0,0,0,0,0,0.384086608886719,0,0,0,0,0,0,0,0,0,0,0,0,0.325050354003906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.627906799316406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.144889831542969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.130508422851562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0333938598632812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.040008544921875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.174041748046875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.106071472167969,0,0,0,0,0,0,0,0,-0.493705749511719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.369903564453125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.442535400390625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.147117614746094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139190673828125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.117347717285156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.325721740722656,0,0,0,0,-0.566886901855469,0,0,0,0,0,0,0,0,0,0,0,0,0,0.366630554199219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.414619445800781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139427185058594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146873474121094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.232131958007812,0,0,0,0,0,0,0,0,0,0.353919982910156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.470565795898438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.278770446777344,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.842041015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.171127319335938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09521484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.471595764160156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.26922607421875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.877197265625,0,0,0,0,0,0,0,0,0,0.225509643554688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.206077575683594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139205932617188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.120292663574219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.5543212890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.33380126953125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.268196105957031,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.574600219726562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.137336730957031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.14166259765625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.119163513183594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.391937255859375,0,0,0,-0.736480712890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146110534667969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.149040222167969,0,0,0,0,0,0,0,0,0,0,0,0.180892944335938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172805786132812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.50341796875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0904541015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0387725830078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0389633178710938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.222091674804688,0,0,0,0,0,0,0,0,0,0.291099548339844,0,0,0,0,0,0,0,0,0,0.289924621582031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.871467590332031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.116905212402344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139007568359375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172683715820312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.515487670898438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.317726135253906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.367889404296875,0,0,0,0,0,0,0,0,0,0,0,0,-0.614830017089844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1533203125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.134536743164062,0,0,0,0,0,0,0,0.13189697265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.255462646484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.491935729980469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.193717956542969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.147254943847656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.176162719726562,0,0,0,0,0,0,0,0,0,0,0,0,-0.502151489257812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.167221069335938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.362968444824219,0,0,0.323066711425781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.7674560546875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245857238769531,0,0,0,0,0,0,0,0,0,0,0,0,0,0.181312561035156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.453826904296875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0922698974609375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0301589965820312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0410919189453125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0612716674804688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.225357055664062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.324089050292969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.18804931640625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.777923583984375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2772216796875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139518737792969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.405433654785156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0934295654296875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.224441528320312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.439697265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.664955139160156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.157745361328125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.209449768066406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.17596435546875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00699615478515625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.19097137451172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0500411987304688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0904998779296875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.396614074707031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.272361755371094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.266128540039062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.199256896972656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.134254455566406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.138153076171875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.120620727539062,0,0,0,0,0,0,0,0,0,0,0,0.261405944824219,0,0,0,0,0,0,0,0.205650329589844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.170722961425781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.207839965820312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.151290893554688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.13433837890625,0,0,0,0,0,0,0,0,0,0,0,0,-2.55657958984375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.160743713378906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.291259765625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.534156799316406,0,0,0,0,0,0,0,0,0,0,0,0,0.195770263671875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.171470642089844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.189056396484375,0,0,0,0,0,0,0,0,0,0,0,0,0.150146484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.38702392578125,0,0,0,0.396240234375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.235916137695312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.60482788085938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0824050903320312,0,0,0,0,0,0,0,0,0,0,0,0,0.04541015625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0953292846679688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.113395690917969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0712509155273438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.153793334960938,0,0,0,0,0,0,0,0,0,0,0,0,0.416961669921875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.255088806152344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.225990295410156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.200393676757812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.183708190917969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.121589660644531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.327468872070312,0,0,0,0.377296447753906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.41066741943359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.193023681640625,0,0,0,0,0,0,0,0,0,0.155364990234375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.166160583496094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.492019653320312,0,0,0,0.328361511230469,0,0,0,0,0,0,0,0,0,0,0.334381103515625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.175369262695312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.166160583496094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.302749633789062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.17619323730469,0,0,0,0,0,0,0,0,0,0,0,0.281890869140625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.200958251953125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245452880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.104011535644531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.25152587890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.41339111328125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0907135009765625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0956649780273438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.135139465332031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.154853820800781,0,0,0,0,0,0,0,0,0,0,0,0,0,0.145149230957031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139312744140625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.120277404785156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.11154937744141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.362380981445312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.270896911621094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.246749877929688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245452880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0966949462890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.424156188964844,0,0,0,0.34027099609375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139488220214844,0,0,0,0,0,0,0,0,0,0,0,0,0.164863586425781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.14599609375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.147010803222656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.540031433105469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.302680969238281,0,0,0,0,0,0,0,0,0,0,0,0.366958618164062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245452880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.104011535644531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.254188537597656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.377517700195312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.270866394042969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3.09535980224609,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.184989929199219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172836303710938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0966796875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.451728820800781,0,0,0.393173217773438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.214630126953125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.159866333007812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.180198669433594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0937652587890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.489372253417969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.224845886230469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.18389892578125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.191390991210938,0,0,0,0,0,0,0,0,0,0,0,0,0.152130126953125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.317001342773438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.522773742675781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.239524841308594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.07763671875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0582122802734375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0672149658203125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0723953247070312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.111328125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0857925415039062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.203300476074219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.06092834472656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.289581298828125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.229942321777344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.196556091308594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1728515625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.103965759277344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.398399353027344,0,0,0,0.379386901855469,0,0,0,0,0,0,0,0,0,0,0,0,0,0.301689147949219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.206932067871094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.20927429199219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.103340148925781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.472702026367188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.385894775390625,0,0,0,0,0,0,0,0,0,0,0,0.288230895996094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245452880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0967254638671875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.467582702636719,0,0,0,0,0,0,0,0,0,0,0,0,0.312751770019531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.241477966308594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.42320251464844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1778564453125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.138847351074219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.188796997070312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.282974243164062,0,0,0,0,0,0,0.126556396484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.124412536621094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.138313293457031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1556396484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.162895202636719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.139610290527344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.13604736328125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.102333068847656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.305419921875,0,0,0,0,0,0,0,0.342750549316406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.234375,0,0,0,0,0,0,0,0,0,0,0.21337890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245452880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0967254638671875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.489334106445312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.290687561035156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.275871276855469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.173629760742188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.170089721679688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.103981018066406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.173881530761719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.86750030517578,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.374702453613281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.221305847167969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.175178527832031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.147010803222656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.119911193847656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.410041809082031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.433204650878906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.222541809082031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.226318359375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.176071166992188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.118965148925781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.460861206054688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.306785583496094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.327194213867188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.173347473144531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.166160583496094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.160285949707031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.419715881347656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.08242797851562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.254325866699219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245452880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.104011535644531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.32366943359375,0,0,0,0,0,0,0,0.437408447265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.268142700195312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0891952514648438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.028411865234375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0726776123046875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0970306396484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.105934143066406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0920867919921875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.9119873046875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.321990966796875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.199554443359375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.250114440917969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2418212890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.176055908203125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.118980407714844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.267448425292969,0,0,0,0,0,0,0,0.462432861328125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.235618591308594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.21082305908203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.198448181152344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.150138854980469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.142539978027344,0,0,0,0,0,0,0,0,0,0,0,0.420677185058594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.460403442382812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.25872802734375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.176101684570312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.118949890136719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.235504150390625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.23681640625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.17422485351562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.273963928222656,0,0,0,0,0,0,0,0,0,0,0,0,0.214202880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.151481628417969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.154289245605469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0436935424804688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0285568237304688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.208877563476562,0,0,0,0,0,0,0.333297729492188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.210731506347656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.274467468261719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.169036865234375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.90296936035156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.13385009765625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.120262145996094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.394851684570312,0,0,0,0.30975341796875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.261405944824219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.203773498535156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.176101684570312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.118949890136719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.253211975097656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.365966796875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.07398986816406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.242149353027344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.218238830566406,0,0,0,0,0,0,0,0,0,0.121009826660156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.431617736816406,0,0,0,0.300376892089844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.232177734375,0,0,0,0,0,0,0,0,0,0,0,0,0.195602416992188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.163261413574219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.79515838623047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.114242553710938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.458908081054688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.28106689453125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.299781799316406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.225486755371094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146949768066406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.119956970214844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.314308166503906,0,0,0,0.320426940917969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.10718536376953,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.203445434570312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172813415527344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146995544433594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.359138488769531,0,0,0,0,0,0,0,0,0,0.451210021972656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.219718933105469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.179618835449219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.145072937011719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.72627258300781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0857925415039062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0540771484375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.06182861328125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.191246032714844,0,0,0,0,0,0,0,0,0.369697570800781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.21923828125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.206275939941406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.191360473632812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.150733947753906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.119926452636719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.285614013671875,0,0,0,0,0,0,0.323097229003906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.14383697509766,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.203231811523438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.207588195800781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.176071166992188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.118980407714844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.458900451660156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.289535522460938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.380126953125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.66802215576172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.13934326171875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.127532958984375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.398513793945312,0,0,0,0,0.297035217285156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2462158203125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.220718383789062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.176071166992188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.100746154785156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.275001525878906,0,0,0,0,0,0.358444213867188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.00379943847656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.222274780273438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0678482055664062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0420989990234375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0735092163085938,0,0,0,0,0,0,0,0,0,0,0.130424499511719,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.060302734375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0974197387695312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.366729736328125,0,0,0,0,0.537925720214844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.61351013183594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.136878967285156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146934509277344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.119972229003906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.408271789550781,0,0,0,0,0,0,0,0,0,0,0.312202453613281,0,0,0,0,0,0,0,0,0,0,0,0,0.24017333984375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.155502319335938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.219078063964844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.096710205078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.252822875976562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.089813232421875,0,0,0,0,0,0,0,-4.09214019775391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.114532470703125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.209548950195312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.28741455078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.154388427734375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146949768066406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.5382080078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.267570495605469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.228431701660156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.193862915039062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.10324096679688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.146934509277344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.119941711425781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.402542114257812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.249092102050781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.43817138671875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245452880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09674072265625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.369346618652344,0,0,0,0,0.391227722167969,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.30599212646484,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.272796630859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245452880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0966949462890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.228614807128906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.33050537109375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0777740478515625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0924835205078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0937576293945312,0,0,0,0,0,0,0,0,0,0,0,0,0,0.242523193359375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.161163330078125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.172775268554688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1.84973907470703,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.305709838867188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.417518615722656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.207649230957031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.245452880859375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0966949462890625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.477020263671875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.343986511230469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.202392578125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.14504241943359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.142341613769531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.144203186035156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.119941711425781,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.403274536132812,0,0,0,0,0,0,0,0,0,0,0,0,0.535316467285156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.223892211914062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.176055908203125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09051513671875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.462188720703125,0,0,0.00217437744140625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"filename":[null,null,null,"ggplot2/R/coord-cartesian-.r",null,"ggplot2/R/position-.r","ggplot2/R/coord-cartesian-.r","ggplot2/R/ggproto.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/margins.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/guides-.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/coord-.r",null,"ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","grid/R/viewport.R","grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R",null,null,"ggplot2/R/guides-axis.r","ggplot2/R/grob-absolute.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/utilities-grid.r","ggplot2/R/theme-elements.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/guides-axis.r","ggplot2/R/grob-absolute.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/geom-point.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/ggproto.r","ggplot2/R/scale-continuous.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R",null,null,"ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/unit.R","grid/R/unit.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/geom-point.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/unit.R","ggplot2/R/margins.R","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R",null,"ggplot2/R/layout.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R",null,null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/grob-absolute.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,"ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/compat-plyr.R","ggplot2/R/theme.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/guides-grid.r","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/guides-grid.r","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","ggplot2/R/guides-axis.r","ggplot2/R/guides-axis.r","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R",null,null,"ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R",null,"ggplot2/R/layout.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/ggproto.r","ggplot2/R/geom-.r","ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","grid/R/grob.R","grid/R/grob.R","ggplot2/R/utilities-grid.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grid.R","grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/grob-absolute.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","grid/R/grob.R","grid/R/grob.R","ggplot2/R/utilities-grid.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/just.R","grid/R/just.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/layout.R","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","ggplot2/R/utilities-grid.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/guides-axis.r","ggplot2/R/guides-axis.r","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,"ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R",null,null,"ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,null,null,null,null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/unit.R","ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/geom-point.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/coord-cartesian-.r",null,"ggplot2/R/position-.r","ggplot2/R/coord-cartesian-.r","ggplot2/R/ggproto.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/margins.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/utilities.r","ggplot2/R/utilities.r","ggplot2/R/utilities.r","ggplot2/R/utilities.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","grid/R/unit.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R",null,"ggplot2/R/layout.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"grid/R/grob.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","ggplot2/R/utilities-grid.r","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme-elements.r","grid/R/grob.R","grid/R/grob.R","ggplot2/R/utilities-grid.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/geom-point.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/margins.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme-elements.r","grid/R/grob.R","grid/R/grob.R","ggplot2/R/utilities-grid.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/unit.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/viewport.R","grid/R/viewport.R",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R",null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/gpar.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/gpar.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/gpar.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/gpar.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/gpar.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/just.R","grid/R/just.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/plot-build.r",null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/layout.R","ggplot2/R/margins.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/geom-point.r","ggplot2/R/geom-point.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/performance.R","ggplot2/R/theme-elements.r","grid/R/primitives.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/guides-axis.r","ggplot2/R/guides-axis.r","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/just.R","grid/R/just.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/coord-cartesian-.r",null,"ggplot2/R/position-.r","ggplot2/R/coord-cartesian-.r","ggplot2/R/ggproto.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/facet-grid-.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/layout.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/coord-.r",null,"ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/utilities-grid.r","ggplot2/R/theme-elements.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/viewport.R","grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/utilities-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/theme-elements.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/guides-grid.r","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R",null,null,"ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/margins.R","ggplot2/R/margins.R",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"grid/R/grob.R",null,"ggplot2/R/layout.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","grid/R/unit.R",null,null,"ggplot2/R/guides-axis.r","ggplot2/R/grob-absolute.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/utilities.r","ggplot2/R/utilities.r","ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","grid/R/viewport.R","grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R",null,null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/viewport.R","grid/R/viewport.R",null,null,"grid/R/viewport.R","grid/R/viewport.R","grid/R/viewport.R","grid/R/grid.R","grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/plot-build.r",null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,null,null,null,null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/geom-point.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/aes.r","ggplot2/R/position-.r","ggplot2/R/coord-cartesian-.r","ggplot2/R/ggproto.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R",null,null,"ggplot2/R/guides-axis.r","grid/R/viewport.R","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R",null,"grid/R/unit.R","ggplot2/R/guides-axis.r","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/just.R","grid/R/just.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/geom-point.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/geom-point.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/geom-point.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/geom-point.r","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R",null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R",null,"ggplot2/R/layout.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/coord-cartesian-.r",null,"ggplot2/R/position-.r","ggplot2/R/coord-cartesian-.r","ggplot2/R/ggproto.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/guides-axis.r","ggplot2/R/guides-axis.r","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R",null,"grid/R/unit.R","grid/R/unit.R",null,null,"ggplot2/R/guides-axis.r","grid/R/viewport.R","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r",null,"ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/grob-absolute.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/viewport.R","grid/R/viewport.R","grid/R/viewport.R",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"grid/R/grob.R","ggplot2/R/guides-axis.r","grid/R/grob.R","ggplot2/R/grob-absolute.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","grid/R/unit.R",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/compat-plyr.R","ggplot2/R/theme.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","grid/R/unit.R",null,null,"ggplot2/R/guides-axis.r","ggplot2/R/grob-absolute.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/layout.R","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,"grid/R/grob.R","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/unit.R","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R",null,"ggplot2/R/layout.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","grid/R/grob.R","ggplot2/R/labeller.r","ggplot2/R/utilities-grid.r","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/geom-point.r","ggplot2/R/utilities-grid.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/gpar.R","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/margins.R","ggplot2/R/labeller.r",null,"ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r",null,null,"ggplot2/R/utilities.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","grid/R/gpar.R","grid/R/gpar.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/position-.r","ggplot2/R/coord-cartesian-.r","ggplot2/R/ggproto.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/primitives.R","grid/R/primitives.R","grid/R/primitives.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/primitives.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-grid.r","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,"grid/R/grob.R",null,"ggplot2/R/layout.R","grid/R/grob.R","ggplot2/R/layout.R","ggplot2/R/utilities-grid.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R",null,null,"ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"grid/R/viewport.R","grid/R/viewport.R",null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/ggproto.r","ggplot2/R/geom-point.r","ggplot2/R/ggproto.r",null,"ggplot2/R/geom-.r",null,"ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/theme.r",null,"ggplot2/R/theme.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,"ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","ggplot2/R/guides-grid.r","ggplot2/R/utilities-grid.r","ggplot2/R/guides-grid.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R",null,"ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,"grid/R/viewport.R","grid/R/viewport.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/margins.R","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/theme-elements.r","ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/utilities.r","ggplot2/R/utilities.r","ggplot2/R/geom-.r","ggplot2/R/geom-.r","ggplot2/R/ggproto.r","ggplot2/R/layer.r","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r",null,null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,"ggplot2/R/guides-axis.r","ggplot2/R/coord-.r","ggplot2/R/coord-.r","ggplot2/R/ggproto.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/labeller.r","ggplot2/R/labeller.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"grid/R/grid.R","grid/R/primitives.R","grid/R/size.R","grid/R/size.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R","grid/R/grid.R",null,"grid/R/grid.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grob.R","grid/R/grid.R","grid/R/unit.R","grid/R/unit.R","ggplot2/R/utilities-grid.r",null,"ggplot2/R/facet-.r","ggplot2/R/facet-.r","ggplot2/R/facet-grid-.r","ggplot2/R/facet-grid-.r","ggplot2/R/ggproto.r","ggplot2/R/layout.R","ggplot2/R/ggproto.r","ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,"ggplot2/R/plot-build.r","ggplot2/R/plot-build.r",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"interval":10,"files":[{"filename":"ggplot2/R/coord-cartesian-.r","content":"#' Cartesian coordinates\n#'\n#' The Cartesian coordinate system is the most familiar, and common, type of\n#' coordinate system. Setting limits on the coordinate system will zoom the\n#' plot (like you're looking at it with a magnifying glass), and will not\n#' change the underlying data like setting limits on a scale will.\n#'\n#' @param xlim,ylim Limits for the x and y axes.\n#' @param expand If `TRUE`, the default, adds a small expansion factor to\n#' the limits to ensure that data and axes don't overlap. If `FALSE`,\n#' limits are taken exactly from the data or `xlim`/`ylim`.\n#' @param default Is this the default coordinate system? If `FALSE` (the default),\n#' then replacing this coordinate system with another one creates a message alerting\n#' the user that the coordinate system is being replaced. If `TRUE`, that warning\n#' is suppressed.\n#' @param clip Should drawing be clipped to the extent of the plot panel? A\n#' setting of `\"on\"` (the default) means yes, and a setting of `\"off\"`\n#' means no. In most cases, the default of `\"on\"` should not be changed,\n#' as setting `clip = \"off\"` can cause unexpected results. It allows\n#' drawing of data points anywhere on the plot, including in the plot margins. If\n#' limits are set via `xlim` and `ylim` and some data points fall outside those\n#' limits, then those data points may show up in places such as the axes, the\n#' legend, the plot title, or the plot margins.\n#' @export\n#' @examples\n#' # There are two ways of zooming the plot display: with scales or\n#' # with coordinate systems. They work in two rather different ways.\n#'\n#' p <- ggplot(mtcars, aes(disp, wt)) +\n#' geom_point() +\n#' geom_smooth()\n#' p\n#'\n#' # Setting the limits on a scale converts all values outside the range to NA.\n#' p + scale_x_continuous(limits = c(325, 500))\n#'\n#' # Setting the limits on the coordinate system performs a visual zoom.\n#' # The data is unchanged, and we just view a small portion of the original\n#' # plot. Note how smooth continues past the points visible on this plot.\n#' p + coord_cartesian(xlim = c(325, 500))\n#'\n#' # By default, the same expansion factor is applied as when setting scale\n#' # limits. You can set the limits precisely by setting expand = FALSE\n#' p + coord_cartesian(xlim = c(325, 500), expand = FALSE)\n#'\n#' # Simiarly, we can use expand = FALSE to turn off expansion with the\n#' # default limits\n#' p + coord_cartesian(expand = FALSE)\n#'\n#' # You can see the same thing with this 2d histogram\n#' d <- ggplot(diamonds, aes(carat, price)) +\n#' stat_bin2d(bins = 25, colour = \"white\")\n#' d\n#'\n#' # When zooming the scale, the we get 25 new bins that are the same\n#' # size on the plot, but represent smaller regions of the data space\n#' d + scale_x_continuous(limits = c(0, 1))\n#'\n#' # When zooming the coordinate system, we see a subset of original 50 bins,\n#' # displayed bigger\n#' d + coord_cartesian(xlim = c(0, 1))\ncoord_cartesian <- function(xlim = NULL, ylim = NULL, expand = TRUE,\n default = FALSE, clip = \"on\") {\n ggproto(NULL, CoordCartesian,\n limits = list(x = xlim, y = ylim),\n expand = expand,\n default = default,\n clip = clip\n )\n}\n\n#' @rdname ggplot2-ggproto\n#' @format NULL\n#' @usage NULL\n#' @export\nCoordCartesian <- ggproto(\"CoordCartesian\", Coord,\n\n is_linear = function() TRUE,\n is_free = function() TRUE,\n\n distance = function(x, y, panel_params) {\n max_dist <- dist_euclidean(panel_params$x.range, panel_params$y.range)\n dist_euclidean(x, y) / max_dist\n },\n\n range = function(panel_params) {\n list(x = panel_params$x.range, y = panel_params$y.range)\n },\n\n backtransform_range = function(self, panel_params) {\n self$range(panel_params)\n },\n\n transform = function(data, panel_params) {\n rescale_x <- function(data) rescale(data, from = panel_params$x.range)\n rescale_y <- function(data) rescale(data, from = panel_params$y.range)\n\n data <- transform_position(data, rescale_x, rescale_y)\n transform_position(data, squish_infinite, squish_infinite)\n },\n\n setup_panel_params = function(self, scale_x, scale_y, params = list()) {\n train_cartesian <- function(scale, limits, name) {\n range <- scale_range(scale, limits, self$expand)\n\n out <- scale$break_info(range)\n out$arrange <- scale$axis_order()\n names(out) <- paste(name, names(out), sep = \".\")\n out\n }\n\n c(\n train_cartesian(scale_x, self$limits$x, \"x\"),\n train_cartesian(scale_y, self$limits$y, \"y\")\n )\n }\n)\n\nscale_range <- function(scale, limits = NULL, expand = TRUE) {\n expansion <- if (expand) expand_default(scale) else c(0, 0)\n\n if (is.null(limits)) {\n scale$dimension(expansion)\n } else {\n range <- range(scale$transform(limits))\n expand_range(range, expansion[1], expansion[2])\n }\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/coord-cartesian-.r"},{"filename":"ggplot2/R/position-.r","content":"#' @section Positions:\n#'\n#' All `position_*` functions (like `position_dodge`) return a\n#' `Position*` object (like `PositionDodge`). The `Position*`\n#' object is responsible for adjusting the position of overlapping geoms.\n#'\n#' The way that the `position_*` functions work is slightly different from\n#' the `geom_*` and `stat_*` functions, because a `position_*`\n#' function actually \"instantiates\" the `Position*` object by creating a\n#' descendant, and returns that.\n#'\n#' Each of the `Position*` objects is a [ggproto()] object,\n#' descended from the top-level `Position`, and each implements the\n#' following methods:\n#'\n#' - `compute_layer(self, data, params, panel)` is called once\n#' per layer. `panel` is currently an internal data structure, so\n#' this method should not be overridden.\n#'\n#' - `compute_panel(self, data, params, panel)` is called once per\n#' panel and should return a modified data frame.\n#'\n#' `data` is a data frame containing the variables named according\n#' to the aesthetics that they're mapped to. `scales` is a list\n#' containing the `x` and `y` scales. There functions are called\n#' before the facets are trained, so they are global scales, not local\n#' to the individual panels. `params` contains the parameters returned by\n#' `setup_params()`.\n#' - `setup_params(data, params)`: called once for each layer.\n#' Used to setup defaults that need to complete dataset, and to inform\n#' the user of important choices. Should return list of parameters.\n#' - `setup_data(data, params)`: called once for each layer,\n#' after `setup_params()`. Should return modified `data`.\n#' Default checks that required aesthetics are present.\n#'\n#' And the following fields\n#' - `required_aes`: a character vector giving the aesthetics\n#' that must be present for this position adjustment to work.\n#'\n#' @rdname ggplot2-ggproto\n#' @format NULL\n#' @usage NULL\n#' @export\nPosition <- ggproto(\"Position\",\n required_aes = character(),\n\n setup_params = function(self, data) {\n list()\n },\n\n setup_data = function(self, data, params) {\n check_required_aesthetics(self$required_aes, names(data), snake_class(self))\n data\n },\n\n compute_layer = function(self, data, params, layout) {\n dapply(data, \"PANEL\", function(data) {\n if (empty(data)) return(new_data_frame())\n\n scales <- layout$get_scales(data$PANEL[1])\n self$compute_panel(data = data, params = params, scales = scales)\n })\n },\n\n compute_panel = function(self, data, params, scales) {\n stop(\"Not implemented\", call. = FALSE)\n }\n)\n\n#' Convenience function to transform all position variables.\n#'\n#' @param trans_x,trans_y Transformation functions for x and y aesthetics.\n#' (will transform x, xmin, xmax, xend etc)\n#' @param ... Additional arguments passed to `trans_x` and `trans_y`.\n#' @keywords internal\n#' @export\ntransform_position <- function(df, trans_x = NULL, trans_y = NULL, ...) {\n # Treat df as list during transformation for faster set/get\n oldclass <- class(df)\n df <- unclass(df)\n scales <- aes_to_scale(names(df))\n\n if (!is.null(trans_x)) {\n df[scales == \"x\"] <- lapply(df[scales == \"x\"], trans_x, ...)\n }\n if (!is.null(trans_y)) {\n df[scales == \"y\"] <- lapply(df[scales == \"y\"], trans_y, ...)\n }\n\n class(df) <- oldclass\n\n df\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/position-.r"},{"filename":"ggplot2/R/ggproto.r","content":"#' Create a new ggproto object\n#'\n#' Construct a new object with `ggproto`, test with `is.proto`,\n#' and access parent methods/fields with `ggproto_parent`.\n#'\n#' ggproto implements a protype based OO system which blurs the lines between\n#' classes and instances. It is inspired by the proto package, but it has some\n#' important differences. Notably, it cleanly supports cross-package\n#' inheritance, and has faster performance.\n#'\n#' In most cases, creating a new OO system to be used by a single package is\n#' not a good idea. However, it was the least-bad solution for ggplot2 because\n#' it required the fewest changes to an already complex code base.\n#'\n#' @section Calling methods:\n#' ggproto methods can take an optional `self` argument: if it is present,\n#' it is a regular method; if it's absent, it's a \"static\" method (i.e. it\n#' doesn't use any fields).\n#'\n#' Imagine you have a ggproto object `Adder`, which has a\n#' method `addx = function(self, n) n + self$x`. Then, to call this\n#' function, you would use `Adder$addx(10)` -- the `self` is passed\n#' in automatically by the wrapper function. `self` be located anywhere\n#' in the function signature, although customarily it comes first.\n#'\n#' @section Calling methods in a parent:\n#' To explicitly call a methods in a parent, use\n#' `ggproto_parent(Parent, self)`.\n#'\n#' @param _class Class name to assign to the object. This is stored as the class\n#' attribute of the object. This is optional: if `NULL` (the default),\n#' no class name will be added to the object.\n#' @param _inherit ggproto object to inherit from. If `NULL`, don't\n#' inherit from any object.\n#' @param ... A list of members in the ggproto object.\n#' @export\n#' @examples\n#' Adder <- ggproto(\"Adder\",\n#' x = 0,\n#' add = function(self, n) {\n#' self$x <- self$x + n\n#' self$x\n#' }\n#' )\n#' is.ggproto(Adder)\n#'\n#' Adder$add(10)\n#' Adder$add(10)\n#'\n#' Doubler <- ggproto(\"Doubler\", Adder,\n#' add = function(self, n) {\n#' ggproto_parent(Adder, self)$add(n * 2)\n#' }\n#' )\n#' Doubler$x\n#' Doubler$add(10)\nggproto <- function(`_class` = NULL, `_inherit` = NULL, ...) {\n e <- new.env(parent = emptyenv())\n\n members <- list(...)\n if (length(members) != sum(nzchar(names(members)))) {\n stop(\"All members of a ggproto object must be named.\")\n }\n\n # R <3.1.2 will error when list2env() is given an empty list, so we need to\n # check length. https://github.com/tidyverse/ggplot2/issues/1444\n if (length(members) > 0) {\n list2env(members, envir = e)\n }\n\n # Dynamically capture parent: this is necessary in order to avoid\n # capturing the parent at package build time.\n `_inherit` <- substitute(`_inherit`)\n env <- parent.frame()\n find_super <- function() {\n eval(`_inherit`, env, NULL)\n }\n\n super <- find_super()\n if (!is.null(super)) {\n if (!is.ggproto(super)) {\n stop(\"`_inherit` must be a ggproto object.\")\n }\n e$super <- find_super\n class(e) <- c(`_class`, class(super))\n } else {\n class(e) <- c(`_class`, \"ggproto\", \"gg\")\n }\n\n e\n}\n\n\n#' @export\n#' @rdname ggproto\n#' @param parent,self Access parent class `parent` of object `self`.\nggproto_parent <- function(parent, self) {\n structure(list(parent = parent, self = self), class = \"ggproto_parent\")\n}\n\n#' @param x An object to test.\n#' @export\n#' @rdname ggproto\nis.ggproto <- function(x) inherits(x, \"ggproto\")\n\nfetch_ggproto <- function(x, name) {\n res <- NULL\n\n val <- .subset2(x, name)\n # The is.null check is an optimization for a common case; exists() also\n # catches the case where the value exists but has a NULL value.\n if (!is.null(val) || exists(name, envir = x, inherits = FALSE)) {\n res <- val\n } else {\n # If not found here, recurse into super environments\n super <- .subset2(x, \"super\")\n if (is.null(super)) {\n # no super class\n } else if (is.function(super)) {\n res <- fetch_ggproto(super(), name)\n } else {\n stop(\n class(x)[[1]], \" was built with an incompatible version of ggproto.\\n\",\n \"Please reinstall the package that provides this extension.\",\n call. = FALSE\n )\n }\n }\n\n res\n}\n\n#' @importFrom utils .DollarNames\n#' @export\n.DollarNames.ggproto <- function(x, pattern = \"\") {\n methods <- ls(envir = x)\n if (\"super\" %in% methods) {\n methods <- setdiff(methods, \"super\")\n methods <- union(methods, Recall(x$super()))\n }\n\n if (identical(pattern, \"\")) {\n methods\n } else {\n grep(pattern, methods, value = TRUE)\n }\n\n}\n\n#' @export\n`$.ggproto` <- function(x, name) {\n res <- fetch_ggproto(x, name)\n if (!is.function(res)) {\n return(res)\n }\n\n make_proto_method(x, res)\n}\n\n#' @export\n`$.ggproto_parent` <- function(x, name) {\n res <- fetch_ggproto(.subset2(x, \"parent\"), name)\n if (!is.function(res)) {\n return(res)\n }\n\n make_proto_method(.subset2(x, \"self\"), res)\n}\n\nmake_proto_method <- function(self, f) {\n args <- formals(f)\n # is.null is a fast path for a common case; the %in% check is slower but also\n # catches the case where there's a `self = NULL` argument.\n has_self <- !is.null(args[[\"self\"]]) || \"self\" %in% names(args)\n\n if (has_self) {\n fun <- function(...) f(..., self = self)\n } else {\n fun <- function(...) f(...)\n }\n\n class(fun) <- \"ggproto_method\"\n fun\n}\n\n#' @export\n`[[.ggproto` <- `$.ggproto`\n\n#' Convert a ggproto object to a list\n#'\n#' This will not include the object's `super` member.\n#'\n#' @param x A ggproto object to convert to a list.\n#' @param inherit If `TRUE` (the default), flatten all inherited items into\n#' the returned list. If `FALSE`, do not include any inherited items.\n#' @inheritDotParams base::as.list.environment -x\n#' @export\n#' @keywords internal\nas.list.ggproto <- function(x, inherit = TRUE, ...) {\n res <- list()\n\n if (inherit) {\n if (is.function(x$super)) {\n res <- as.list(x$super())\n }\n }\n\n current <- as.list.environment(x, ...)\n res[names(current)] <- current\n res$super <- NULL\n res\n}\n\n\n#' Format or print a ggproto object\n#'\n#' If a ggproto object has a `$print` method, this will call that method.\n#' Otherwise, it will print out the members of the object, and optionally, the\n#' members of the inherited objects.\n#'\n#' @param x A ggproto object to print.\n#' @param flat If `TRUE` (the default), show a flattened list of all local\n#' and inherited members. If `FALSE`, show the inheritance hierarchy.\n#' @param ... If the ggproto object has a `print` method, further arguments\n#' will be passed to it. Otherwise, these arguments are unused.\n#'\n#' @export\n#' @examples\n#' Dog <- ggproto(\n#' print = function(self, n) {\n#' cat(\"Woof!\\n\")\n#' }\n#' )\n#' Dog\n#' cat(format(Dog), \"\\n\")\nprint.ggproto <- function(x, ..., flat = TRUE) {\n if (is.function(x$print)) {\n x$print(...)\n\n } else {\n cat(format(x, flat = flat), \"\\n\", sep = \"\")\n invisible(x)\n }\n}\n\n\n#' @export\n#' @rdname print.ggproto\nformat.ggproto <- function(x, ..., flat = TRUE) {\n classes_str <- function(obj) {\n classes <- setdiff(class(obj), \"ggproto\")\n if (length(classes) == 0)\n return(\"\")\n paste0(\": Class \", paste(classes, collapse = ', '))\n }\n\n # Get a flat list if requested\n if (flat) {\n objs <- as.list(x, inherit = TRUE)\n } else {\n objs <- x\n }\n\n str <- paste0(\n \"<ggproto object\", classes_str(x), \">\\n\",\n indent(object_summaries(objs, flat = flat), 4)\n )\n\n if (flat && is.function(x$super)) {\n str <- paste0(\n str, \"\\n\",\n indent(\n paste0(\"super: \", \" <ggproto object\", classes_str(x$super()), \">\"),\n 4\n )\n )\n }\n\n str\n}\n\n# Return a summary string of the items of a list or environment\n# x must be a list or environment\nobject_summaries <- function(x, exclude = NULL, flat = TRUE) {\n if (length(x) == 0)\n return(NULL)\n\n if (is.list(x))\n obj_names <- sort(names(x))\n else if (is.environment(x))\n obj_names <- ls(x, all.names = TRUE)\n\n obj_names <- setdiff(obj_names, exclude)\n\n values <- vapply(obj_names, function(name) {\n obj <- x[[name]]\n if (is.function(obj)) \"function\"\n else if (is.ggproto(obj)) format(obj, flat = flat)\n else if (is.environment(obj)) \"environment\"\n else if (is.null(obj)) \"NULL\"\n else if (is.atomic(obj)) trim(paste(as.character(obj), collapse = \" \"))\n else paste(class(obj), collapse = \", \")\n }, FUN.VALUE = character(1))\n\n paste0(obj_names, \": \", values, sep = \"\", collapse = \"\\n\")\n}\n\n# Given a string, indent every line by some number of spaces.\n# The exception is to not add spaces after a trailing \\n.\nindent <- function(str, indent = 0) {\n gsub(\"(\\\\n|^)(?!$)\",\n paste0(\"\\\\1\", paste(rep(\" \", indent), collapse = \"\")),\n str,\n perl = TRUE\n )\n}\n\n# Trim a string to n characters; if it's longer than n, add \" ...\" to the end\ntrim <- function(str, n = 60) {\n if (nchar(str) > n) paste(substr(str, 1, 56), \"...\")\n else str\n}\n\n#' @export\nprint.ggproto_method <- function(x, ...) {\n cat(format(x), sep = \"\")\n}\n\n#' @export\nformat.ggproto_method <- function(x, ...) {\n\n # Given a function, return a string from srcref if present. If not present,\n # paste the deparsed lines of code together.\n format_fun <- function(fn) {\n srcref <- attr(fn, \"srcref\", exact = TRUE)\n if (is.null(srcref))\n return(paste(format(fn), collapse = \"\\n\"))\n\n paste(as.character(srcref), collapse = \"\\n\")\n }\n\n x <- unclass(x)\n paste0(\n \"<ggproto method>\",\n \"\\n <Wrapper function>\\n \", format_fun(x),\n \"\\n\\n <Inner function (f)>\\n \", format_fun(environment(x)$f)\n )\n}\n\n# proto2 TODO: better way of getting formals for self$draw\nggproto_formals <- function(x) formals(environment(x)$f)","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/ggproto.r"},{"filename":"ggplot2/R/geom-point.r","content":"#' Points\n#'\n#' The point geom is used to create scatterplots. The scatterplot is most\n#' useful for displaying the relationship between two continuous variables.\n#' It can be used to compare one continuous and one categorical variable, or\n#' two categorical variables, but a variation like [geom_jitter()],\n#' [geom_count()], or [geom_bin2d()] is usually more\n#' appropriate. A _bubblechart_ is a scatterplot with a third variable\n#' mapped to the size of points.\n#'\n#' @section Overplotting:\n#' The biggest potential problem with a scatterplot is overplotting: whenever\n#' you have more than a few points, points may be plotted on top of one\n#' another. This can severely distort the visual appearance of the plot.\n#' There is no one solution to this problem, but there are some techniques\n#' that can help. You can add additional information with\n#' [geom_smooth()], [geom_quantile()] or\n#' [geom_density_2d()]. If you have few unique `x` values,\n#' [geom_boxplot()] may also be useful.\n#'\n#' Alternatively, you can\n#' summarise the number of points at each location and display that in some\n#' way, using [geom_count()], [geom_hex()], or\n#' [geom_density2d()].\n#'\n#' Another technique is to make the points transparent (e.g.\n#' `geom_point(alpha = 0.05)`) or very small (e.g.\n#' `geom_point(shape = \".\")`).\n#'\n#' @eval rd_aesthetics(\"geom\", \"point\")\n#' @inheritParams layer\n#' @param na.rm If `FALSE`, the default, missing values are removed with\n#' a warning. If `TRUE`, missing values are silently removed.\n#' @param ... Other arguments passed on to [layer()]. These are\n#' often aesthetics, used to set an aesthetic to a fixed value, like\n#' `colour = \"red\"` or `size = 3`. They may also be parameters\n#' to the paired geom/stat.\n#' @inheritParams layer\n#' @export\n#' @examples\n#' p <- ggplot(mtcars, aes(wt, mpg))\n#' p + geom_point()\n#'\n#' # Add aesthetic mappings\n#' p + geom_point(aes(colour = factor(cyl)))\n#' p + geom_point(aes(shape = factor(cyl)))\n#' # A \"bubblechart\":\n#' p + geom_point(aes(size = qsec))\n#'\n#' # Set aesthetics to fixed value\n#' ggplot(mtcars, aes(wt, mpg)) + geom_point(colour = \"red\", size = 3)\n#'\n#' \\donttest{\n#' # Varying alpha is useful for large datasets\n#' d <- ggplot(diamonds, aes(carat, price))\n#' d + geom_point(alpha = 1/10)\n#' d + geom_point(alpha = 1/20)\n#' d + geom_point(alpha = 1/100)\n#' }\n#'\n#' # For shapes that have a border (like 21), you can colour the inside and\n#' # outside separately. Use the stroke aesthetic to modify the width of the\n#' # border\n#' ggplot(mtcars, aes(wt, mpg)) +\n#' geom_point(shape = 21, colour = \"black\", fill = \"white\", size = 5, stroke = 5)\n#'\n#' \\donttest{\n#' # You can create interesting shapes by layering multiple points of\n#' # different sizes\n#' p <- ggplot(mtcars, aes(mpg, wt, shape = factor(cyl)))\n#' p + geom_point(aes(colour = factor(cyl)), size = 4) +\n#' geom_point(colour = \"grey90\", size = 1.5)\n#' p + geom_point(colour = \"black\", size = 4.5) +\n#' geom_point(colour = \"pink\", size = 4) +\n#' geom_point(aes(shape = factor(cyl)))\n#'\n#' # geom_point warns when missing values have been dropped from the data set\n#' # and not plotted, you can turn this off by setting na.rm = TRUE\n#' mtcars2 <- transform(mtcars, mpg = ifelse(runif(32) < 0.2, NA, mpg))\n#' ggplot(mtcars2, aes(wt, mpg)) + geom_point()\n#' ggplot(mtcars2, aes(wt, mpg)) + geom_point(na.rm = TRUE)\n#' }\ngeom_point <- function(mapping = NULL, data = NULL,\n stat = \"identity\", position = \"identity\",\n ...,\n na.rm = FALSE,\n show.legend = NA,\n inherit.aes = TRUE) {\n layer(\n data = data,\n mapping = mapping,\n stat = stat,\n geom = GeomPoint,\n position = position,\n show.legend = show.legend,\n inherit.aes = inherit.aes,\n params = list(\n na.rm = na.rm,\n ...\n )\n )\n}\n\n#' @rdname ggplot2-ggproto\n#' @format NULL\n#' @usage NULL\n#' @export\nGeomPoint <- ggproto(\"GeomPoint\", Geom,\n required_aes = c(\"x\", \"y\"),\n non_missing_aes = c(\"size\", \"shape\", \"colour\"),\n default_aes = aes(\n shape = 19, colour = \"black\", size = 1.5, fill = NA,\n alpha = NA, stroke = 0.5\n ),\n\n draw_panel = function(data, panel_params, coord, na.rm = FALSE) {\n if (is.character(data$shape)) {\n data$shape <- translate_shape_string(data$shape)\n }\n\n coords <- coord$transform(data, panel_params)\n ggname(\"geom_point\",\n pointsGrob(\n coords$x, coords$y,\n pch = coords$shape,\n gp = gpar(\n col = alpha(coords$colour, coords$alpha),\n fill = alpha(coords$fill, coords$alpha),\n # Stroke is added around the outside of the point\n fontsize = coords$size * .pt + coords$stroke * .stroke / 2,\n lwd = coords$stroke * .stroke / 2\n )\n )\n )\n },\n\n draw_key = draw_key_point\n)\n\ntranslate_shape_string <- function(shape_string) {\n # strings of length 0 or 1 are interpreted as symbols by grid\n if (nchar(shape_string[1]) <= 1) {\n return(shape_string)\n }\n\n pch_table <- c(\n \"square open\" = 0,\n \"circle open\" = 1,\n \"triangle open\" = 2,\n \"plus\" = 3,\n \"cross\" = 4,\n \"diamond open\" = 5,\n \"triangle down open\" = 6,\n \"square cross\" = 7,\n \"asterisk\" = 8,\n \"diamond plus\" = 9,\n \"circle plus\" = 10,\n \"star\" = 11,\n \"square plus\" = 12,\n \"circle cross\" = 13,\n \"square triangle\" = 14,\n \"triangle square\" = 14,\n \"square\" = 15,\n \"circle small\" = 16,\n \"triangle\" = 17,\n \"diamond\" = 18,\n \"circle\" = 19,\n \"bullet\" = 20,\n \"circle filled\" = 21,\n \"square filled\" = 22,\n \"diamond filled\" = 23,\n \"triangle filled\" = 24,\n \"triangle down filled\" = 25\n )\n\n shape_match <- charmatch(shape_string, names(pch_table))\n\n invalid_strings <- is.na(shape_match)\n nonunique_strings <- shape_match == 0\n\n if (any(invalid_strings)) {\n bad_string <- unique(shape_string[invalid_strings])\n n_bad <- length(bad_string)\n\n collapsed_names <- sprintf(\"\\n* '%s'\", bad_string[1:min(5, n_bad)])\n\n more_problems <- if (n_bad > 5) {\n sprintf(\"\\n* ... and %d more problem%s\", n_bad - 5, ifelse(n_bad > 6, \"s\", \"\"))\n }\n\n stop(\n \"Can't find shape name:\",\n collapsed_names,\n more_problems,\n call. = FALSE\n )\n }\n\n if (any(nonunique_strings)) {\n bad_string <- unique(shape_string[nonunique_strings])\n n_bad <- length(bad_string)\n\n n_matches <- vapply(\n bad_string[1:min(5, n_bad)],\n function(shape_string) sum(grepl(paste0(\"^\", shape_string), names(pch_table))),\n integer(1)\n )\n\n collapsed_names <- sprintf(\n \"\\n* '%s' partially matches %d shape names\",\n bad_string[1:min(5, n_bad)], n_matches\n )\n\n more_problems <- if (n_bad > 5) {\n sprintf(\"\\n* ... and %d more problem%s\", n_bad - 5, ifelse(n_bad > 6, \"s\", \"\"))\n }\n\n stop(\n \"Shape names must be unambiguous:\",\n collapsed_names,\n more_problems,\n call. = FALSE\n )\n }\n\n unname(pch_table[shape_match])\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/geom-point.r"},{"filename":"ggplot2/R/geom-.r","content":"#' @include legend-draw.r\nNULL\n\n#' @section Geoms:\n#'\n#' All `geom_*` functions (like `geom_point`) return a layer that\n#' contains a `Geom*` object (like `GeomPoint`). The `Geom*`\n#' object is responsible for rendering the data in the plot.\n#'\n#' Each of the `Geom*` objects is a [ggproto()] object, descended\n#' from the top-level `Geom`, and each implements various methods and\n#' fields.\n#'\n#' Compared to `Stat` and `Position`, `Geom` is a little\n#' different because the execution of the setup and compute functions is\n#' split up. `setup_data` runs before position adjustments, and\n#' `draw_layer` is not run until render time, much later. This\n#' means there is no `setup_params` because it's hard to communicate\n#' the changes.\n#'\n#' To create a new type of Geom object, you typically will want to\n#' override one or more of the following:\n#'\n#' - Either `draw_panel(self, data, panel_params, coord)` or\n#' `draw_group(self, data, panel_params, coord)`. `draw_panel` is\n#' called once per panel, `draw_group` is called once per group.\n#'\n#' Use `draw_panel` if each row in the data represents a\n#' single element. Use `draw_group` if each group represents\n#' an element (e.g. a smooth, a violin).\n#'\n#' `data` is a data frame of scaled aesthetics.\n#'\n#' `panel_params` is a set of per-panel parameters for the\n#' `coord`. Generally, you should consider `panel_params`\n#' to be an opaque data structure that you pass along whenever you call\n#' a coord method.\n#'\n#' You must always call `coord$transform(data, panel_params)` to\n#' get the (position) scaled data for plotting. To work with\n#' non-linear coordinate systems, you typically need to convert into a\n#' primitive geom (e.g. point, path or polygon), and then pass on to the\n#' corresponding draw method for munching.\n#'\n#' Must return a grob. Use [zeroGrob()] if there's nothing to\n#' draw.\n#' - `draw_key`: Renders a single legend key.\n#' - `required_aes`: A character vector of aesthetics needed to\n#' render the geom.\n#' - `default_aes`: A list (generated by [aes()] of\n#' default values for aesthetics.\n#' - `setup_data`: Converts width and height to xmin and xmax,\n#' and ymin and ymax values. It can potentially set other values as well.\n#' @rdname ggplot2-ggproto\n#' @format NULL\n#' @usage NULL\n#' @export\nGeom <- ggproto(\"Geom\",\n required_aes = character(),\n non_missing_aes = character(),\n optional_aes = character(),\n\n default_aes = aes(),\n\n draw_key = draw_key_point,\n\n handle_na = function(self, data, params) {\n remove_missing(data, params$na.rm,\n c(self$required_aes, self$non_missing_aes),\n snake_class(self)\n )\n },\n\n draw_layer = function(self, data, params, layout, coord) {\n if (empty(data)) {\n n <- if (is.factor(data$PANEL)) nlevels(data$PANEL) else 1L\n return(rep(list(zeroGrob()), n))\n }\n\n # Trim off extra parameters\n params <- params[intersect(names(params), self$parameters())]\n\n args <- c(list(quote(data), quote(panel_params), quote(coord)), params)\n lapply(split(data, data$PANEL), function(data) {\n if (empty(data)) return(zeroGrob())\n\n panel_params <- layout$panel_params[[data$PANEL[1]]]\n do.call(self$draw_panel, args)\n })\n },\n\n draw_panel = function(self, data, panel_params, coord, ...) {\n groups <- split(data, factor(data$group))\n grobs <- lapply(groups, function(group) {\n self$draw_group(group, panel_params, coord, ...)\n })\n\n ggname(snake_class(self), gTree(\n children = do.call(\"gList\", grobs)\n ))\n },\n\n draw_group = function(self, data, panel_params, coord) {\n stop(\"Not implemented\")\n },\n\n setup_data = function(data, params) data,\n\n # Combine data with defaults and set aesthetics from parameters\n use_defaults = function(self, data, params = list()) {\n # Fill in missing aesthetics with their defaults\n missing_aes <- setdiff(names(self$default_aes), names(data))\n\n missing_eval <- lapply(self$default_aes[missing_aes], rlang::eval_tidy)\n # Needed for geoms with defaults set to NULL (e.g. GeomSf)\n missing_eval <- compact(missing_eval)\n\n if (empty(data)) {\n data <- as_gg_data_frame(missing_eval)\n } else {\n data[names(missing_eval)] <- missing_eval\n }\n\n # Override mappings with params\n aes_params <- intersect(self$aesthetics(), names(params))\n check_aesthetics(params[aes_params], nrow(data))\n data[aes_params] <- params[aes_params]\n data\n },\n\n # Most parameters for the geom are taken automatically from draw_panel() or\n # draw_groups(). However, some additional parameters may be needed\n # for setup_data() or handle_na(). These can not be imputed automatically,\n # so the slightly hacky \"extra_params\" field is used instead. By\n # default it contains `na.rm`\n extra_params = c(\"na.rm\"),\n\n parameters = function(self, extra = FALSE) {\n # Look first in draw_panel. If it contains ... then look in draw groups\n panel_args <- names(ggproto_formals(self$draw_panel))\n group_args <- names(ggproto_formals(self$draw_group))\n args <- if (\"...\" %in% panel_args) group_args else panel_args\n\n # Remove arguments of defaults\n args <- setdiff(args, names(ggproto_formals(Geom$draw_group)))\n\n if (extra) {\n args <- union(args, self$extra_params)\n }\n args\n },\n\n aesthetics = function(self) {\n c(union(self$required_aes, names(self$default_aes)), self$optional_aes, \"group\")\n }\n\n)\n\n\n#' Graphical units\n#'\n#' Multiply size in mm by these constants in order to convert to the units\n#' that grid uses internally for `lwd` and `fontsize`.\n#'\n#' @name graphical-units\n#' @keywords internal\n#' @aliases NULL\nNULL\n\n#' @export\n#' @rdname graphical-units\n.pt <- 72.27 / 25.4\n#' @export\n#' @rdname graphical-units\n.stroke <- 96 / 25.4\n\ncheck_aesthetics <- function(x, n) {\n ns <- vapply(x, length, numeric(1))\n good <- ns == 1L | ns == n\n\n if (all(good)) {\n return()\n }\n\n stop(\n \"Aesthetics must be either length 1 or the same as the data (\", n, \"): \",\n paste(names(which(!good)), collapse = \", \"),\n call. = FALSE\n )\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/geom-.r"},{"filename":"ggplot2/R/layer.r","content":"#' Create a new layer\n#'\n#' A layer is a combination of data, stat and geom with a potential position\n#' adjustment. Usually layers are created using `geom_*` or `stat_*`\n#' calls but it can also be created directly using this function.\n#'\n#' @export\n#' @inheritParams geom_point\n#' @param mapping Set of aesthetic mappings created by [aes()] or\n#' [aes_()]. If specified and `inherit.aes = TRUE` (the\n#' default), it is combined with the default mapping at the top level of the\n#' plot. You must supply `mapping` if there is no plot mapping.\n#' @param data The data to be displayed in this layer. There are three\n#' options:\n#'\n#' If `NULL`, the default, the data is inherited from the plot\n#' data as specified in the call to [ggplot()].\n#'\n#' A `data.frame`, or other object, will override the plot\n#' data. All objects will be fortified to produce a data frame. See\n#' [fortify()] for which variables will be created.\n#'\n#' A `function` will be called with a single argument,\n#' the plot data. The return value must be a `data.frame`, and\n#' will be used as the layer data.\n#' @param geom The geometric object to use display the data\n#' @param stat The statistical transformation to use on the data for this\n#' layer, as a string.\n#' @param position Position adjustment, either as a string, or the result of\n#' a call to a position adjustment function.\n#' @param show.legend logical. Should this layer be included in the legends?\n#' `NA`, the default, includes if any aesthetics are mapped.\n#' `FALSE` never includes, and `TRUE` always includes.\n#' It can also be a named logical vector to finely select the aesthetics to\n#' display.\n#' @param inherit.aes If `FALSE`, overrides the default aesthetics,\n#' rather than combining with them. This is most useful for helper functions\n#' that define both data and aesthetics and shouldn't inherit behaviour from\n#' the default plot specification, e.g. [borders()].\n#' @param check.aes,check.param If `TRUE`, the default, will check that\n#' supplied parameters and aesthetics are understood by the `geom` or\n#' `stat`. Use `FALSE` to suppress the checks.\n#' @param params Additional parameters to the `geom` and `stat`.\n#' @param layer_class The type of layer object to be constructued. This allows\n#' the creation of custom layers. Can usually be left at its default.\n#' @keywords internal\n#' @examples\n#' # geom calls are just a short cut for layer\n#' ggplot(mpg, aes(displ, hwy)) + geom_point()\n#' # shortcut for\n#' ggplot(mpg, aes(displ, hwy)) +\n#' layer(geom = \"point\", stat = \"identity\", position = \"identity\",\n#' params = list(na.rm = FALSE)\n#' )\n#'\n#' # use a function as data to plot a subset of global data\n#' ggplot(mpg, aes(displ, hwy)) +\n#' layer(geom = \"point\", stat = \"identity\", position = \"identity\",\n#' data = head, params = list(na.rm = FALSE)\n#' )\n#'\nlayer <- function(geom = NULL, stat = NULL,\n data = NULL, mapping = NULL,\n position = NULL, params = list(),\n inherit.aes = TRUE, check.aes = TRUE, check.param = TRUE,\n show.legend = NA, layer_class = Layer) {\n if (is.null(geom))\n stop(\"Attempted to create layer with no geom.\", call. = FALSE)\n if (is.null(stat))\n stop(\"Attempted to create layer with no stat.\", call. = FALSE)\n if (is.null(position))\n stop(\"Attempted to create layer with no position.\", call. = FALSE)\n\n # Handle show_guide/show.legend\n if (!is.null(params$show_guide)) {\n warning(\"`show_guide` has been deprecated. Please use `show.legend` instead.\",\n call. = FALSE)\n show.legend <- params$show_guide\n params$show_guide <- NULL\n }\n if (!is.logical(show.legend)) {\n warning(\"`show.legend` must be a logical vector.\", call. = FALSE)\n show.legend <- FALSE\n }\n\n # we validate mapping before data because in geoms and stats\n # the mapping is listed before the data argument; this causes\n # less confusing error messages when layers are accidentally\n # piped into each other\n if (!is.null(mapping)) {\n mapping <- validate_mapping(mapping)\n }\n\n data <- fortify(data)\n\n geom <- check_subclass(geom, \"Geom\", env = parent.frame())\n stat <- check_subclass(stat, \"Stat\", env = parent.frame())\n position <- check_subclass(position, \"Position\", env = parent.frame())\n\n # Special case for na.rm parameter needed by all layers\n if (is.null(params$na.rm)) {\n params$na.rm <- FALSE\n }\n\n # Split up params between aesthetics, geom, and stat\n params <- rename_aes(params)\n aes_params <- params[intersect(names(params), geom$aesthetics())]\n geom_params <- params[intersect(names(params), geom$parameters(TRUE))]\n stat_params <- params[intersect(names(params), stat$parameters(TRUE))]\n\n all <- c(geom$parameters(TRUE), stat$parameters(TRUE), geom$aesthetics())\n\n # Warn about extra params and aesthetics\n extra_param <- setdiff(names(params), all)\n if (check.param && length(extra_param) > 0) {\n warning(\n \"Ignoring unknown parameters: \", paste(extra_param, collapse = \", \"),\n call. = FALSE,\n immediate. = TRUE\n )\n }\n\n extra_aes <- setdiff(\n mapped_aesthetics(mapping),\n c(geom$aesthetics(), stat$aesthetics())\n )\n if (check.aes && length(extra_aes) > 0) {\n warning(\n \"Ignoring unknown aesthetics: \", paste(extra_aes, collapse = \", \"),\n call. = FALSE,\n immediate. = TRUE\n )\n }\n\n ggproto(\"LayerInstance\", layer_class,\n geom = geom,\n geom_params = geom_params,\n stat = stat,\n stat_params = stat_params,\n data = data,\n mapping = mapping,\n aes_params = aes_params,\n position = position,\n inherit.aes = inherit.aes,\n show.legend = show.legend\n )\n}\n\nvalidate_mapping <- function(mapping) {\n if (!inherits(mapping, \"uneval\")) {\n msg <- paste0(\"`mapping` must be created by `aes()`\")\n if (inherits(mapping, \"ggplot\")) {\n msg <- paste0(\n msg, \"\\n\",\n \"Did you use %>% instead of +?\"\n )\n }\n\n stop(msg, call. = FALSE)\n }\n\n # For backward compatibility with pre-tidy-eval layers\n new_aes(mapping)\n}\n\nLayer <- ggproto(\"Layer\", NULL,\n geom = NULL,\n geom_params = NULL,\n stat = NULL,\n stat_params = NULL,\n data = NULL,\n aes_params = NULL,\n mapping = NULL,\n position = NULL,\n inherit.aes = FALSE,\n\n print = function(self) {\n if (!is.null(self$mapping)) {\n cat(\"mapping:\", clist(self$mapping), \"\\n\")\n }\n cat(snakeize(class(self$geom)[[1]]), \": \", clist(self$geom_params), \"\\n\",\n sep = \"\")\n cat(snakeize(class(self$stat)[[1]]), \": \", clist(self$stat_params), \"\\n\",\n sep = \"\")\n cat(snakeize(class(self$position)[[1]]), \"\\n\")\n },\n\n layer_data = function(self, plot_data) {\n if (is.waive(self$data)) {\n plot_data\n } else if (is.function(self$data)) {\n data <- self$data(plot_data)\n if (!is.data.frame(data)) {\n stop(\"Data function must return a data.frame\", call. = FALSE)\n }\n data\n } else {\n self$data\n }\n },\n\n # hook to allow a layer access to the final layer data\n # in input form and to global plot info\n setup_layer = function(self, data, plot) {\n data\n },\n\n compute_aesthetics = function(self, data, plot) {\n # For annotation geoms, it is useful to be able to ignore the default aes\n if (self$inherit.aes) {\n aesthetics <- defaults(self$mapping, plot$mapping)\n } else {\n aesthetics <- self$mapping\n }\n\n # Drop aesthetics that are set or calculated\n set <- names(aesthetics) %in% names(self$aes_params)\n calculated <- is_calculated_aes(aesthetics)\n aesthetics <- aesthetics[!set & !calculated]\n\n # Override grouping if set in layer\n if (!is.null(self$geom_params$group)) {\n aesthetics[[\"group\"]] <- self$aes_params$group\n }\n\n scales_add_defaults(plot$scales, data, aesthetics, plot$plot_env)\n\n # Evaluate and check aesthetics\n evaled <- lapply(aesthetics, rlang::eval_tidy, data = data)\n evaled <- compact(evaled)\n\n n <- nrow(data)\n if (n == 0) {\n # No data, so look at longest evaluated aesthetic\n if (length(evaled) == 0) {\n n <- 0\n } else {\n n <- max(vapply(evaled, length, integer(1)))\n }\n }\n check_aesthetics(evaled, n)\n\n # Set special group and panel vars\n if (empty(data) && n > 0) {\n evaled$PANEL <- 1\n } else {\n evaled$PANEL <- data$PANEL\n }\n evaled <- lapply(evaled, unname)\n evaled <- as_gg_data_frame(evaled)\n evaled <- add_group(evaled)\n evaled\n },\n\n compute_statistic = function(self, data, layout) {\n if (empty(data))\n return(new_data_frame())\n\n params <- self$stat$setup_params(data, self$stat_params)\n data <- self$stat$setup_data(data, params)\n self$stat$compute_layer(data, params, layout)\n },\n\n map_statistic = function(self, data, plot) {\n if (empty(data)) return(new_data_frame())\n\n # Assemble aesthetics from layer, plot and stat mappings\n aesthetics <- self$mapping\n if (self$inherit.aes) {\n aesthetics <- defaults(aesthetics, plot$mapping)\n }\n aesthetics <- defaults(aesthetics, self$stat$default_aes)\n aesthetics <- compact(aesthetics)\n\n new <- strip_dots(aesthetics[is_calculated_aes(aesthetics)])\n if (length(new) == 0) return(data)\n\n # Add map stat output to aesthetics\n env <- new.env(parent = baseenv())\n env$stat <- stat\n\n stat_data <- new_data_frame(lapply(new, rlang::eval_tidy, data, env))\n names(stat_data) <- names(new)\n\n # Add any new scales, if needed\n scales_add_defaults(plot$scales, data, new, plot$plot_env)\n # Transform the values, if the scale say it's ok\n # (see stat_spoke for one exception)\n if (self$stat$retransform) {\n stat_data <- scales_transform_df(plot$scales, stat_data)\n }\n\n cunion(stat_data, data)\n },\n\n compute_geom_1 = function(self, data) {\n if (empty(data)) return(new_data_frame())\n\n check_required_aesthetics(\n self$geom$required_aes,\n c(names(data), names(self$aes_params)),\n snake_class(self$geom)\n )\n\n self$geom$setup_data(data, c(self$geom_params, self$aes_params))\n },\n\n compute_position = function(self, data, layout) {\n if (empty(data)) return(new_data_frame())\n\n params <- self$position$setup_params(data)\n data <- self$position$setup_data(data, params)\n\n self$position$compute_layer(data, params, layout)\n },\n\n compute_geom_2 = function(self, data) {\n # Combine aesthetics, defaults, & params\n if (empty(data)) return(data)\n\n self$geom$use_defaults(data, self$aes_params)\n },\n\n finish_statistics = function(self, data) {\n self$stat$finish_layer(data, self$stat_params)\n },\n\n draw_geom = function(self, data, layout) {\n if (empty(data)) {\n n <- nrow(layout$layout)\n return(rep(list(zeroGrob()), n))\n }\n\n data <- self$geom$handle_na(data, self$geom_params)\n self$geom$draw_layer(data, self$geom_params, layout, layout$coord)\n }\n)\n\nis.layer <- function(x) inherits(x, \"Layer\")\n\n\n\ncheck_subclass <- function(x, subclass,\n argname = to_lower_ascii(subclass),\n env = parent.frame()) {\n if (inherits(x, subclass)) {\n x\n } else if (is.character(x) && length(x) == 1) {\n name <- paste0(subclass, camelize(x, first = TRUE))\n obj <- find_global(name, env = env)\n\n if (is.null(obj) || !inherits(obj, subclass)) {\n stop(\"Can't find `\", argname, \"` called \\\"\", x, \"\\\"\", call. = FALSE)\n } else {\n obj\n }\n } else {\n stop(\n \"`\", argname, \"` must be either a string or a \", subclass, \" object, \",\n \"not \", obj_desc(x),\n call. = FALSE\n )\n }\n}\n\nobj_desc <- function(x) {\n if (isS4(x)) {\n paste0(\"an S4 object with class \", class(x)[[1]])\n } else if (is.object(x)) {\n if (is.data.frame(x)) {\n \"a data frame\"\n } else if (is.factor(x)) {\n \"a factor\"\n } else {\n paste0(\"an S3 object with class \", paste(class(x), collapse = \"/\"))\n }\n } else {\n switch(typeof(x),\n \"NULL\" = \"a NULL\",\n character = \"a character vector\",\n integer = \"an integer vector\",\n logical = \"a logical vector\",\n double = \"a numeric vector\",\n list = \"a list\",\n closure = \"a function\",\n paste0(\"a base object of type\", typeof(x))\n )\n }\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/layer.r"},{"filename":"ggplot2/R/plot-build.r","content":"#' Build ggplot for rendering.\n#'\n#' `ggplot_build()` takes the plot object, and performs all steps necessary\n#' to produce an object that can be rendered. This function outputs two pieces:\n#' a list of data frames (one for each layer), and a panel object, which\n#' contain all information about axis limits, breaks etc.\n#'\n#' `layer_data()`, `layer_grob()`, and `layer_scales()` are helper\n#' functions that return the data, grob, or scales associated with a given\n#' layer. These are useful for tests.\n#'\n#' @param plot ggplot object\n#' @param i An integer. In `layer_data()`, the data to return (in the order added to the\n#' plot). In `layer_grob()`, the grob to return (in the order added to the\n#' plot). In `layer_scales()`, the row of a facet to return scales for.\n#' @param j An integer. In `layer_scales()`, the column of a facet to return\n#' scales for.\n#' @seealso [print.ggplot()] and [benchplot()] for\n#' functions that contain the complete set of steps for generating\n#' a ggplot2 plot.\n#' @keywords internal\n#' @export\nggplot_build <- function(plot) {\n UseMethod('ggplot_build')\n}\n\n#' @export\nggplot_build.ggplot <- function(plot) {\n plot <- plot_clone(plot)\n if (length(plot$layers) == 0) {\n plot <- plot + geom_blank()\n }\n\n layers <- plot$layers\n layer_data <- lapply(layers, function(y) y$layer_data(plot$data))\n\n scales <- plot$scales\n # Apply function to layer and matching data\n by_layer <- function(f) {\n out <- vector(\"list\", length(data))\n for (i in seq_along(data)) {\n out[[i]] <- f(l = layers[[i]], d = data[[i]])\n }\n out\n }\n\n # Allow all layers to make any final adjustments based\n # on raw input data and plot info\n data <- layer_data\n data <- by_layer(function(l, d) l$setup_layer(d, plot))\n\n # Initialise panels, add extra data for margins & missing faceting\n # variables, and add on a PANEL variable to data\n layout <- create_layout(plot$facet, plot$coordinates)\n data <- layout$setup(data, plot$data, plot$plot_env)\n\n # Compute aesthetics to produce data with generalised variable names\n data <- by_layer(function(l, d) l$compute_aesthetics(d, plot))\n\n # Transform all scales\n data <- lapply(data, scales_transform_df, scales = scales)\n\n # Map and train positions so that statistics have access to ranges\n # and all positions are numeric\n scale_x <- function() scales$get_scales(\"x\")\n scale_y <- function() scales$get_scales(\"y\")\n\n layout$train_position(data, scale_x(), scale_y())\n data <- layout$map_position(data)\n\n # Apply and map statistics\n data <- by_layer(function(l, d) l$compute_statistic(d, layout))\n data <- by_layer(function(l, d) l$map_statistic(d, plot))\n\n # Make sure missing (but required) aesthetics are added\n scales_add_missing(plot, c(\"x\", \"y\"), plot$plot_env)\n\n # Reparameterise geoms from (e.g.) y and width to ymin and ymax\n data <- by_layer(function(l, d) l$compute_geom_1(d))\n\n # Apply position adjustments\n data <- by_layer(function(l, d) l$compute_position(d, layout))\n\n # Reset position scales, then re-train and map. This ensures that facets\n # have control over the range of a plot: is it generated from what is\n # displayed, or does it include the range of underlying data\n layout$reset_scales()\n layout$train_position(data, scale_x(), scale_y())\n layout$setup_panel_params()\n data <- layout$map_position(data)\n\n # Train and map non-position scales\n npscales <- scales$non_position_scales()\n if (npscales$n() > 0) {\n lapply(data, scales_train_df, scales = npscales)\n data <- lapply(data, scales_map_df, scales = npscales)\n }\n\n # Fill in defaults etc.\n data <- by_layer(function(l, d) l$compute_geom_2(d))\n\n # Let layer stat have a final say before rendering\n data <- by_layer(function(l, d) l$finish_statistics(d))\n\n # Let Layout modify data before rendering\n data <- layout$finish_data(data)\n\n structure(\n list(data = data, layout = layout, plot = plot),\n class = \"ggplot_built\"\n )\n}\n\n#' @export\n#' @rdname ggplot_build\nlayer_data <- function(plot, i = 1L) {\n ggplot_build(plot)$data[[i]]\n}\n\n#' @export\n#' @rdname ggplot_build\nlayer_scales <- function(plot, i = 1L, j = 1L) {\n b <- ggplot_build(plot)\n\n layout <- b$layout$layout\n selected <- layout[layout$ROW == i & layout$COL == j, , drop = FALSE]\n\n list(\n x = b$layout$panel_scales_x[[selected$SCALE_X]],\n y = b$layout$panel_scales_y[[selected$SCALE_Y]]\n )\n}\n\n#' @export\n#' @rdname ggplot_build\nlayer_grob <- function(plot, i = 1L) {\n b <- ggplot_build(plot)\n\n b$plot$layers[[i]]$draw_geom(b$data[[i]], b$layout)\n}\n\n#' Build a plot with all the usual bits and pieces.\n#'\n#' This function builds all grobs necessary for displaying the plot, and\n#' stores them in a special data structure called a [gtable()].\n#' This object is amenable to programmatic manipulation, should you want\n#' to (e.g.) make the legend box 2 cm wide, or combine multiple plots into\n#' a single display, preserving aspect ratios across the plots.\n#'\n#' @seealso [print.ggplot()] and [benchplot()] for\n#' for functions that contain the complete set of steps for generating\n#' a ggplot2 plot.\n#' @return a [gtable()] object\n#' @keywords internal\n#' @param data plot data generated by [ggplot_build()]\n#' @export\nggplot_gtable <- function(data) {\n UseMethod('ggplot_gtable')\n}\n\n#' @export\nggplot_gtable.ggplot_built <- function(data) {\n plot <- data$plot\n layout <- data$layout\n data <- data$data\n theme <- plot_theme(plot)\n\n geom_grobs <- Map(function(l, d) l$draw_geom(d, layout), plot$layers, data)\n plot_table <- layout$render(geom_grobs, data, theme, plot$labels)\n\n # Legends\n position <- theme$legend.position %||% \"right\"\n if (length(position) == 2) {\n position <- \"manual\"\n }\n\n legend_box <- if (position != \"none\") {\n build_guides(plot$scales, plot$layers, plot$mapping, position, theme, plot$guides, plot$labels)\n } else {\n zeroGrob()\n }\n\n if (is.zero(legend_box)) {\n position <- \"none\"\n } else {\n # these are a bad hack, since it modifies the contents of viewpoint directly...\n legend_width <- gtable_width(legend_box)\n legend_height <- gtable_height(legend_box)\n\n # Set the justification of the legend box\n # First value is xjust, second value is yjust\n just <- valid.just(theme$legend.justification)\n xjust <- just[1]\n yjust <- just[2]\n\n if (position == \"manual\") {\n xpos <- theme$legend.position[1]\n ypos <- theme$legend.position[2]\n\n # x and y are specified via theme$legend.position (i.e., coords)\n legend_box <- editGrob(legend_box,\n vp = viewport(x = xpos, y = ypos, just = c(xjust, yjust),\n height = legend_height, width = legend_width))\n } else {\n # x and y are adjusted using justification of legend box (i.e., theme$legend.justification)\n legend_box <- editGrob(legend_box,\n vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust)))\n legend_box <- gtable_add_rows(legend_box, unit(yjust, 'null'))\n legend_box <- gtable_add_rows(legend_box, unit(1 - yjust, 'null'), 0)\n legend_box <- gtable_add_cols(legend_box, unit(xjust, 'null'), 0)\n legend_box <- gtable_add_cols(legend_box, unit(1 - xjust, 'null'))\n }\n }\n\n panel_dim <- find_panel(plot_table)\n # for align-to-device, use this:\n # panel_dim <- summarise(plot_table$layout, t = min(t), r = max(r), b = max(b), l = min(l))\n\n theme$legend.box.spacing <- theme$legend.box.spacing %||% unit(0.2, 'cm')\n if (position == \"left\") {\n plot_table <- gtable_add_cols(plot_table, theme$legend.box.spacing, pos = 0)\n plot_table <- gtable_add_cols(plot_table, legend_width, pos = 0)\n plot_table <- gtable_add_grob(plot_table, legend_box, clip = \"off\",\n t = panel_dim$t, b = panel_dim$b, l = 1, r = 1, name = \"guide-box\")\n } else if (position == \"right\") {\n plot_table <- gtable_add_cols(plot_table, theme$legend.box.spacing, pos = -1)\n plot_table <- gtable_add_cols(plot_table, legend_width, pos = -1)\n plot_table <- gtable_add_grob(plot_table, legend_box, clip = \"off\",\n t = panel_dim$t, b = panel_dim$b, l = -1, r = -1, name = \"guide-box\")\n } else if (position == \"bottom\") {\n plot_table <- gtable_add_rows(plot_table, theme$legend.box.spacing, pos = -1)\n plot_table <- gtable_add_rows(plot_table, legend_height, pos = -1)\n plot_table <- gtable_add_grob(plot_table, legend_box, clip = \"off\",\n t = -1, b = -1, l = panel_dim$l, r = panel_dim$r, name = \"guide-box\")\n } else if (position == \"top\") {\n plot_table <- gtable_add_rows(plot_table, theme$legend.box.spacing, pos = 0)\n plot_table <- gtable_add_rows(plot_table, legend_height, pos = 0)\n plot_table <- gtable_add_grob(plot_table, legend_box, clip = \"off\",\n t = 1, b = 1, l = panel_dim$l, r = panel_dim$r, name = \"guide-box\")\n } else if (position == \"manual\") {\n # should guide box expand whole region or region without margin?\n plot_table <- gtable_add_grob(plot_table, legend_box,\n t = panel_dim$t, b = panel_dim$b, l = panel_dim$l, r = panel_dim$r,\n clip = \"off\", name = \"guide-box\")\n }\n\n # Title\n title <- element_render(theme, \"plot.title\", plot$labels$title, margin_y = TRUE)\n title_height <- grobHeight(title)\n\n # Subtitle\n subtitle <- element_render(theme, \"plot.subtitle\", plot$labels$subtitle, margin_y = TRUE)\n subtitle_height <- grobHeight(subtitle)\n\n # Tag\n tag <- element_render(theme, \"plot.tag\", plot$labels$tag, margin_y = TRUE, margin_x = TRUE)\n tag_height <- grobHeight(tag)\n tag_width <- grobWidth(tag)\n\n # whole plot annotation\n caption <- element_render(theme, \"plot.caption\", plot$labels$caption, margin_y = TRUE)\n caption_height <- grobHeight(caption)\n\n pans <- plot_table$layout[grepl(\"^panel\", plot_table$layout$name), ,\n drop = FALSE]\n\n plot_table <- gtable_add_rows(plot_table, subtitle_height, pos = 0)\n plot_table <- gtable_add_grob(plot_table, subtitle, name = \"subtitle\",\n t = 1, b = 1, l = min(pans$l), r = max(pans$r), clip = \"off\")\n\n plot_table <- gtable_add_rows(plot_table, title_height, pos = 0)\n plot_table <- gtable_add_grob(plot_table, title, name = \"title\",\n t = 1, b = 1, l = min(pans$l), r = max(pans$r), clip = \"off\")\n\n plot_table <- gtable_add_rows(plot_table, caption_height, pos = -1)\n plot_table <- gtable_add_grob(plot_table, caption, name = \"caption\",\n t = -1, b = -1, l = min(pans$l), r = max(pans$r), clip = \"off\")\n\n plot_table <- gtable_add_rows(plot_table, unit(0, 'pt'), pos = 0)\n plot_table <- gtable_add_cols(plot_table, unit(0, 'pt'), pos = 0)\n plot_table <- gtable_add_rows(plot_table, unit(0, 'pt'), pos = -1)\n plot_table <- gtable_add_cols(plot_table, unit(0, 'pt'), pos = -1)\n\n tag_pos <- theme$plot.tag.position %||% \"topleft\"\n if (length(tag_pos) == 2) tag_pos <- \"manual\"\n valid_pos <- c(\"topleft\", \"top\", \"topright\", \"left\", \"right\", \"bottomleft\",\n \"bottom\", \"bottomright\")\n\n if (!(tag_pos == \"manual\" || tag_pos %in% valid_pos)) {\n stop(\"plot.tag.position should be a coordinate or one of \",\n paste(valid_pos, collapse = ', '), call. = FALSE)\n }\n\n if (tag_pos == \"manual\") {\n xpos <- theme$plot.tag.position[1]\n ypos <- theme$plot.tag.position[2]\n tag_parent <- justify_grobs(tag, x = xpos, y = ypos,\n hjust = theme$plot.tag$hjust,\n vjust = theme$plot.tag$vjust,\n int_angle = theme$plot.tag$angle,\n debug = theme$plot.tag$debug)\n plot_table <- gtable_add_grob(plot_table, tag_parent, name = \"tag\", t = 1,\n b = nrow(plot_table), l = 1,\n r = ncol(plot_table), clip = \"off\")\n } else {\n # Widths and heights are reassembled below instead of assigning into them\n # in order to avoid bug in grid 3.2 and below.\n if (tag_pos == \"topleft\") {\n plot_table$widths <- unit.c(tag_width, plot_table$widths[-1])\n plot_table$heights <- unit.c(tag_height, plot_table$heights[-1])\n plot_table <- gtable_add_grob(plot_table, tag, name = \"tag\",\n t = 1, l = 1, clip = \"off\")\n } else if (tag_pos == \"top\") {\n plot_table$heights <- unit.c(tag_height, plot_table$heights[-1])\n plot_table <- gtable_add_grob(plot_table, tag, name = \"tag\",\n t = 1, l = 1, r = ncol(plot_table),\n clip = \"off\")\n } else if (tag_pos == \"topright\") {\n plot_table$widths <- unit.c(plot_table$widths[-ncol(plot_table)], tag_width)\n plot_table$heights <- unit.c(tag_height, plot_table$heights[-1])\n plot_table <- gtable_add_grob(plot_table, tag, name = \"tag\",\n t = 1, l = ncol(plot_table), clip = \"off\")\n } else if (tag_pos == \"left\") {\n plot_table$widths <- unit.c(tag_width, plot_table$widths[-1])\n plot_table <- gtable_add_grob(plot_table, tag, name = \"tag\",\n t = 1, b = nrow(plot_table), l = 1,\n clip = \"off\")\n } else if (tag_pos == \"right\") {\n plot_table$widths <- unit.c(plot_table$widths[-ncol(plot_table)], tag_width)\n plot_table <- gtable_add_grob(plot_table, tag, name = \"tag\",\n t = 1, b = nrow(plot_table), l = ncol(plot_table),\n clip = \"off\")\n } else if (tag_pos == \"bottomleft\") {\n plot_table$widths <- unit.c(tag_width, plot_table$widths[-1])\n plot_table$heights <- unit.c(plot_table$heights[-nrow(plot_table)], tag_height)\n plot_table <- gtable_add_grob(plot_table, tag, name = \"tag\",\n t = nrow(plot_table), l = 1, clip = \"off\")\n } else if (tag_pos == \"bottom\") {\n plot_table$heights <- unit.c(plot_table$heights[-nrow(plot_table)], tag_height)\n plot_table <- gtable_add_grob(plot_table, tag, name = \"tag\",\n t = nrow(plot_table), l = 1, r = ncol(plot_table), clip = \"off\")\n } else if (tag_pos == \"bottomright\") {\n plot_table$widths <- unit.c(plot_table$widths[-ncol(plot_table)], tag_width)\n plot_table$heights <- unit.c(plot_table$heights[-nrow(plot_table)], tag_height)\n plot_table <- gtable_add_grob(plot_table, tag, name = \"tag\",\n t = nrow(plot_table), l = ncol(plot_table), clip = \"off\")\n }\n }\n\n # Margins\n plot_table <- gtable_add_rows(plot_table, theme$plot.margin[1], pos = 0)\n plot_table <- gtable_add_cols(plot_table, theme$plot.margin[2])\n plot_table <- gtable_add_rows(plot_table, theme$plot.margin[3])\n plot_table <- gtable_add_cols(plot_table, theme$plot.margin[4], pos = 0)\n\n if (inherits(theme$plot.background, \"element\")) {\n plot_table <- gtable_add_grob(plot_table,\n element_render(theme, \"plot.background\"),\n t = 1, l = 1, b = -1, r = -1, name = \"background\", z = -Inf)\n plot_table$layout <- plot_table$layout[c(nrow(plot_table$layout), 1:(nrow(plot_table$layout) - 1)),]\n plot_table$grobs <- plot_table$grobs[c(nrow(plot_table$layout), 1:(nrow(plot_table$layout) - 1))]\n }\n plot_table\n}\n\n#' Generate a ggplot2 plot grob.\n#'\n#' @param x ggplot2 object\n#' @keywords internal\n#' @export\nggplotGrob <- function(x) {\n ggplot_gtable(ggplot_build(x))\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/plot-build.r"},{"filename":"grid/R/grob.R","content":"# File src/library/grid/R/grob.R\n# Part of the R package, https://www.R-project.org\n#\n# Copyright (C) 1995-2016 The R Core Team\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# A copy of the GNU General Public License is available at\n# https://www.R-project.org/Licenses/\n\n######################################\n# Grid graphical objects\n#######################################\n\n################\n# CLASS DEFN\n################\n# A \"virtual\" class \"gDesc\" underlies both \"grob\" and \"gPath\"\n\ninitGrobAutoName <- function() {\n index <- 0\n function(prefix=\"GRID\", suffix=\"GROB\") {\n index <<- index + 1\n paste(prefix, suffix, index, sep=\".\")\n }\n}\n\ngrobAutoName <- initGrobAutoName()\n\n# Function for user to call to get \"autogenerated\" grob name\ngrobName <- function(grob=NULL, prefix=\"GRID\") {\n if (is.null(grob))\n grobAutoName(prefix)\n else {\n if (!is.grob(grob))\n stop(\"invalid 'grob' argument\")\n else\n grobAutoName(prefix, class(grob)[1L])\n }\n}\n\n################\n# CLASS DEFN\n################\n# A grob has a name, a gp, and a vp\n# grob inherits from gDesc\ncheckvpSlot <- function(vp) {\n # vp can be a viewport, a viewport name, or a viewport path\n if (!is.null(vp))\n if (!inherits(vp, \"viewport\") &&\n !inherits(vp, \"vpPath\") &&\n !is.character(vp))\n stop(\"invalid 'vp' slot\")\n # For interactive use, allow user to specify\n # vpPath directly (i.e., w/o calling vpPath)\n if (is.character(vp))\n vp <- vpPath(vp)\n vp\n}\n\ncheckNameSlot <- function(x) {\n # Supply a default name if one is not given\n if (is.null(x$name))\n grobAutoName(suffix=class(x)[1L])\n else\n as.character(x$name)\n}\n\ncheckgpSlot <- function(gp) {\n # gp must be a gpar\n if (!is.null(gp))\n if (!inherits(gp, \"gpar\"))\n stop(\"invalid 'gp' slot\")\n}\n\nvalidDetails <- function(x) {\n UseMethod(\"validDetails\")\n}\n\nvalidDetails.grob <- function(x) {\n x\n}\n\nvalidGrob <- function(x, ...) {\n UseMethod(\"validGrob\")\n}\n\nvalidGrob.grob <- function(x, ...) {\n # Validate class-specific slots\n x <- validDetails(x)\n # Validate standard grob slots\n x$name <- checkNameSlot(x)\n checkgpSlot(x$gp)\n if (!is.null(x$vp))\n x$vp <- checkvpSlot(x$vp)\n return(x)\n}\n\n# This actually creates a new class derived from grob\n# and returns an instance of that new class, all in one step\ngrob <- function(..., name=NULL, gp=NULL, vp=NULL, cl=NULL) {\n g <- list(..., name=name, gp=gp, vp=vp)\n if (!is.null(cl) &&\n !is.character(cl))\n stop(\"invalid 'grob' class\")\n class(g) <- c(cl, \"grob\", \"gDesc\")\n validGrob(g)\n}\n\ngrid.grob <- function(list.struct, cl=NULL, draw=TRUE) .Defunct(\"grob\")\n\nis.grob <- function(x) {\n inherits(x, \"grob\")\n}\n\nas.character.grob <- function(x, ...) {\n paste0(class(x)[1L], \"[\", x$name, \"]\")\n}\n\nprint.grob <- function(x, ...) {\n cat(as.character(x), \"\\n\")\n invisible(x)\n}\n\n################\n# gPath CLASS DEFN\n################\n# gPath is a concatenated list of names specifying a path to a grob\n# Functions for creating \"paths\" of viewport names\n\ngPathFromVector <- function(names) {\n if (any(bad <- !is.character(names)))\n stop(ngettext(sum(bad), \"invalid grob name\", \"invalid grob names\"),\n domain = NA)\n # Break out any embedded .grid.pathSep's\n names <- unlist(strsplit(names, .grid.pathSep))\n n <- length(names)\n if (n < 1L)\n stop(\"a 'grob' path must contain at least one 'grob' name\")\n path <- list(path = if (n==1) NULL else\n paste(names[1L:(n-1)], collapse = .grid.pathSep),\n name = names[n], n = n)\n class(path) <- c(\"gPath\", \"path\")\n path\n}\n\ngPath <- function(...) {\n names <- c(...)\n gPathFromVector(names)\n}\n\n################\n# gList CLASS DEFN\n################\n# Just a list of grobs\nokGListelt <- function(x) {\n is.grob(x) || is.null(x) || is.gList(x)\n}\n\nis.gList <- function(x) {\n inherits(x, \"gList\")\n}\n\nas.gList <- function(x) {\n if (is.null(x)) {\n result <- list()\n class(result) <- \"gList\"\n } else if (is.grob(x)) {\n result <- list(x)\n class(result) <- \"gList\"\n } else if (is.gList(x)) {\n result <- x\n } else {\n stop(\"unable to coerce to \\\"gList\\\"\")\n }\n result\n}\n\ngList <- function(...) {\n gl <- list(...)\n if (length(gl) == 0L ||\n all(sapply(gl, okGListelt, simplify=TRUE))) {\n # Ensure gList is \"flat\"\n # Don't want gList containing gList ...\n if (!all(sapply(gl, is.grob)))\n gl <- do.call(\"c\", lapply(gl, as.gList))\n class(gl) <- c(\"gList\")\n return(gl)\n } else {\n stop(\"only 'grobs' allowed in \\\"gList\\\"\")\n }\n}\n\naddToGList <- function(x, gList) {\n UseMethod(\"addToGList\")\n}\n\naddToGList.default <- function(x, gList) {\n if (is.null(x))\n gList\n else\n stop(\"invalid element to add to \\\"gList\\\"\")\n}\n\naddToGList.grob <- function(x, gList) {\n if (is.null(gList))\n gList(x)\n else {\n gList[[length(gList) + 1L]] <- x\n return(gList)\n }\n}\n\naddToGList.gList <- function(x, gList) {\n gl <- c(gList, x)\n class(gl) <- \"gList\"\n return(gl)\n}\n\nas.character.gList <- function(x, ...) {\n paste0(\"(\", paste(lapply(x, as.character), collapse=\", \"), \")\")\n}\n\nprint.gList <- function(x, ...) {\n cat(as.character(x), \"\\n\")\n invisible(x)\n}\n\n`[.gList` <- function(x, index, ...) {\n cl <- class(x)\n result <- \"[\"(unclass(x), index, ...)\n class(result) <- cl\n result\n}\n\n################\n# gTree CLASS DEFN\n################\n# gTree extends grob\n# A gTree has additional children slot\nchildName <- function(x) {\n x$name\n}\n\nsetChildren <- function(x, children) {\n if (!inherits(x, \"gTree\"))\n stop(\"can only set 'children' for a \\\"gTree\\\"\")\n if (!is.null(children) &&\n !inherits(children, \"gList\"))\n stop(\"'children' must be a \\\"gList\\\"\")\n # Thin out NULL children\n if (!is.null(children)) {\n cl <- class(children)\n children <- children[!sapply(children, is.null)]\n class(children) <- cl\n }\n if (length(children)) {\n x$children <- children\n childNames <- sapply(children, childName)\n names(x$children) <- childNames\n x$childrenOrder <- childNames\n } else {\n x$children <- gList()\n x$childrenOrder <- character()\n }\n x\n}\n\nchildNames <- function(gTree) {\n if (!inherits(gTree, \"gTree\"))\n stop(\"it is only valid to get 'children' from a \\\"gTree\\\"\")\n gTree$childrenOrder\n}\n\nvalidGrob.gTree <- function(x, childrenvp, ...) {\n # Validate class-specific slots\n x <- validDetails(x)\n # Validate standard grob slots\n x$name <- checkNameSlot(x)\n checkgpSlot(x$gp)\n if (!is.null(x$vp))\n x$vp <- checkvpSlot(x$vp)\n # Only add childrenvp here so that gTree slots can\n # be validated before childrenvp get made\n # (making of childrenvp and children likely to depend\n # on gTree slots)\n if (!is.null(childrenvp))\n x$childrenvp <- checkvpSlot(childrenvp)\n return(x)\n}\n\ngTree <- function(..., name=NULL, gp=NULL, vp=NULL,\n children=NULL, childrenvp=NULL,\n cl=NULL) {\n gt <- list(..., name=name, gp=gp, vp=vp)\n if (!is.null(cl) &&\n !is.character(cl))\n stop(\"invalid \\\"gTree\\\" class\")\n class(gt) <- c(cl, \"gTree\", \"grob\", \"gDesc\")\n gt <- validGrob(gt, childrenvp)\n gt <- setChildren(gt, children)\n return(gt)\n}\n\n# A basic gTree that is JUST a collection of grobs\n# (simply interface to gTree)\ngrobTree <- function(..., name=NULL, gp=NULL, vp=NULL,\n childrenvp=NULL, cl=NULL) {\n gTree(children=gList(...),\n name=name, gp=gp, vp=vp,\n childrenvp=childrenvp, cl=cl)\n}\n\n################\n# Getting just the names of the top-level grobs on the DL\n################\ngetName <- function(elt) {\n if (inherits(elt, \"grob\"))\n elt$name\n else\n \"\"\n}\n\ngetNames <- function() {\n dl <- grid.Call(C_getDisplayList)[1L:grid.Call(C_getDLindex)]\n names <- sapply(dl, getName)\n names[nzchar(names)]\n}\n\n################\n# Getting/adding/removing/editing (children of [children of ...]) a gTree\n################\n\n# NOTE: In order to cut down on repeated code, some of these\n# (i.e., all but get and set) are inefficient and call get/set\n# to do their work. If speed becomes an issue, may have to\n# revert to individual support for each function with highly\n# repetitive code\n\n# Get a grob from the display list\ngrid.get <- function(gPath, strict=FALSE, grep=FALSE, global=FALSE,\n allDevices=FALSE) {\n if (allDevices)\n stop(\"'allDevices' not yet implemented\")\n if (is.character(gPath))\n gPath <- gPath(gPath)\n if (!inherits(gPath, \"gPath\"))\n stop(\"invalid 'gPath'\")\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n getDLfromGPath(gPath, strict, grep, global)\n}\n\n# Just different defaults to grid.get for convenience\n# Justified by usage patterns of Hadley Wickham\ngrid.gget <- function(..., grep=TRUE, global=TRUE) {\n grid.get(..., grep=grep, global=global)\n}\n\n# Get a child (of a child, of a child, ...) of a grob\ngetGrob <- function(gTree, gPath, strict=FALSE,\n grep=FALSE, global=FALSE) {\n if (!inherits(gTree, \"gTree\"))\n stop(\"it is only valid to get a child from a \\\"gTree\\\"\")\n if (is.character(gPath))\n gPath <- gPath(gPath)\n if (!inherits(gPath, \"gPath\"))\n stop(\"invalid 'gPath'\")\n if (depth(gPath) == 1 && strict) {\n gTree$children[[gPath$name]]\n } else {\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n getGTree(gTree, NULL, gPath, strict, grep, global)\n }\n}\n\n# Set a grob on the display list\n# nor is it valid to specify a global destination (i.e., no global arg)\ngrid.set <- function(gPath, newGrob, strict=FALSE, grep=FALSE,\n redraw=TRUE) {\n if (is.character(gPath))\n gPath <- gPath(gPath)\n if (!inherits(gPath, \"gPath\"))\n stop(\"invalid 'gPath'\")\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n result <- setDLfromGPath(gPath, newGrob, strict, grep)\n # result$index will be non-zero if matched the gPath\n if (result$index) {\n # Get the current DL index\n dl.index <- grid.Call(C_getDLindex)\n # Destructively modify the DL elt\n grid.Call(C_setDLindex, as.integer(result$index))\n grid.Call(C_setDLelt, result$grob)\n # Reset the DL index\n grid.Call(C_setDLindex, as.integer(dl.index))\n if (redraw)\n draw.all()\n } else {\n stop(\"'gPath' does not specify a valid child\")\n }\n}\n\n# Set a grob\n# nor is it valid to specify a global destination (i.e., no global arg)\nsetGrob <- function(gTree, gPath, newGrob, strict=FALSE, grep=FALSE) {\n if (!inherits(gTree, \"gTree\"))\n stop(\"it is only valid to set a child of a \\\"gTree\\\"\")\n if (!inherits(newGrob, \"grob\"))\n stop(\"it is only valid to set a 'grob' as child of a \\\"gTree\\\"\")\n if (is.character(gPath))\n gPath <- gPath(gPath)\n if (!inherits(gPath, \"gPath\"))\n stop(\"invalid 'gPath'\")\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n if (depth(gPath) == 1 && strict) {\n # gPath must specify an existing child\n if (old.pos <- nameMatch(gPath$name, gTree$childrenOrder, grep)) {\n # newGrob name must match existing name\n if (match(gTree$childrenOrder[old.pos], newGrob$name, nomatch=0L)) {\n gTree$children[[newGrob$name]] <- newGrob\n } else {\n stop(gettextf(\"New 'grob' name (%s) does not match 'gPath' (%s)\",\n newGrob$name, gPath), domain = NA)\n }\n } else {\n stop(\"'gPath' does not specify a valid child\")\n }\n } else {\n gTree <- setGTree(gTree, NULL, gPath, newGrob, strict, grep)\n if (is.null(gTree))\n stop(\"'gPath' does not specify a valid child\")\n }\n gTree\n}\n\n# Add a grob to a grob on the display list\ngrid.add <- function(gPath, child, strict=FALSE,\n grep=FALSE, global=FALSE, allDevices=FALSE,\n redraw=TRUE) {\n if (allDevices)\n stop(\"'allDevices' not yet implemented\")\n if (is.character(gPath))\n gPath <- gPath(gPath)\n if (!inherits(gPath, \"gPath\"))\n stop(\"invalid 'gPath'\")\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n addDLfromGPath(gPath, child, strict, grep, global, redraw)\n}\n\n# Add a grob to a gTree (or a child of a (child of a ...) gTree)\naddGrob <- function(gTree, child, gPath=NULL, strict=FALSE,\n grep=FALSE, global=FALSE, warn=TRUE) {\n if (!inherits(child, \"grob\"))\n stop(\"it is only valid to add a 'grob' to a \\\"gTree\\\"\")\n if (is.null(gPath)) {\n addToGTree(gTree, child)\n } else {\n if (is.character(gPath))\n gPath <- gPath(gPath)\n # Only makes sense to specify a gPath for a gTree\n if (!inherits(gTree, \"gTree\"))\n stop(\"it is only valid to add a child to a \\\"gTree\\\"\")\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n # result will be NULL if no match\n result <- addGTree(gTree, child, NULL, gPath, strict, grep, global)\n if (is.null(result)) {\n if (warn)\n warning(gettextf(\"'gPath' (%s) not found\",\n as.character(gPath)),\n domain = NA)\n gTree\n } else {\n result\n }\n }\n}\n\n# Remove a grob (or child of ...) from the display list\ngrid.remove <- function(gPath, warn=TRUE, strict=FALSE,\n grep=FALSE, global=FALSE, allDevices=FALSE,\n redraw=TRUE) {\n if (allDevices)\n stop(\"'allDevices' not yet implemented\")\n if (is.character(gPath))\n gPath <- gPath(gPath)\n if (!inherits(gPath, \"gPath\"))\n stop(\"invalid 'gPath'\")\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n if (depth(gPath) == 1) {\n removeNameFromDL(gPath$name, strict, grep, global, warn, redraw)\n } else {\n name <- gPath$name\n gPath <- gPath(gPath$path)\n greppath <- grep[-length(grep)]\n grepname <- grep[length(grep)]\n removeDLFromGPath(gPath, name, strict, greppath, grepname,\n global, warn, redraw)\n }\n}\n\n# Just different defaults to grid.remove for convenience\n# Justified by usage patterns of Hadley Wickham\ngrid.gremove <- function(..., grep=TRUE, global=TRUE) {\n grid.remove(..., grep=grep, global=global)\n}\n\n# Remove a child from a (child of ...) gTree\nremoveGrob <- function(gTree, gPath, strict=FALSE,\n grep=FALSE, global=FALSE, warn=TRUE) {\n if (!inherits(gTree, \"gTree\"))\n stop(\"it is only valid to remove a child from a \\\"gTree\\\"\")\n if (is.character(gPath))\n gPath <- gPath(gPath)\n if (!inherits(gPath, \"gPath\"))\n stop(\"invalid 'gPath'\")\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n if (depth(gPath) == 1) {\n # result will be NULL if no match\n result <- removeName(gTree, gPath$name, strict, grep, global, warn)\n } else {\n name <- gPath$name\n gPath <- gPath(gPath$path)\n greppath <- grep[-length(grep)]\n grepname <- grep[length(grep)]\n # result will be NULL if no match\n result <- removeGTree(gTree, name, NULL, gPath, strict,\n greppath, grepname, global, warn)\n }\n if (is.null(result)) {\n if (warn)\n warning(gettextf(\"'gPath' (%s) not found\", as.character(gPath)),\n domain = NA)\n gTree\n } else {\n result\n }\n}\n\n# Edit a grob on the display list\ngrid.edit <- function(gPath, ..., strict=FALSE,\n grep=FALSE, global=FALSE, allDevices=FALSE,\n redraw=TRUE) {\n if (allDevices)\n stop(\"'allDevices' not yet implemented\")\n if (is.character(gPath))\n gPath <- gPath(gPath)\n if (!inherits(gPath, \"gPath\"))\n stop(\"invalid 'gPath'\")\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n specs <- list(...)\n editDLfromGPath(gPath, specs, strict, grep, global, redraw)\n}\n\n# Just different defaults to grid.edit for convenience\n# Justified by usage patterns of Hadley Wickham\ngrid.gedit <- function(..., grep=TRUE, global=TRUE) {\n grid.edit(..., grep=grep, global=global)\n}\n\n# Edit a (child of a ...) grob\neditGrob <- function(grob, gPath=NULL, ..., strict=FALSE,\n grep=FALSE, global=FALSE, warn=TRUE) {\n specs <- list(...)\n if (is.null(gPath)) {\n editThisGrob(grob, specs)\n } else {\n if (is.character(gPath))\n gPath <- gPath(gPath)\n # Only makes sense to specify a gPath for a gTree\n if (!inherits(grob, \"gTree\"))\n stop(\"it is only valid to edit a child of a \\\"gTree\\\"\")\n if (!is.logical(grep))\n stop(\"invalid 'grep' value\")\n grep <- rep(grep, length.out=depth(gPath))\n # result will be NULL if no match\n result <- editGTree(grob, specs, NULL, gPath, strict, grep, global)\n if (is.null(result)) {\n if (warn)\n warning(gettextf(\"'gPath' (%s) not found\",\n as.character(gPath)),\n domain = NA)\n grob\n } else {\n result\n }\n }\n}\n\n#########\n# Generic \"hook\" to allow customised action on edit\n#########\neditDetails <- function(x, specs) {\n UseMethod(\"editDetails\")\n}\n\neditDetails.default <- function(x, specs) {\n # Do nothing BUT return object being edited\n x\n}\n\neditDetails.gTree <- function(x, specs) {\n # Disallow editing children or childrenOrder slots directly\n if (any(specs %in% c(\"children\", \"childrenOrder\")))\n stop(\"it is invalid to directly edit the 'children' or 'childrenOrder' slot\")\n x\n}\n\n#########\n# Helper functions for getting/adding/removing/editing grobs\n#\n# ASSUME down here that the grep argument has been replicated\n# up to the length of the gPath argument\n#########\n\n# Find a \"match\" between a path$name and a grob$name\nnameMatch <- function(pathName, grobName, grep) {\n if (grep) {\n pos <- grep(pathName, grobName)\n (length(pos) && pos == 1)\n } else {\n match(pathName, grobName, nomatch=0L)\n }\n}\n\n# Return the position of path$name in vector of names\n# Return FALSE if not found\n# If grep=TRUE, the answer may be a vector!\nnamePos <- function(pathName, names, grep) {\n if (grep) {\n pos <- grep(pathName, names)\n if (length(pos) == 0L)\n pos <- FALSE\n } else {\n pos <- match(pathName, names, nomatch=0L)\n }\n pos\n}\n\npartialPathMatch <- function(pathsofar, path, strict=FALSE, grep) {\n if (strict) {\n if (!any(grep))\n length(grep(paste0(\"^\", pathsofar), path)) > 0L\n else {\n pathSoFarElts <- explode(pathsofar)\n pathElts <- explode(path)\n ok <- TRUE\n npsfe <- length(pathSoFarElts)\n index <- 1\n while (ok & index <= npsfe) {\n if (grep[index])\n ok <- (grep(pathSoFarElts[index], pathElts[index]) == 1)\n else\n ok <- match(pathSoFarElts[index], pathElts[index], nomatch=0L)\n index <- index + 1\n }\n ok\n }\n } else {\n # If we're not doing strict matching then anything from a full\n # path match to absolutely no match means a partial match\n # (i.e., keep looking)\n TRUE\n }\n}\n\nfullPathMatch <- function(pathsofar, gPath, strict, grep) {\n if (is.null(pathsofar))\n match <- (depth(gPath) == 1)\n else {\n path <- gPath$path\n if (!any(grep))\n if (strict)\n match <- match(pathsofar, path, nomatch=0L)\n else\n match <- (length(grep(paste0(path, \"$\"), pathsofar)) > 0L)\n else {\n pathSoFarElts <- explode(pathsofar)\n pathElts <- explode(path)\n npsfe <- length(pathSoFarElts)\n npe <- length(pathElts)\n if (npe > npsfe) {\n match <- FALSE\n } else {\n match <- TRUE\n index <- 1\n if (strict) {# pathSoFar same length as gPath\n } else {# pathSoFar could be longer than gPath\n pathSoFarElts <- pathSoFarElts[(npsfe - npe + 1):npsfe]\n }\n while (match && index <= npe) {\n if (grep[index])\n match <- (length(grep(pathElts[index], pathSoFarElts[index])) > 0L)\n else\n match <- match(pathSoFarElts[index], pathElts[index], nomatch = 0L)\n index <- index + 1\n }\n }\n }\n }\n match\n}\n\n#####\n##### Get support\n#####\n\n# Add a grob to a result\ngrowResult <- function(result, x) {\n UseMethod(\"growResult\")\n}\n\n# Should only be when result is NULL\ngrowResult.default <- function(result, x) {\n if (!is.null(result))\n stop(\"invalid 'result'\")\n x\n}\n\ngrowResult.grob <- function(result, x) {\n if (is.grob(x))\n gList(result, x)\n else\n # x should be a gList\n addToGList(result, x)\n}\n\ngrowResult.gList <- function(result, x) {\n addToGList(x, result)\n}\n\n# A gPath may specify the child of a gTree\n# (or the child of a child of a gTree, or ...)\ngetGrobFromGPath <- function(grob, pathsofar, gPath, strict,\n grep, global) {\n UseMethod(\"getGrobFromGPath\")\n}\n\n# If it's not a grob then fail\n# Handles case when traversing DL\ngetGrobFromGPath.default <- function(grob, pathsofar, gPath, strict,\n grep, global) {\n NULL\n}\n\ngetGrobFromGPath.grob <- function(grob, pathsofar, gPath, strict,\n grep, global) {\n if (depth(gPath) > 1)\n NULL\n else {\n if (nameMatch(gPath$name, grob$name, grep))\n grob\n else\n NULL\n }\n}\n\ngetGTree <- function(gTree, pathsofar, gPath, strict, grep, global) {\n # Try to find pathsofar at start of gPath\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar) ||\n (!strict && depth(gPath) == 1) ||\n partialPathMatch(pathsofar, gPath$path, strict, grep)) {\n found <- FALSE\n index <- 1\n grob <- NULL\n # Search children for match\n while (index <= length(gTree$childrenOrder) &&\n (!found || global)) {\n childName <- gTree$childrenOrder[index]\n child <- gTree$children[[childName]]\n # Special case when strict is FALSE and depth(gPath) is 1\n # Just check for gPath$name amongst children and recurse if no match\n if (!strict && depth(gPath) == 1) {\n if (nameMatch(gPath$name, childName, grep)) {\n grob <- growResult(grob, child)\n found <- TRUE\n } else {\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- getGrobFromGPath(child, newpathsofar,\n gPath, strict,\n grep, global))) {\n grob <- growResult(grob, newChild)\n found <- TRUE\n }\n }\n } else {\n # Only check for match with child if have full match with pathsofar\n # If it's a complete match, look for gPath$name amongst child\n # NOTE: may be called directly with pathsofar=NULL\n if (fullPathMatch(pathsofar, gPath, strict, grep)) {\n if (nameMatch(gPath$name, childName, grep[depth(gPath)])) {\n grob <- growResult(grob, child)\n found <- TRUE\n }\n # Otherwise recurse down child\n } else {\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- getGrobFromGPath(child, newpathsofar,\n gPath, strict,\n grep, global))) {\n grob <- growResult(grob, newChild)\n found <- TRUE\n }\n }\n }\n index <- index + 1\n }\n if (found)\n grob\n else\n NULL\n } else {\n NULL\n }\n}\n\ngetGrobFromGPath.gTree <- function(grob, pathsofar, gPath, strict,\n grep, global) {\n if (depth(gPath) == 1) {\n if (nameMatch(gPath$name, grob$name, grep))\n grob\n else\n if (strict)\n NULL\n else\n getGTree(grob,\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, strict, grep, global)\n } else {\n getGTree(grob,\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, strict, grep, global)\n }\n}\n\ngetDLfromGPath <- function(gPath, strict, grep, global) {\n dl.index <- grid.Call(C_getDLindex)\n result <- NULL\n index <- 1\n while (index < dl.index &&\n (is.null(result) || global)) {\n grob <- getGrobFromGPath(grid.Call(C_getDLelt,\n as.integer(index)),\n NULL, gPath, strict,\n grep, global)\n if (!is.null(grob))\n result <- growResult(result, grob)\n index <- index + 1\n }\n result\n}\n\n#####\n##### Set support\n#####\n# A gPath may specify the child of a gTree\n# (or the child of a child of a gTree, or ...)\nsetGrobFromGPath <- function(grob, pathsofar, gPath, newGrob, strict, grep) {\n UseMethod(\"setGrobFromGPath\")\n}\n\n# Ignore DL elements which are not grobs\nsetGrobFromGPath.default <- function(grob, pathsofar, gPath, newGrob,\n strict, grep) {\n NULL\n}\n\nsetGrobFromGPath.grob <- function(grob, pathsofar, gPath, newGrob,\n strict, grep) {\n if (depth(gPath) > 1)\n NULL\n else {\n if (nameMatch(gPath$name, grob$name, grep))\n if (match(grob$name, newGrob$name, nomatch=0L))\n newGrob\n else\n NULL\n else\n NULL\n }\n}\n\n# Try to match gPath in gTree children\n# Return NULL if cant' find match\n# Return modified gTree if can find match\nsetGTree <- function(gTree, pathsofar, gPath, newGrob, strict, grep) {\n # Try to find pathsofar at start of gPath\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar) ||\n (!strict && depth(gPath) == 1) ||\n partialPathMatch(pathsofar, gPath$path, strict, grep)) {\n found <- FALSE\n index <- 1\n # Search children for match\n while (index <= length(gTree$childrenOrder) && !found) {\n childName <- gTree$childrenOrder[index]\n child <- gTree$children[[childName]]\n # Special case when strict is FALSE and depth(gPath) is 1\n # Just check for gPath$name amongst children and recurse if no match\n if (!strict && depth(gPath) == 1) {\n if (nameMatch(gPath$name, childName, grep)) {\n if (match(childName, newGrob$name, nomatch=0L)) {\n gTree$children[[newGrob$name]] <- newGrob\n found <- TRUE\n } else {\n stop(\"the new 'grob' must have the same name as the old 'grob'\")\n }\n } else {\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- setGrobFromGPath(child, newpathsofar,\n gPath, newGrob,\n strict, grep))) {\n gTree$children[[childName]] <- newChild\n found <- TRUE\n }\n }\n } else {\n # Only check for match with child if have full match with pathsofar\n # If it's a complete match, look for gPath$name amongst child\n # NOTE: may be called directly with pathsofar=NULL\n if (fullPathMatch(pathsofar, gPath, strict, grep)) {\n if (nameMatch(gPath$name, childName, grep[depth(gPath)])) {\n if (match(childName, newGrob$name, nomatch=0L)) {\n gTree$children[[newGrob$name]] <- newGrob\n found <- TRUE\n } else {\n stop(\"the new 'grob' must have the same name as the old 'grob'\")\n }\n }\n # Otherwise recurse down child\n } else {\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- setGrobFromGPath(child, newpathsofar,\n gPath, newGrob,\n strict, grep))) {\n gTree$children[[childName]] <- newChild\n found <- TRUE\n }\n }\n }\n index <- index + 1\n }\n if (found)\n gTree\n else\n NULL\n } else {\n NULL\n }\n}\n\nsetGrobFromGPath.gTree <- function(grob, pathsofar, gPath, newGrob,\n strict, grep) {\n if (depth(gPath) == 1) {\n if (nameMatch(gPath$name, grob$name, grep))\n if (match(grob$name, newGrob$name, nomatch=0L))\n newGrob\n else\n stop(\"the new 'grob' must have the same name as the old 'grob'\")\n else\n if (strict)\n NULL\n else\n setGTree(grob,\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, newGrob, strict, grep)\n } else {\n setGTree(grob,\n # Initialise pathsofar if first time through\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, newGrob, strict, grep)\n }\n}\n\nsetDLfromGPath <- function(gPath, newGrob, strict, grep) {\n dl.index <- grid.Call(C_getDLindex)\n index <- 1\n result <- list(index=0, grob=NULL)\n while (index < dl.index &&\n result$index == 0) {\n result$grob <- setGrobFromGPath(grid.Call(C_getDLelt,\n as.integer(index)),\n NULL, gPath, newGrob, strict, grep)\n if (!is.null(result$grob))\n result$index <- index\n index <- index + 1\n }\n result\n}\n\n#####\n##### Edit support\n#####\neditThisGrob <- function(grob, specs) {\n for (i in names(specs))\n if (nzchar(i))\n # Handle gp as special case\n if (match(i, \"gp\", nomatch=0))\n # Handle NULL as special case\n if (is.null(specs[[i]]))\n grob[i] <- list(gp=NULL)\n else\n grob$gp <- mod.gpar(grob$gp, specs$gp)\n # If there is no slot with the argument name, just ignore that argument\n else if (match(i, names(grob), nomatch=0))\n # Handle NULL as special case\n if (is.null(specs[[i]]))\n grob[i] <- eval(substitute(list(i=NULL)))\n else\n grob[[i]] <- specs[[i]]\n else\n warning(gettextf(\"slot '%s' not found\", i), domain = NA)\n # Check grob slots are ok before trying to do anything with them\n # in editDetails\n # grob$childrenvp may be non-NULL for a gTree\n grob <- validGrob(grob, grob$childrenvp)\n editDetails(grob, specs)\n}\n\n# A gPath may specify the child of a gTree\n# (or the child of a child of a gTree, or ...)\neditGrobFromGPath <- function(grob, specs, pathsofar, gPath, strict,\n grep, global) {\n UseMethod(\"editGrobFromGPath\")\n}\n\n# If it's not a grob then fail\n# Handles case when traversing DL\neditGrobFromGPath.default <- function(grob, specs,\n pathsofar, gPath, strict,\n grep, global) {\n NULL\n}\n\neditGrobFromGPath.grob <- function(grob, specs,\n pathsofar, gPath, strict,\n grep, global) {\n if (depth(gPath) > 1)\n NULL\n else {\n if (nameMatch(gPath$name, grob$name, grep))\n editThisGrob(grob, specs)\n else\n NULL\n }\n}\n\neditGTree <- function(gTree, specs, pathsofar, gPath, strict,\n grep, global) {\n # Try to find pathsofar at start of gPath\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar) ||\n (!strict && depth(gPath) == 1) ||\n partialPathMatch(pathsofar, gPath$path, strict, grep)) {\n found <- FALSE\n index <- 1\n # Search children for match\n while (index <= length(gTree$childrenOrder) &&\n (!found || global)) {\n childName <- gTree$childrenOrder[index]\n child <- gTree$children[[childName]]\n # Special case when strict is FALSE and depth(gPath) is 1\n # Just check for gPath$name amongst children and recurse if no match\n if (!strict && depth(gPath) == 1) {\n if (nameMatch(gPath$name, childName, grep)) {\n gTree$children[[childName]] <- editThisGrob(child, specs)\n found <- TRUE\n } else {\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- editGrobFromGPath(child, specs,\n newpathsofar,\n gPath, strict,\n grep, global))) {\n gTree$children[[childName]] <- newChild\n found <- TRUE\n }\n }\n } else {\n # Only check for match with child if have full match with pathsofar\n # If it's a complete match, look for gPath$name amongst child\n # NOTE: may be called directly with pathsofar=NULL\n if (fullPathMatch(pathsofar, gPath, strict, grep)) {\n if (nameMatch(gPath$name, childName, grep[depth(gPath)])) {\n gTree$children[[childName]] <- editThisGrob(child, specs)\n found <- TRUE\n }\n # Otherwise recurse down child\n } else {\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- editGrobFromGPath(child, specs,\n newpathsofar,\n gPath, strict,\n grep, global))) {\n gTree$children[[childName]] <- newChild\n found <- TRUE\n }\n }\n }\n index <- index + 1\n }\n if (found)\n gTree\n else\n NULL\n } else {\n NULL\n }\n}\n\neditGrobFromGPath.gTree <- function(grob, specs,\n pathsofar, gPath, strict,\n grep, global) {\n if (depth(gPath) == 1) {\n if (nameMatch(gPath$name, grob$name, grep))\n editThisGrob(grob, specs)\n else\n if (strict)\n NULL\n else\n editGTree(grob, specs,\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, strict, grep, global)\n } else {\n editGTree(grob, specs,\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, strict, grep, global)\n }\n}\n\neditDLfromGPath <- function(gPath, specs, strict, grep, global, redraw) {\n dl.index <- grid.Call(C_getDLindex)\n index <- 1\n grob <- NULL\n found <- FALSE\n while (index < dl.index &&\n (is.null(grob) || global)) {\n grob <- editGrobFromGPath(grid.Call(C_getDLelt,\n as.integer(index)),\n specs,\n NULL, gPath, strict, grep, global)\n if (!is.null(grob)) {\n # Destructively modify the DL elt\n grid.Call(C_setDLindex, as.integer(index))\n grid.Call(C_setDLelt, grob)\n # Reset the DL index\n grid.Call(C_setDLindex, as.integer(dl.index))\n found <- TRUE\n }\n index <- index + 1\n }\n if (!found)\n stop(gettextf(\"'gPath' (%s) not found\", as.character(gPath)), domain = NA)\n else if (redraw)\n draw.all()\n}\n\n#####\n##### Add support\n#####\n\n# Assume that child is a grob\naddToGTree <- function(gTree, child) {\n if (!inherits(gTree, \"gTree\"))\n stop(\"it is only valid to add a child to a \\\"gTree\\\"\")\n gTree$children[[child$name]] <- child\n # Handle case where child name already exists (so will be overwritten)\n if (old.pos <- match(child$name, gTree$childrenOrder, nomatch=0))\n gTree$childrenOrder <- gTree$childrenOrder[-old.pos]\n gTree$childrenOrder <- c(gTree$childrenOrder, child$name)\n gTree\n}\n\n# A gPath may specify the child of a gTree\n# (or the child of a child of a gTree, or ...)\naddGrobFromGPath <- function(grob, child, pathsofar, gPath, strict,\n grep, global) {\n UseMethod(\"addGrobFromGPath\")\n}\n\n# If it's not a grob then fail\n# Handles case when traversing DL\naddGrobFromGPath.default <- function(grob, child,\n pathsofar, gPath, strict,\n grep, global) {\n NULL\n}\n\n# If no match then fail\n# If match then error!\naddGrobFromGPath.grob <- function(grob, child,\n pathsofar, gPath, strict,\n grep, global) {\n if (depth(gPath) > 1)\n NULL\n else {\n if (nameMatch(gPath$name, grob$name, grep))\n stop(\"it is only valid to add a child to a \\\"gTree\\\"\")\n else\n NULL\n }\n}\n\n# In this function, the grob being added is called \"grob\"\n# (in all others it is called \"child\"\naddGTree <- function(gTree, grob, pathsofar, gPath, strict,\n grep, global) {\n # Try to find pathsofar at start of gPath\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar) ||\n (!strict && depth(gPath) == 1) ||\n partialPathMatch(pathsofar, gPath$path, strict, grep)) {\n found <- FALSE\n index <- 1\n # Search children for match\n while (index <= length(gTree$childrenOrder) &&\n (!found || global)) {\n childName <- gTree$childrenOrder[index]\n child <- gTree$children[[childName]]\n # Special case when strict is FALSE and depth(gPath) is 1\n # Just check for gPath$name amongst children and recurse if no match\n if (!strict && depth(gPath) == 1) {\n if (nameMatch(gPath$name, childName, grep)) {\n gTree$children[[childName]] <- addToGTree(child, grob)\n found <- TRUE\n } else {\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- addGrobFromGPath(child, grob,\n newpathsofar,\n gPath, strict,\n grep, global))) {\n gTree$children[[childName]] <- newChild\n found <- TRUE\n }\n }\n } else {\n # Only check for match with child if have full match with pathsofar\n # If it's a complete match, look for gPath$name amongst child\n # NOTE: may be called directly with pathsofar=NULL\n if (fullPathMatch(pathsofar, gPath, strict, grep)) {\n if (nameMatch(gPath$name, childName, grep[depth(gPath)])) {\n gTree$children[[childName]] <- addToGTree(child, grob)\n found <- TRUE\n }\n # Otherwise recurse down child\n } else {\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- addGrobFromGPath(child, grob,\n newpathsofar,\n gPath, strict,\n grep, global))) {\n gTree$children[[childName]] <- newChild\n found <- TRUE\n }\n }\n }\n index <- index + 1\n }\n if (found)\n gTree\n else\n NULL\n } else {\n NULL\n }\n}\n\naddGrobFromGPath.gTree <- function(grob, child,\n pathsofar, gPath, strict,\n grep, global) {\n if (depth(gPath) == 1) {\n if (nameMatch(gPath$name, grob$name, grep))\n addToGTree(grob, child)\n else\n if (strict)\n NULL\n else\n addGTree(grob, child,\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, strict, grep, global)\n } else {\n addGTree(grob, child,\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, strict, grep, global)\n }\n}\n\naddDLfromGPath <- function(gPath, child, strict, grep, global, redraw) {\n dl.index <- grid.Call(C_getDLindex)\n index <- 1\n grob <- NULL\n found <- FALSE\n while (index < dl.index &&\n (is.null(grob) || global)) {\n grob <- addGrobFromGPath(grid.Call(C_getDLelt,\n as.integer(index)),\n child,\n NULL, gPath, strict, grep, global)\n if (!is.null(grob)) {\n # Destructively modify the DL elt\n grid.Call(C_setDLindex, as.integer(index))\n grid.Call(C_setDLelt, grob)\n # Reset the DL index\n grid.Call(C_setDLindex, as.integer(dl.index))\n found <- TRUE\n }\n index <- index + 1\n }\n if (!found)\n stop(gettextf(\"'gPath' (%s) not found\", gPath), domain = NA)\n else if (redraw)\n draw.all()\n}\n\n#####\n##### Remove support\n#####\n\nremoveFromGTree <- function(gTree, name, grep) {\n if (!inherits(gTree, \"gTree\"))\n stop(\"it is only valid to remove a child from a \\\"gTree\\\"\")\n if (grep) {\n old.pos <- grep(name, gTree$childrenOrder)\n if (length(old.pos) == 0L)\n old.pos <- 0\n } else {\n old.pos <- match(name, gTree$childrenOrder, nomatch=0)\n }\n if (old.pos > 0) {\n # name might be a regexp so use real name\n gTree$children[[gTree$childrenOrder[old.pos]]] <- NULL\n gTree$childrenOrder <- gTree$childrenOrder[-old.pos]\n gTree\n } else {\n NULL\n }\n}\n\n# A gPath may specify the child of a gTree\n# (or the child of a child of a gTree, or ...)\nremoveGrobFromGPath <- function(grob, name, pathsofar, gPath, strict,\n grep, grepname, global, warn) {\n UseMethod(\"removeGrobFromGPath\")\n}\n\n# If it's not a grob then fail\n# Handles case when traversing DL\nremoveGrobFromGPath.default <- function(grob, name,\n pathsofar, gPath, strict,\n grep, grepname, global, warn) {\n NULL\n}\n\n# ALWAYS fail\n# (either no match or match but grob has no children!)\nremoveGrobFromGPath.grob <- function(grob, name,\n pathsofar, gPath, strict,\n grep, grepname, global, warn) {\n NULL\n}\n\nremoveGTree <- function(gTree, name, pathsofar, gPath, strict,\n grep, grepname, global, warn) {\n # Try to find pathsofar at start of gPath\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar) ||\n (!strict && depth(gPath) == 1) ||\n partialPathMatch(pathsofar, gPath$path, strict, grep)) {\n found <- FALSE\n index <- 1\n # Search children for match\n while (index <= length(gTree$childrenOrder) &&\n (!found || global)) {\n childName <- gTree$childrenOrder[index]\n child <- gTree$children[[childName]]\n # Special case when strict is FALSE and depth(gPath) is 1\n # Just check for gPath$name amongst children and recurse if no match\n if (!strict && depth(gPath) == 1) {\n # NOTE: child has to be a gTree if we hope to find a child in it!\n if (inherits(child, \"gTree\") &&\n nameMatch(gPath$name, childName, grep)) {\n newchild <- removeFromGTree(child, name, grepname)\n if (!is.null(newchild)) {\n gTree$children[[childName]] <- newchild\n found <- TRUE\n }\n } else {\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- removeGrobFromGPath(child, name,\n newpathsofar,\n gPath, strict,\n grep, grepname,\n global, warn))) {\n gTree$children[[childName]] <- newChild\n found <- TRUE\n }\n }\n } else {\n # Only check for match with child if have full match with pathsofar\n # If it's a complete match, look for gPath$name amongst child\n # NOTE: may be called directly with pathsofar=NULL\n if (fullPathMatch(pathsofar, gPath, strict, grep)) {\n # NOTE: child has to be a gTree if we hope to find a child in it!\n if (inherits(child, \"gTree\") &&\n nameMatch(gPath$name, childName, grep[depth(gPath)])) {\n newchild <- removeFromGTree(child, name, grepname)\n if (!is.null(newchild)) {\n gTree$children[[childName]] <- newchild\n found <- TRUE\n }\n }\n # Otherwise recurse down child\n } else {\n # NOTE: may be called directly with pathsofar=NULL\n if (is.null(pathsofar))\n newpathsofar <- child$name\n else\n newpathsofar <- paste0(pathsofar, .grid.pathSep, childName)\n if (!is.null(newChild <- removeGrobFromGPath(child, name,\n newpathsofar,\n gPath, strict,\n grep, grepname,\n global, warn))) {\n gTree$children[[childName]] <- newChild\n found <- TRUE\n }\n }\n }\n index <- index + 1\n }\n if (found)\n gTree\n else\n NULL\n } else {\n NULL\n }\n}\n\nremoveGrobFromGPath.gTree <- function(grob, name,\n pathsofar, gPath, strict,\n grep, grepname, global, warn) {\n if (depth(gPath) == 1) {\n if (nameMatch(gPath$name, grob$name, grep))\n removeFromGTree(grob, name, grepname)\n else\n if (strict)\n NULL\n else\n removeGTree(grob, name,\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, strict, grep, grepname, global, warn)\n } else {\n removeGTree(grob, name,\n if (is.null(pathsofar)) grob$name else pathsofar,\n gPath, strict, grep, grepname, global, warn)\n }\n}\n\nremoveDLFromGPath <- function(gPath, name, strict, grep, grepname, global,\n warn, redraw) {\n dl.index <- grid.Call(C_getDLindex)\n index <- 1\n grob <- NULL\n found <- FALSE\n while (index < dl.index &&\n (is.null(grob) || global)) {\n grob <- removeGrobFromGPath(grid.Call(C_getDLelt, as.integer(index)),\n name,\n NULL, gPath, strict, grep, grepname,\n global, warn)\n if (!is.null(grob)) {\n # Destructively modify the DL elt\n grid.Call(C_setDLindex, as.integer(index))\n grid.Call(C_setDLelt, grob)\n # Reset the DL index\n grid.Call(C_setDLindex, as.integer(dl.index))\n found <- TRUE\n }\n index <- index + 1\n }\n if (!found)\n stop(gettextf(\"gPath (%s) not found\",\n paste(gPath, name, sep=.grid.pathSep)),\n domain = NA)\n else if (redraw)\n draw.all()\n}\n\n#####\n##### Remove NAME support\n#####\n\n# NEVER called when strict=TRUE\nremoveGrobFromName <- function(grob, name, grep, global, warn) {\n UseMethod(\"removeGrobFromName\")\n}\n\nremoveGrobFromName.grob <- function(grob, name, grep, global, warn) {\n NULL\n}\n\n# For a gTree, just recurse straight back to removeName\nremoveGrobFromName.gTree <- function(grob, name, grep, global, warn) {\n removeName(grob, name, FALSE, grep, global, warn)\n}\n\nremoveName <- function(gTree, name, strict, grep, global, warn) {\n found <- FALSE\n index <- 1\n # Search children for match\n while (index <= length(gTree$childrenOrder) &&\n (!found || global)) {\n childName <- gTree$childrenOrder[index]\n child <- gTree$children[[childName]]\n # Just check child name and recurse if no match\n if (nameMatch(name, childName, grep)) {\n # name might be a regexp, so get real name\n gTree$children[[gTree$childrenOrder[index]]] <- NULL\n gTree$childrenOrder <- gTree$childrenOrder[-index]\n found <- TRUE\n # If deleted the child, do NOT increase index!\n } else if (strict) {\n NULL\n index <- index + 1\n } else {\n if (!is.null(newChild <- removeGrobFromName(child, name,\n grep, global, warn))) {\n gTree$children[[childName]] <- newChild\n found <- TRUE\n }\n index <- index + 1\n }\n }\n if (found)\n gTree\n else\n NULL\n}\n\nremoveNameFromDL <- function(name, strict, grep, global, warn, redraw) {\n dl.index <- grid.Call(C_getDLindex)\n index <- 1\n grob <- NULL\n found <- FALSE\n while (index < dl.index &&\n (is.null(grob) || global)) {\n grob <- grid.Call(C_getDLelt, as.integer(index))\n if (inherits(grob, \"grob\")) {\n # If match top-level grob, remove it from DL\n if (nameMatch(name, grob$name, grep)) {\n # Destructively modify the DL elt\n grid.Call(C_setDLindex, as.integer(index))\n grid.Call(C_setDLelt, NULL)\n # Reset the DL index\n grid.Call(C_setDLindex, as.integer(dl.index))\n found <- TRUE\n # Otherwise search down it for match\n } else {\n if (!strict) {\n grob <- removeGrobFromName(grob, name, grep, global, warn)\n if (!is.null(grob)) {\n # Destructively modify the DL elt\n grid.Call(C_setDLindex, as.integer(index))\n grid.Call(C_setDLelt, grob)\n # Reset the DL index\n grid.Call(C_setDLindex, as.integer(dl.index))\n found <- TRUE\n }\n }\n }\n } else {\n grob <- NULL\n }\n index <- index + 1\n }\n if (!found) {\n if (warn)\n stop(gettextf(\"gPath (%s) not found\", name), domain = NA)\n } else if (redraw)\n draw.all()\n}\n\n################\n# Finding a grob from a grob name\n################\nfindgrob <- function(x, name) {\n UseMethod(\"findgrob\")\n}\n\nfindgrob.default <- function(x, name) {\n NULL\n}\n\nfindgrob.grob <- function(x, name) {\n if (match(name, x$name, nomatch=0L))\n x\n else\n NULL\n}\n\nfindGrobinDL <- function(name) {\n dl.index <- grid.Call(C_getDLindex)\n result <- NULL\n index <- 1\n while (index < dl.index && is.null(result)) {\n result <- findgrob(grid.Call(C_getDLelt, as.integer(index)), name)\n index <- index + 1\n }\n if (is.null(result))\n stop(gettextf(\"grob '%s' not found\", name), domain = NA)\n result\n}\n\nfindGrobinChildren <- function(name, children) {\n nc <- length(children)\n result <- NULL\n index <- 1\n while (index <= nc && is.null(result)) {\n result <- findgrob(children[[index]], name)\n index <- index + 1\n }\n if (is.null(result))\n stop(gettextf(\"grob '%s' not found\", name), domain = NA)\n result\n}\n\n################\n# grid.draw\n################\n# Use generic function \"draw\" rather than generic function \"print\"\n# because want graphics functions to produce graphics output\n# without having to be evaluated at the command-line AND without having\n# to necessarily produce a single graphical object as the return value\n# (i.e., so that simple procedural code can be written just for its\n# side-effects).\n# For example, so that the following code will draw\n# a rectangle AND a line:\n# temp <- function() { grid.lines(); grid.rect() }\n# temp()\ngrid.draw <- function(x, recording=TRUE) {\n # If 'x' is NULL, draw nothing\n if (!is.null(x))\n UseMethod(\"grid.draw\")\n}\n\ngrid.draw.viewport <- function(x, recording) {\n pushViewport(x, recording=FALSE)\n}\n\ngrid.draw.vpPath <- function(x, recording) {\n # Assumes strict=FALSE, BUT in order to get onto\n # display list it must have worked => strict same as non-strict\n downViewport(x, recording=FALSE)\n}\n\ngrid.draw.pop <- function(x, recording) {\n popViewport(x, recording=FALSE)\n}\n\ngrid.draw.up <- function(x, recording) {\n upViewport(x, recording=FALSE)\n}\n\npushgrobvp <- function(vp) {\n UseMethod(\"pushgrobvp\")\n}\n\npushgrobvp.viewport <- function(vp) {\n pushViewport(vp, recording=FALSE)\n}\n\npushgrobvp.vpPath <- function(vp) {\n downViewport(vp, strict=TRUE, recording=FALSE)\n}\n\npopgrobvp <- function(vp) {\n UseMethod(\"popgrobvp\")\n}\n\npopgrobvp.viewport <- function(vp) {\n # NOTE that the grob's vp may be a vpStack/List/Tree\n upViewport(depth(vp), recording=FALSE)\n}\n\npopgrobvp.vpPath <- function(vp) {\n upViewport(depth(vp), recording=FALSE)\n}\n\npreDraw <- function(x) {\n UseMethod(\"preDraw\")\n}\n\npushvpgp <- function(x) {\n if (!is.null(x$vp))\n pushgrobvp(x$vp)\n if (!is.null(x$gp)) {\n set.gpar(x$gp, engineDL=FALSE)\n }\n}\n\nmakeContext <- function(x) {\n UseMethod(\"makeContext\")\n}\n\nmakeContext.default <- function(x) {\n x\n}\n\nmakeContent <- function(x) {\n UseMethod(\"makeContent\")\n}\n\nmakeContent.default <- function(x) {\n x\n}\n\npreDraw.grob <- function(x) {\n # Allow customisation of x$vp\n x <- makeContext(x)\n # automatically push/pop the viewport and set/unset the gpar\n pushvpgp(x)\n preDrawDetails(x)\n x\n}\n\npreDraw.gTree <- function(x) {\n # Allow customisation of x$vp (and x$childrenvp)\n x <- makeContext(x)\n # Make this gTree the \"current grob\" for evaluation of\n # grobwidth/height units via gPath\n # Do this as a .Call.graphics to get it onto the base display list\n grid.Call.graphics(C_setCurrentGrob, x)\n # automatically push/pop the viewport\n pushvpgp(x)\n # Push then \"up\" childrenvp\n if (!is.null(x$childrenvp)) {\n # Save any x$gp gpar settings\n tempgp <- grid.Call(C_getGPar)\n pushViewport(x$childrenvp, recording=FALSE)\n upViewport(depth(x$childrenvp), recording=FALSE)\n # reset the x$gp gpar settings\n # The upViewport above may have overwritten them with\n # the previous vp$gp settings\n grid.Call.graphics(C_setGPar, tempgp)\n }\n preDrawDetails(x)\n x\n}\n\npostDraw <- function(x) {\n UseMethod(\"postDraw\")\n}\n\npostDraw.grob <- function(x) {\n postDrawDetails(x)\n if (!is.null(x$vp))\n popgrobvp(x$vp)\n}\n\ndrawGrob <- function(x) {\n # Temporarily turn off the grid DL so that\n # nested calls to drawing code do not get recorded\n dlon <- grid.Call(C_setDLon, FALSE)\n # If get error or user-interrupt, need to reset state\n # Need to turn grid DL back on (if it was on)\n on.exit(grid.Call(C_setDLon, dlon))\n # Save current gpar\n tempgpar <- grid.Call(C_getGPar)\n # If get error or user-interrupt, need to reset state\n # Need to restore current grob (gtree predraw sets current grob)\n # Need to restore gpar settings (set by gtree itself and/or its vp)\n # This does not need to be a grid.Call.graphics() because\n # we are nested within a recordGraphics()\n # Do not call set.gpar because set.gpar accumulates cex\n on.exit(grid.Call(C_setGPar, tempgpar), add=TRUE)\n # Setting up the drawing context may involve modifying the grob\n # (typically only x$vp) but the modified grob is needed for postDraw()\n x <- preDraw(x)\n # Allow customisation of x\n # (should only return a basic grob that has a drawDetails()\n # method, otherwise nothing will be drawn)\n x <- makeContent(x)\n # Do any class-specific drawing\n drawDetails(x, recording=FALSE)\n postDraw(x)\n}\n\ngrid.draw.grob <- function(x, recording=TRUE) {\n engineDLon <- grid.Call(C_getEngineDLon)\n if (engineDLon)\n recordGraphics(drawGrob(x),\n list(x=x),\n getNamespace(\"grid\"))\n else\n drawGrob(x)\n if (recording)\n record(x)\n invisible()\n}\n\ndrawGList <- function(x) {\n # DO NOT turn off grid DL.\n # A top-level gList does not itself go on the DL,\n # but its children do.\n # A gList which is part of some other grob (e.g., children\n # of a gTree) will be \"protected\" by the gTree\n # turning off the DL.\n lapply(x, grid.draw)\n}\n\ngrid.draw.gList <- function(x, recording=TRUE) {\n engineDLon <- grid.Call(C_getEngineDLon)\n if (engineDLon)\n recordGraphics(drawGList(x),\n list(x=x),\n getNamespace(\"grid\"))\n else\n drawGList(x)\n invisible()\n}\n\ndrawGTree <- function(x) {\n # Temporarily turn off the grid DL so that\n # nested calls to drawing code do not get recorded\n dlon <- grid.Call(C_setDLon, FALSE)\n # If get error or user-interrupt, need to reset state\n # Need to turn grid DL back on (if it was on)\n on.exit(grid.Call(C_setDLon, dlon))\n # Save current grob and current gpar\n tempgrob <- grid.Call(C_getCurrentGrob)\n tempgpar <- grid.Call(C_getGPar)\n # If get error or user-interrupt, need to reset state\n # Need to restore current grob (gtree predraw sets current grob)\n # Need to restore gpar settings (set by gtree itself and/or its vp)\n # This does not need to be a grid.Call.graphics() because\n # we are nested within a recordGraphics()\n # Do not call set.gpar because set.gpar accumulates cex\n on.exit({ grid.Call(C_setGPar, tempgpar)\n grid.Call(C_setCurrentGrob, tempgrob)\n }, add=TRUE)\n # Setting up the drawing context may involve modifying the grob\n # (typically only x$vp) but the modified grob is needed for postDraw()\n x <- preDraw(x)\n # Allow customisation of x (should be confined to x$children)\n x <- makeContent(x)\n # Do any class-specific drawing\n drawDetails(x, recording=FALSE)\n # Draw all children IN THE RIGHT ORDER\n for (i in x$childrenOrder)\n grid.draw(x$children[[i]], recording=FALSE)\n postDraw(x)\n}\n\ngrid.draw.gTree <- function(x, recording=TRUE) {\n engineDLon <- grid.Call(C_getEngineDLon)\n if (engineDLon)\n recordGraphics(drawGTree(x),\n list(x=x),\n getNamespace(\"grid\"))\n else\n drawGTree(x)\n if (recording)\n record(x)\n invisible()\n}\n\ndraw.all <- function() {\n grid.newpage(recording=FALSE)\n dl.index <- grid.Call(C_getDLindex)\n if (dl.index > 1)\n # Start at 2 because first element is viewport[ROOT]\n for (i in 2:dl.index) {\n grid.draw(grid.Call(C_getDLelt, as.integer(i - 1)),\n recording=FALSE)\n }\n}\n\ndraw.details <- function(x, recording) {\n .Defunct(\"drawDetails\")\n}\n\npreDrawDetails <- function(x) {\n UseMethod(\"preDrawDetails\")\n}\n\npreDrawDetails.grob <- function(x) {\n}\n\npostDrawDetails <- function(x) {\n UseMethod(\"postDrawDetails\")\n}\n\npostDrawDetails.grob <- function(x) {\n}\n\ndrawDetails <- function(x, recording) {\n UseMethod(\"drawDetails\")\n}\n\ndrawDetails.grob <- function(x, recording) {\n}\n\ngrid.copy <- function(grob) {\n warning(\"this function is redundant and will disappear in future versions\",\n domain = NA)\n grob\n}\n\n################################\n# Flattening a grob\n\nforceGrob <- function(x) {\n UseMethod(\"forceGrob\")\n}\n\n# The default action is to leave 'x' untouched\n# BUT it is also necessary to enforce the drawing context\n# for viewports and vpPaths\nforceGrob.default <- function(x) {\n grid.draw(x, recording=FALSE)\n x\n}\n\n# This allows 'x' to be modified, but may not\n# change 'x' at all\nforceGrob.grob <- function(x) {\n # Copy of the original object to allow a \"revert\"\n originalX <- x\n # Same set up as drawGrob()\n dlon <- grid.Call(C_setDLon, FALSE)\n on.exit(grid.Call(C_setDLon, dlon))\n tempgpar <- grid.Call(C_getGPar)\n on.exit(grid.Call(C_setGPar, tempgpar), add=TRUE)\n # Same drawing context set up as drawGrob()\n # including enforcing the drawing context\n x <- preDraw(x)\n # Same drawing content set up as drawGrob() ...\n x <- makeContent(x)\n # BUT NO DRAWING\n # Same context clean up as drawGrob()\n postDraw(x)\n # If 'x' has not changed, just return original 'x'\n # Also, do not bother with saving original\n # If 'x' has changed ...\n if (!identical(x, originalX)) {\n # Store the original object to allow a \"revert\"\n x$.ORIGINAL <- originalX\n # Return the 'x' that would have been drawn\n # This will typically be a standard R primitive\n # (which do not have makeContext() or makeContent()\n # methods, only drawDetails())\n # BUT ot be safe add \"forcedgrob\" class so that subsequent\n # draws will NOT run makeContext() or makeContent()\n # methods\n class(x) <- c(\"forcedgrob\", class(x))\n }\n x\n}\n\n# This allows 'x' to be modified, but may not\n# change 'x' at all\nforceGrob.gTree <- function(x) {\n # Copy of the original object to allow a \"revert\"\n originalX <- x\n # Same set up as drawGTree()\n dlon <- grid.Call(C_setDLon, FALSE)\n on.exit(grid.Call(C_setDLon, dlon))\n tempgrob <- grid.Call(C_getCurrentGrob)\n tempgpar <- grid.Call(C_getGPar)\n on.exit({ grid.Call(C_setGPar, tempgpar)\n grid.Call(C_setCurrentGrob, tempgrob)\n }, add=TRUE)\n # Same drawing context set up as drawGTree(),\n # including enforcing the drawing context\n x <- preDraw(x)\n # Same drawing content set up as drawGTree() ...\n x <- makeContent(x)\n # Ensure that children are also forced\n x$children <- do.call(\"gList\", lapply(x$children, forceGrob))\n # BUT NO DRAWING\n # Same context clean up as drawGTree()\n postDraw(x)\n # If 'x' has changed ...\n if (!identical(x, originalX)) {\n # Store the original object to allow a \"revert\"\n x$.ORIGINAL <- originalX\n # Return the 'x' that would have been drawn\n # This will typically be a vanilla gTree with children to draw\n # (which will not have makeContext() or makeContent() methods)\n # BUT to be safe add \"forcedgrob\" class so that subsequent\n # draws will NOT run makeContext() or makeContent()\n # methods\n class(x) <- c(\"forcedgrob\", class(x))\n }\n x\n}\n\n# A \"forcedgrob\" does NOT modify context or content at\n# drawing time\nmakeContext.forcedgrob <- function(x) x\n\nmakeContent.forcedgrob <- function(x) x\n\ngrid.force <- function(x, ...) {\n UseMethod(\"grid.force\")\n}\n\ngrid.force.default <- function(x, redraw = FALSE, ...) {\n if (!missing(x))\n stop(\"Invalid force target\")\n # Must upViewport(0) otherwise you risk running the display\n # list from something other than the ROOT viewport\n oldcontext <- upViewport(0, recording=FALSE)\n dl.index <- grid.Call(C_getDLindex)\n if (dl.index > 1) {\n # Start at 2 because first element is viewport[ROOT]\n for (i in 2:dl.index) {\n grid.Call(C_setDLindex, as.integer(i - 1))\n grid.Call(C_setDLelt,\n forceGrob(grid.Call(C_getDLelt, as.integer(i - 1))))\n }\n grid.Call(C_setDLindex, dl.index)\n }\n if (redraw) {\n draw.all()\n }\n # Try to go back to original context\n if (length(oldcontext)) {\n seekViewport(oldcontext, recording=FALSE)\n }\n}\n\ngrid.force.grob <- function(x, draw = FALSE, ...) {\n fx <- forceGrob(x)\n if (draw)\n grid.draw(fx)\n fx\n}\n\ngrid.force.character <- function(x, ...) {\n grid.force(gPath(x), ...)\n}\n\ngrid.force.gPath <- function(x,\n strict=FALSE, grep=FALSE, global=FALSE,\n redraw = FALSE, ...) {\n # Use viewports=TRUE so that get vpPaths in result\n paths <- grid.grep(x, viewports = TRUE,\n strict = strict, grep = grep, global = global)\n f <- function(path, ...) {\n # Only force grobs or gTrees\n # (might have vpPaths because we said grid.grep(viewports=TRUE))\n if (!inherits(path, \"gPath\")) return()\n target <- grid.get(path, strict=TRUE)\n vpPath <- attr(path, \"vpPath\")\n depth <- 0\n if (nchar(vpPath))\n depth <- downViewport(vpPath, recording=FALSE)\n forcedgrob <- forceGrob(target, ...)\n if (depth > 0)\n upViewport(depth, recording=FALSE)\n grid.set(path, strict=TRUE, forcedgrob)\n }\n if (length(paths)) {\n # To get the force happening in the correct context ...\n oldcontext <- upViewport(0, recording=FALSE)\n if (global) {\n lapply(paths, f, ...)\n } else {\n f(paths, ...)\n }\n if (redraw) {\n draw.all()\n }\n # Try to go back to original context\n if (length(oldcontext))\n seekViewport(oldcontext, recording=FALSE)\n }\n invisible()\n}\n\nrevert <- function(x) {\n UseMethod(\"revert\")\n}\n\nrevert.default <- function(x) {\n x\n}\n\n# Only need to revert \"forcedgrob\"s\nrevert.forcedgrob <- function(x) {\n x$.ORIGINAL\n}\n\n# No need for recursion for gTree because if top-level grob\n# changed its children then top-level grob will have retained\n# revert version of its entire self (including children)\n\n# NOTE that things will get much trickier if allow\n# grid.revert(gPath = ...)\ngrid.revert <- function(x, ...) {\n UseMethod(\"grid.revert\")\n}\n\ngrid.revert.default <- function(x, redraw=FALSE, ...) {\n if (!missing(x))\n stop(\"Invalid revert target\")\n dl.index <- grid.Call(C_getDLindex)\n if (dl.index > 1) {\n # Start at 2 because first element is viewport[ROOT]\n for (i in 2:dl.index) {\n grid.Call(C_setDLindex, as.integer(i - 1))\n grid.Call(C_setDLelt,\n revert(grid.Call(C_getDLelt, as.integer(i - 1))))\n }\n grid.Call(C_setDLindex, dl.index)\n }\n if (redraw) {\n draw.all()\n }\n}\n\ngrid.revert.grob <- function(x, draw=FALSE, ...) {\n rx <- revert(x)\n if (draw) {\n grid.draw(x)\n }\n rx\n}\n\ngrid.revert.character <- function(x, ...) {\n grid.revert(gPath(x), ...)\n}\n\ngrid.revert.gPath <- function(x,\n strict=FALSE, grep=FALSE, global=FALSE,\n redraw = FALSE, ...) {\n paths <- grid.grep(x, strict = strict, grep = grep, global = global)\n f <- function(path, ...) {\n grid.set(path, strict=TRUE,\n revert(grid.get(path, strict=TRUE), ...))\n }\n if (length(paths)) {\n if (global) {\n lapply(paths, f, ...)\n } else {\n f(paths, ...)\n }\n if (redraw) {\n draw.all()\n }\n }\n invisible()\n}\n\n###############################\n# Reordering grobs\n\n# Reorder the children of a gTree\n# Order may be specified as a character vector\n# Character vector MUST name existing children\n# Order may be specified as a numeric vector\n# (which makes it easy to say something like\n# \"make last child the first child\")\n# Numeric vector MUST be within range 1:numChildren\n# Only unique order values used\n# Any children NOT specified by order are appended to\n# front or back of order (depending on 'front' argument)\n# Order is ALWAYS back-to-front\nreorderGrob <- function(x, order, back=TRUE) {\n if (!inherits(x, \"gTree\"))\n stop(\"can only reorder 'children' for a \\\"gTree\\\"\")\n order <- unique(order)\n oldOrder <- x$childrenOrder\n N <- length(oldOrder)\n if (is.character(order)) {\n # Convert to numeric\n order <- match(order, x$childrenOrder)\n }\n if (is.numeric(order)) {\n if (any(!is.finite(order)) ||\n !(all(order %in% 1:N))) {\n stop(\"Invalid 'order'\")\n }\n if (back) {\n newOrder <- c(x$childrenOrder[order],\n x$childrenOrder[-order])\n } else {\n newOrder <- c(x$childrenOrder[-order],\n x$childrenOrder[order])\n }\n }\n x$childrenOrder <- newOrder\n x\n}\n\n# Reorder the children of a gTree on the display list\n# (identified by a gPath)\n# NOTE that it is possible for this operation to produce a grob\n# that no longer draws (because it relies on another grob that\n# used to be drawn before it, e.g., when the width of grob \"b\"\n# is calculated from the width of grob \"a\")\n# Do NOT allow reordering of grobs on the display list\n# (it is not even clear what should happen in terms of reordering\n# grobs mixed with viewports PLUS the potential for ending up with\n# something that will not draw is pretty high)\n# IF you want to reorder the grobs on the DL, do a grid.grab()\n# first and then reorder the children of the resulting gTree\ngrid.reorder <- function(gPath, order, back=TRUE, grep=FALSE, redraw=TRUE) {\n grob <- grid.get(gPath, grep=grep)\n grid.set(gPath, reorderGrob(grob, order, back=back),\n grep=grep, redraw=redraw)\n}\n","normpath":"/Users/thomas/Dropbox/GitHub/grid/R/grob.R"},{"filename":"ggplot2/R/layout.R","content":"# The job of `Layout` is to coordinate:\n# * The coordinate system\n# * The faceting specification\n# * The individual position scales for each panel\n#\n# This includes managing the parameters for the facet and the coord\n# so that we don't modify the ggproto object in place.\n\ncreate_layout <- function(facet = FacetNull, coord = CoordCartesian) {\n ggproto(NULL, Layout, facet = facet, coord = coord)\n}\n#' @rdname ggplot2-ggproto\n#' @format NULL\n#' @usage NULL\n#' @export\nLayout <- ggproto(\"Layout\", NULL,\n # The coordinate system and its parameters\n coord = NULL,\n coord_params = list(),\n\n # The faceting specification and its parameters\n facet = NULL,\n facet_params = list(),\n\n # A data frame giving the layout of the data into panels\n layout = NULL,\n\n # Per panel scales and params\n panel_scales_x = NULL,\n panel_scales_y = NULL,\n panel_params = NULL,\n\n setup = function(self, data, plot_data = new_data_frame(), plot_env = emptyenv()) {\n data <- c(list(plot_data), data)\n\n # Setup facets\n self$facet_params <- self$facet$setup_params(data, self$facet$params)\n self$facet_params$plot_env <- plot_env\n data <- self$facet$setup_data(data, self$facet_params)\n\n # Setup coords\n self$coord_params <- self$coord$setup_params(data)\n data <- self$coord$setup_data(data, self$coord_params)\n\n # Generate panel layout\n self$layout <- self$facet$compute_layout(data, self$facet_params)\n self$layout <- self$coord$setup_layout(self$layout, self$coord_params)\n check_layout(self$layout)\n\n # Add panel coordinates to the data for each layer\n lapply(data[-1], self$facet$map_data,\n layout = self$layout,\n params = self$facet_params\n )\n },\n\n # Assemble the facet fg & bg, the coord fg & bg, and the layers\n # Returns a gtable\n render = function(self, panels, data, theme, labels) {\n facet_bg <- self$facet$draw_back(data,\n self$layout,\n self$panel_scales_x,\n self$panel_scales_y,\n theme,\n self$facet_params\n )\n facet_fg <- self$facet$draw_front(\n data,\n self$layout,\n self$panel_scales_x,\n self$panel_scales_y,\n theme,\n self$facet_params\n )\n\n # Draw individual panels, then assemble into gtable\n panels <- lapply(seq_along(panels[[1]]), function(i) {\n panel <- lapply(panels, `[[`, i)\n panel <- c(facet_bg[i], panel, facet_fg[i])\n\n coord_fg <- self$coord$render_fg(self$panel_params[[i]], theme)\n coord_bg <- self$coord$render_bg(self$panel_params[[i]], theme)\n if (isTRUE(theme$panel.ontop)) {\n panel <- c(panel, list(coord_bg), list(coord_fg))\n } else {\n panel <- c(list(coord_bg), panel, list(coord_fg))\n }\n\n ggname(\n paste(\"panel\", i, sep = \"-\"),\n gTree(children = do.call(\"gList\", panel))\n )\n })\n plot_table <- self$facet$draw_panels(\n panels,\n self$layout,\n self$panel_scales_x,\n self$panel_scales_y,\n self$panel_params,\n self$coord,\n data,\n theme,\n self$facet_params\n )\n\n # Draw individual labels, then add to gtable\n labels <- self$coord$labels(list(\n x = self$xlabel(labels),\n y = self$ylabel(labels)\n ))\n labels <- self$render_labels(labels, theme)\n self$facet$draw_labels(\n plot_table,\n self$layout,\n self$panel_scales_x,\n self$panel_scales_y,\n self$panel_params,\n self$coord,\n data,\n theme,\n labels,\n self$params\n )\n },\n\n train_position = function(self, data, x_scale, y_scale) {\n # Initialise scales if needed, and possible.\n layout <- self$layout\n if (is.null(self$panel_scales_x)) {\n self$panel_scales_x <- self$facet$init_scales(layout, x_scale = x_scale,\n params = self$facet_params)$x\n }\n if (is.null(self$panel_scales_y)) {\n self$panel_scales_y <- self$facet$init_scales(layout, y_scale = y_scale,\n params = self$facet_params)$y\n }\n\n self$facet$train_scales(\n self$panel_scales_x,\n self$panel_scales_y,\n layout,\n data,\n self$facet_params\n )\n },\n\n map_position = function(self, data) {\n layout <- self$layout\n\n lapply(data, function(layer_data) {\n match_id <- match(layer_data$PANEL, layout$PANEL)\n\n # Loop through each variable, mapping across each scale, then joining\n # back together\n x_vars <- intersect(self$panel_scales_x[[1]]$aesthetics, names(layer_data))\n names(x_vars) <- x_vars\n SCALE_X <- layout$SCALE_X[match_id]\n new_x <- scale_apply(layer_data, x_vars, \"map\", SCALE_X, self$panel_scales_x)\n layer_data[, x_vars] <- new_x\n\n y_vars <- intersect(self$panel_scales_y[[1]]$aesthetics, names(layer_data))\n names(y_vars) <- y_vars\n SCALE_Y <- layout$SCALE_Y[match_id]\n new_y <- scale_apply(layer_data, y_vars, \"map\", SCALE_Y, self$panel_scales_y)\n layer_data[, y_vars] <- new_y\n\n layer_data\n })\n },\n\n reset_scales = function(self) {\n if (!self$facet$shrink) return()\n lapply(self$panel_scales_x, function(s) s$reset())\n lapply(self$panel_scales_y, function(s) s$reset())\n invisible()\n },\n\n finish_data = function(self, data) {\n lapply(data, self$facet$finish_data,\n layout = self$layout,\n x_scales = self$panel_scales_x,\n y_scales = self$panel_scales_y,\n params = self$facet_params\n )\n },\n\n get_scales = function(self, i) {\n this_panel <- self$layout[self$layout$PANEL == i, ]\n\n list(\n x = self$panel_scales_x[[this_panel$SCALE_X]],\n y = self$panel_scales_y[[this_panel$SCALE_Y]]\n )\n },\n\n setup_panel_params = function(self) {\n # Fudge for CoordFlip and CoordPolar - in place modification of\n # scales is not elegant, but it is pragmatic\n self$coord$modify_scales(self$panel_scales_x, self$panel_scales_y)\n\n scales_x <- self$panel_scales_x[self$layout$SCALE_X]\n scales_y <- self$panel_scales_y[self$layout$SCALE_Y]\n\n setup_panel_params <- function(scale_x, scale_y) {\n self$coord$setup_panel_params(scale_x, scale_y, params = self$coord_params)\n }\n self$panel_params <- Map(setup_panel_params, scales_x, scales_y)\n\n invisible()\n },\n\n xlabel = function(self, labels) {\n primary <- self$panel_scales_x[[1]]$name %|W|% labels$x\n primary <- self$panel_scales_x[[1]]$make_title(primary)\n secondary <- if (is.null(self$panel_scales_x[[1]]$secondary.axis)) {\n waiver()\n } else {\n self$panel_scales_x[[1]]$sec_name()\n } %|W|% labels$sec.x\n if (is.derived(secondary)) secondary <- primary\n secondary <- self$panel_scales_x[[1]]$make_sec_title(secondary)\n list(primary = primary, secondary = secondary)[self$panel_scales_x[[1]]$axis_order()]\n },\n\n ylabel = function(self, labels) {\n primary <- self$panel_scales_y[[1]]$name %|W|% labels$y\n primary <- self$panel_scales_y[[1]]$make_title(primary)\n secondary <- if (is.null(self$panel_scales_y[[1]]$secondary.axis)) {\n waiver()\n } else {\n self$panel_scales_y[[1]]$sec_name()\n } %|W|% labels$sec.y\n if (is.derived(secondary)) secondary <- primary\n secondary <- self$panel_scales_y[[1]]$make_sec_title(secondary)\n list(primary = primary, secondary = secondary)[self$panel_scales_y[[1]]$axis_order()]\n },\n\n render_labels = function(self, labels, theme) {\n label_grobs <- lapply(names(labels), function(label) {\n lapply(c(1, 2), function(i) {\n modify <- if (i == 1) {\n switch(label, x = \".top\", y = \".left\")\n } else {\n switch(label, x = \".bottom\", y = \".right\")\n }\n if (is.null(labels[[label]][[i]]) || is.waive(labels[[label]][[i]]))\n return(zeroGrob())\n\n element_render(\n theme = theme,\n element = paste0(\"axis.title.\", label, modify),\n label = labels[[label]][[i]],\n margin_x = label == \"y\",\n margin_y = label == \"x\"\n )\n })\n })\n names(label_grobs) <- names(labels)\n label_grobs\n }\n)\n\n\n# Helpers -----------------------------------------------------------------\n\n# Function for applying scale method to multiple variables in a given\n# data set. Implement in such a way to minimize copying and hence maximise\n# speed\nscale_apply <- function(data, vars, method, scale_id, scales) {\n if (length(vars) == 0) return()\n if (nrow(data) == 0) return()\n\n if (any(is.na(scale_id))) stop()\n\n scale_index <- unname(split(\n seq_along(scale_id),\n factor(scale_id, levels = seq_along(scales))\n ))\n\n lapply(vars, function(var) {\n pieces <- lapply(seq_along(scales), function(i) {\n scales[[i]][[method]](data[[var]][scale_index[[i]]])\n })\n # Join pieces back together, if necessary\n if (!is.null(pieces)) {\n unlist(pieces)[order(unlist(scale_index))]\n }\n })\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/layout.R"},{"filename":"ggplot2/R/utilities-grid.r","content":"#' @export\ngrid::unit\n\n#' @export\ngrid::arrow\n\n# Name ggplot grid object\n# Convenience function to name grid objects\n#\n# @keyword internal\nggname <- function(prefix, grob) {\n grob$name <- grobName(grob, prefix)\n grob\n}\n\nwidth_cm <- function(x) {\n if (is.grob(x)) {\n convertWidth(grobWidth(x), \"cm\", TRUE)\n } else if (is.unit(x)) {\n convertWidth(x, \"cm\", TRUE)\n } else if (is.list(x)) {\n vapply(x, width_cm, numeric(1))\n } else {\n stop(\"Unknown input\")\n }\n}\nheight_cm <- function(x) {\n if (is.grob(x)) {\n convertHeight(grobHeight(x), \"cm\", TRUE)\n } else if (is.unit(x)) {\n convertHeight(x, \"cm\", TRUE)\n } else if (is.list(x)) {\n vapply(x, height_cm, numeric(1))\n } else {\n stop(\"Unknown input\")\n }\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/utilities-grid.r"},{"filename":"grid/R/grid.R","content":"# File src/library/grid/R/grid.R\n# Part of the R package, https://www.R-project.org\n#\n# Copyright (C) 1995-2016 The R Core Team\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# A copy of the GNU General Public License is available at\n# https://www.R-project.org/Licenses/\n\n\n# FIXME: all grid functions should check that .grid.started is TRUE\n.grid.loaded <- FALSE\n\npush.vp <- function(vp, recording) {\n UseMethod(\"push.vp\")\n}\n\npush.vp.default <- function(vp, recording) {\n stop(\"only valid to push viewports\")\n}\n\npush.vp.viewport <- function(vp, recording) {\n # Record on the display list\n if (recording)\n record(vp)\n # Store the entire set of gpar settings JUST PRIOR to push\n # We refer to this when calculating the viewport transform\n # We cannot simply rely on parent's gpar because we may be\n # being pushed from within a gTree which has enforced gpar\n # settings (i.e., the gTree$gp is enforced between this viewport\n # and the this viewport's parent$gp)\n vp$parentgpar <- grid.Call(C_getGPar)\n # Enforce gpar settings\n set.gpar(vp$gp)\n # Store the entire set of gpar settings for this viewport\n vp$gpar <- grid.Call(C_getGPar)\n # Pass in the pushedvp structure which will be used to store\n # things like the viewport transformation, parent-child links, ...\n # In C code, a pushedvp object is created, with a call to pushedvp(),\n # for the system to keep track of\n # (it happens in C code so that a \"normal\" vp gets recorded on the\n # display list rather than a \"pushedvp\")\n grid.Call.graphics(C_setviewport, vp, TRUE)\n}\n\n# For all but the last viewport, push the\n# viewport then pop it\n# For the last viewport, just push\npush.vp.vpList <- function(vp, recording) {\n push.vp.parallel <- function(vp, recording) {\n push.vp(vp, recording)\n upViewport(depth(vp), recording)\n }\n if (length(vp) == 1)\n push.vp(vp[[1L]], recording)\n else {\n lapply(vp[1L:(length(vp) - 1)], push.vp.parallel, recording)\n push.vp(vp[[length(vp)]], recording)\n }\n}\n\n# Push viewports in series\npush.vp.vpStack <- function(vp, recording) {\n lapply(vp, push.vp, recording)\n}\n\n# Push parent\n# Children are a vpList\npush.vp.vpTree <- function(vp, recording) {\n # Special case if user has saved the entire vpTree\n # parent will be the ROOT viewport, which we don't want to\n # push (grid ensures it is ALWAYS there)\n if (!(vp$parent$name %in% \"ROOT\"))\n push.vp(vp$parent, recording)\n push.vp(vp$children, recording)\n}\n\n# \"push\"ing a vpPath is just a downViewport(..., strict=TRUE)\npush.vp.vpPath <- function(vp, recording) {\n downViewport(vp, strict=TRUE, recording)\n}\n\npush.viewport <- function(..., recording=TRUE) {\n .Defunct(\"pushViewport\")\n}\n\npushViewport <- function(..., recording=TRUE) {\n if (missing(...))\n stop(\"must specify at least one viewport\")\n else {\n vps <- list(...)\n lapply(vps, push.vp, recording)\n }\n invisible()\n}\n\n# Helper functions called from C\nno.children <- function(children) {\n length(names(children)) == 0\n}\n\nchild.exists <- function(name, children) {\n exists(name, envir=children, inherits=FALSE)\n}\n\nchild.list <- function(children) {\n ls(children, all.names=TRUE) # sorted (needed ?)\n}\n\npathMatch <- function(path, pathsofar, strict) {\n if (is.null(pathsofar))\n is.null(path)\n else {\n pattern <- paste0(if(strict) \"^\", path, \"$\")\n grepl(pattern, pathsofar)\n }\n}\n\ngrowPath <- function(pathsofar, name) {\n paste(pathsofar, name, sep=.grid.pathSep)\n}\n\n# Rather than pushing a new viewport, navigate down to one that has\n# already been pushed\ndownViewport <- function(name, strict=FALSE, recording=TRUE) {\n UseMethod(\"downViewport\")\n}\n\n# For interactive use, allow user to specify\n# vpPath directly (i.e., w/o calling vpPath)\ndownViewport.default <- function(name, strict=FALSE, recording=TRUE) {\n name <- as.character(name)\n downViewport(vpPath(name), strict, recording=recording)\n}\n\n# Build vpPath from one (pushed) viewport up to another (pushed) viewport\n# 'anc' is assumed to be an ancestor of 'desc'\n# 'depth' is the depth that the final depth should have\nbuildPath <- function(desc, anc, depth) {\n path <- desc$name\n while (!identical(desc$parent, anc)) {\n if (is.null(desc$parent))\n stop(\"Down viewport failed to record on display list\")\n desc <- desc$parent\n path <- c(desc$name, path)\n }\n result <- vpPath(path)\n if (depth(result) != depth)\n warning(\"Down viewport incorrectly recorded on display list\")\n result\n}\n\ndownViewport.vpPath <- function(name, strict=FALSE, recording=TRUE) {\n start <- grid.Call(C_currentViewport)\n if (name$n == 1)\n result <- grid.Call.graphics(C_downviewport, name$name, strict)\n else\n result <- grid.Call.graphics(C_downvppath,\n name$path, name$name, strict)\n # If the downViewport() fails, there is an error in C code\n # so none of the following code will be run\n\n # Enforce the gpar settings for the viewport\n pvp <- grid.Call(C_currentViewport)\n # Do not call set.gpar because set.gpar accumulates cex\n grid.Call.graphics(C_setGPar, pvp$gpar)\n # Record the viewport operation\n # ... including the depth navigated down\n if (recording) {\n attr(name, \"depth\") <- result\n # Record the strict path down\n path <- buildPath(pvp, start, result)\n record(path)\n }\n invisible(result)\n}\n\n# Similar to down.viewport() except it starts searching from the\n# top-level viewport, so the result may be \"up\" or even \"across\"\n# the current viewport tree\nseekViewport <- function(name, recording=TRUE) {\n # up to the top-level\n upViewport(0, recording=recording)\n downViewport(name, recording=recording)\n}\n\n# Depth of the current viewport\nvpDepth <- function() {\n pvp <- grid.Call(C_currentViewport)\n count <- 0\n while (!is.null(pvp$parent)) {\n pvp <- pvp$parent\n count <- count + 1\n }\n count\n}\n\npop.viewport <- function(n=1, recording=TRUE) {\n .Defunct(\"popViewport\")\n}\n\npopViewport <- function(n=1, recording=TRUE) {\n if (n < 0)\n stop(\"must pop at least one viewport\")\n if (n == 0)\n n <- vpDepth()\n if (n > 0) {\n grid.Call.graphics(C_unsetviewport, as.integer(n))\n # Record on the display list\n if (recording) {\n class(n) <- \"pop\"\n record(n)\n }\n }\n invisible()\n}\n\n# Rather than removing the viewport from the viewport stack (tree),\n# simply navigate up, leaving pushed viewports in place.\nupViewport <- function(n=1, recording=TRUE) {\n if (n < 0)\n stop(\"must navigate up at least one viewport\")\n if (n == 0) {\n n <- vpDepth()\n upPath <- current.vpPath()\n }\n if (n > 0) {\n path <- current.vpPath()\n upPath <- path[(depth(path) - n + 1):depth(path)]\n grid.Call.graphics(C_upviewport, as.integer(n))\n # Record on the display list\n if (recording) {\n class(n) <- \"up\"\n record(n)\n }\n }\n invisible(upPath)\n}\n\n# Return the full vpPath to the current viewport\ncurrent.vpPath <- function() {\n names <- NULL\n pvp <- grid.Call(C_currentViewport)\n while (!rootVP(pvp)) {\n names <- c(names, pvp$name)\n pvp <- pvp$parent\n }\n if (!is.null(names))\n vpPathFromVector(rev(names))\n else\n names\n}\n\n# Function to obtain the current viewport\ncurrent.viewport <- function() {\n # The system stores a pushedvp; the user should only\n # ever see normal viewports, so convert.\n vpFromPushedvp(grid.Call(C_currentViewport))\n}\n\n# Return the parent of the current viewport\n# (could be NULL)\ncurrent.parent <- function(n=1) {\n if (n < 1)\n stop(\"Invalid number of generations\")\n vp <- grid.Call(C_currentViewport)\n generation <- 1\n while (generation <= n) {\n if (is.null(vp))\n stop(\"Invalid number of generations\")\n vp <- vp$parent\n generation <- generation + 1\n }\n if (!is.null(vp))\n vpFromPushedvp(vp)\n else\n vp\n}\n\nvpListFromNode <- function(node) {\n vpListFromList(eapply(node$children, vpTreeFromNode, all.names=TRUE))\n}\n\nvpTreeFromNode <- function(node) {\n # If no children then just return viewport\n if (no.children(node$children))\n vpFromPushedvp(node)\n # Otherwise return vpTree\n else\n vpTree(vpFromPushedvp(node),\n vpListFromNode(node))\n}\n\n# Obtain the current viewport tree\n# Either from the current location in the tree down\n# or ALL of the tree\ncurrent.vpTree <- function(all=TRUE) {\n cpvp <- grid.Call(C_currentViewport)\n moving <- all && vpDepth() > 0\n if (moving) {\n savedpath <- current.vpPath()\n upViewport(0, recording=FALSE)\n cpvp <- grid.Call(C_currentViewport)\n }\n tree <- vpTreeFromNode(cpvp)\n if (moving) {\n downViewport(savedpath, recording=FALSE)\n }\n tree\n}\n\ncurrent.transform <- function() {\n grid.Call(C_currentViewport)$trans\n}\n\ncurrent.rotation <- function() {\n grid.Call(C_currentViewport)$rotation\n}\n\n# Call this function if you want the graphics device erased or moved\n# on to a new page. High-level plotting functions should call this.\n# NOTE however, that if you write a function which calls grid.newpage,\n# you should provide an argument to allow people to turn it off\n# so that they can use your function within a parent viewport\n# (rather than the whole device) if they want to.\ngrid.newpage <- function(recording=TRUE) {\n for (fun in getHook(\"before.grid.newpage\")) {\n if(is.character(fun)) fun <- get(fun)\n try(fun())\n }\n # NOTE that we do NOT do grid.Call here because we have to do\n # things slightly differently if grid.newpage is the first grid operation\n # on a new device\n .Call(C_newpagerecording)\n .Call(C_newpage)\n .Call(C_initGPar)\n .Call(C_initViewportStack)\n if (recording) {\n .Call(C_initDisplayList)\n grDevices:::recordPalette()\n for (fun in getHook(\"grid.newpage\")) {\n if(is.character(fun)) fun <- get(fun)\n try(fun())\n }\n }\n invisible()\n}\n\n###########\n# DISPLAY LIST FUNCTIONS\n###########\n\n# Keep a list of all drawing operations (since last grid.newpage()) so\n# that we can redraw upon edit.\n\ninc.display.list <- function() {\n display.list <- grid.Call(C_getDisplayList)\n dl.index <- grid.Call(C_getDLindex)\n dl.index <- dl.index + 1\n n <- length(display.list)\n # The \" - 1\" below is because dl.index is now stored internally\n # so is a C-style zero-based index rather than an R-style\n # 1-based index\n if (dl.index > (n - 1)) {\n temp <- display.list\n display.list <- vector(\"list\", n + 100L)\n display.list[1L:n] <- temp\n }\n grid.Call(C_setDisplayList, display.list)\n grid.Call(C_setDLindex, as.integer(dl.index))\n}\n\n# This will either ...\n# (i) turn on AND INITIALISE the display list or ...\n# (ii) turn off AND ERASE the display list\ngrid.display.list <- function(on=TRUE) {\n grid.Call(C_setDLon, as.logical(on))\n if (on) {\n grid.Call(C_setDisplayList, vector(\"list\", 100L))\n grid.Call(C_setDLindex, 0L)\n }\n else\n grid.Call(C_setDisplayList, NULL)\n}\n\nrecord <- function(x) {\n if (grid.Call(C_getDLon))\n UseMethod(\"record\")\n}\n\n# When there is a pop.viewport, the number of viewports popped\n# gets put on the display list\nrecord.default <- function(x) {\n if (!is.numeric(x))\n stop(\"invalid object inserted on the display list\")\n grid.Call(C_setDLelt, x)\n inc.display.list()\n}\n\nrecord.grob <- function(x) {\n grid.Call(C_setDLelt, x)\n inc.display.list()\n}\n\nrecord.viewport <- function(x) {\n grid.Call(C_setDLelt, x)\n inc.display.list()\n}\n\nrecord.vpPath <- function(x) {\n grid.Call(C_setDLelt, x)\n inc.display.list()\n}\n\n# This controls whether grid is using the graphics engine's display list\nengine.display.list <- function(on=TRUE) {\n grid.Call(C_setEngineDLon, as.logical(on))\n}\n\n# Rerun the grid DL\ngrid.refresh <- function() {\n draw.all()\n}\n\n# Call a function on each element of the grid display list\n# AND replace the element with the result\n# This is blood-curdlingly dangerous for the state of the\n# display list\n# Two token efforts at safety are made:\n# - generate all of the new elements first THEN assign them all\n# (so if there is an error in generating any one element\n# you don't end up with a trashed display list)\n# - check that the new element is either NULL or the same\n# class as the element it is replacing\ngrid.DLapply <- function(FUN, ...) {\n FUN <- match.fun(FUN)\n # Traverse DL and do something to each entry\n# gridDL <- grid.Call(C_getDisplayList)\n gridDLindex <- grid.Call(C_getDLindex)\n newDL <- vector(\"list\", gridDLindex)\n for (i in 1:(gridDLindex - 1)) {\n elt <- grid.Call(C_getDLelt, i)\n newElt <- FUN(elt, ...)\n if (!(is.null(newElt) || inherits(newElt, class(elt))))\n stop(\"invalid modification of the display list\")\n newDL[[i]] <- newElt\n }\n for (i in 1:(gridDLindex - 1)) {\n grid.Call(C_setDLindex, i)\n grid.Call(C_setDLelt, newDL[[i]])\n }\n grid.Call(C_setDLindex, gridDLindex)\n}\n\n# Wrapper for .Call and .Call.graphics\n# Used to make sure that grid-specific initialisation occurs just before\n# the first grid graphics output OR the first querying of grid state\n# (on the current device)\n# The general rule is you should use these rather than .Call or\n# .Call.graphics unless you have a good reason and you know what\n# you are doing -- this will be a bit of overkill, but is for safety\ngrid.Call <- function(fnname, ...) {\n .Call(C_gridDirty)\n .Call(dontCheck(fnname), ...) # skip code analysis checks, keep runtime checks\n}\n\ngrid.Call.graphics <- function(fnname, ...) {\n # Only record graphics operations on the graphics engine's display\n # list if the engineDLon flag is set\n engineDLon <- grid.Call(C_getEngineDLon)\n if (engineDLon) {\n # NOTE that we need a .Call.graphics(C_gridDirty) so that\n # the first thing on the engine display list is a dirty\n # operation; this is necessary in case the display list is\n # played on another device (e.g., via replayPlot() or dev.copy())\n .Call.graphics(C_gridDirty)\n result <- .Call.graphics(dontCheck(fnname), ...)\n } else {\n .Call(C_gridDirty)\n result <- .Call(dontCheck(fnname), ...)\n }\n result\n}\n\n# A call to recordGraphics() outside of [pre|post]drawDetails methods\n# will not record the expr on the grid DL.\n# If a user REALLY wants to call recordGraphics(), they should use\n# grid.record() instead\ndrawDetails.recordedGrob <- function(x, recording) {\n eval(x$expr, x$list, getNamespace(\"grid\"))\n}\n\ngrid.record <- function(expr, list,\n name=NULL, gp=NULL, vp=NULL) {\n grid.draw(grob(expr=substitute(expr), list=list,\n name=name, gp=gp, vp=vp, cl=\"recordedGrob\"))\n}\n\nrecordGrob <- function(expr, list,\n name=NULL, gp=NULL, vp=NULL) {\n grob(expr=substitute(expr), list=list,\n name=name, gp=gp, vp=vp, cl=\"recordedGrob\")\n}\n\n# Must only generate a grob, not modify drawing context\nmakeContent.delayedgrob <- function(x) {\n grob <- eval(x$expr, x$list, getNamespace(\"grid\"))\n if (is.grob(grob)) {\n children <- gList(grob)\n } else if (is.gList(grob)) {\n children <- grob\n } else {\n stop(\"'expr' must return a grob or gList\")\n }\n x <- setChildren(x, children)\n x\n}\n\ngrid.delay <- function(expr, list,\n name=NULL, gp=NULL, vp=NULL) {\n grid.draw(gTree(expr=substitute(expr), list=list,\n name=name, gp=gp, vp=vp, cl=\"delayedgrob\"))\n}\n\ndelayGrob <- function(expr, list,\n name=NULL, gp=NULL, vp=NULL) {\n gTree(expr=substitute(expr), list=list,\n name=name, gp=gp, vp=vp, cl=\"delayedgrob\")\n}\n","normpath":"/Users/thomas/Dropbox/GitHub/grid/R/grid.R"},{"filename":"grid/R/unit.R","content":"# File src/library/grid/R/unit.R\n# Part of the R package, https://www.R-project.org\n#\n# Copyright (C) 1995-2016 The R Core Team\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# A copy of the GNU General Public License is available at\n# https://www.R-project.org/Licenses/\n\n\n# Create an object of class \"unit\"\n# Simple units are of the form 'unit(1, \"cm\")' or 'unit(1L:3, \"cm\")' or\n# 'unit(c(1,3,6), c(\"cm\", \"inch\", \"npc\"))'\n# More complicated units are of the form 'unit(1, \"string\", \"a string\")'\n# or 'unit(1, \"grob\", a.grob)'\nunit <- function(x, units, data = NULL) {\n x <- as.numeric(x)\n units <- as.character(units)\n if (length(x) == 0 || length(units) == 0)\n stop(\"'x' and 'units' must have length > 0\")\n if (is.null(data)) {\n \tdata <- list(NULL)\n } else if (is.character(data) || is.language(data) ||\n \t\t is.grob(data) || inherits(data, \"gPath\")) {\n \tdata <- list(data)\n }\n .Call(C_constructUnits, x, data, units)\n}\n\nsingle_unit <- function(x, data, valid_units) {\n `class<-`(list(\n list(\n x,\n data,\n valid_units\n )\n ), 'unit')\n}\ngrid.convert <- function(x, unitTo, axisFrom=\"x\", typeFrom=\"location\",\n axisTo=axisFrom, typeTo=typeFrom,\n valueOnly=FALSE) {\n .Defunct(\"convertUnit\")\n}\n\nconvertUnit <- function(x, unitTo, axisFrom=\"x\", typeFrom=\"location\",\n axisTo=axisFrom, typeTo=typeFrom,\n valueOnly=FALSE) {\n whatfrom <- match(axisFrom, c(\"x\", \"y\")) - 1L +\n 2L*(match(typeFrom, c(\"location\", \"dimension\")) - 1L)\n whatto <- match(axisTo, c(\"x\", \"y\")) - 1L +\n 2L*(match(typeTo, c(\"location\", \"dimension\")) - 1L)\n if (!is.unit(x))\n stop(\"'x' argument must be a unit object\")\n if (is.na(whatfrom) || is.na(whatto))\n stop(\"invalid 'axis' or 'type'\")\n value <- grid.Call(C_convert, x, as.integer(whatfrom),\n as.integer(whatto), valid.units(unitTo))\n if (!valueOnly)\n unit(value, unitTo)\n else\n value\n}\n\ngrid.convertX <- function(x, unitTo, valueOnly=FALSE) {\n .Defunct(\"convertX\")\n}\n\nconvertX <- function(x, unitTo, valueOnly=FALSE) {\n convertUnit(x, unitTo, \"x\", \"location\", \"x\", \"location\",\n valueOnly=valueOnly)\n}\n\ngrid.convertY <- function(x, unitTo, valueOnly=FALSE) {\n .Defunct(\"convertY\")\n}\n\nconvertY <- function(x, unitTo, valueOnly=FALSE) {\n convertUnit(x, unitTo, \"y\", \"location\", \"y\", \"location\",\n valueOnly=valueOnly)\n}\n\ngrid.convertWidth <- function(x, unitTo, valueOnly=FALSE) {\n .Defunct(\"convertWidth\")\n}\n\nconvertWidth <- function(x, unitTo, valueOnly=FALSE) {\n convertUnit(x, unitTo, \"x\", \"dimension\", \"x\", \"dimension\",\n valueOnly=valueOnly)\n}\n\ngrid.convertHeight <- function(x, unitTo, valueOnly=FALSE) {\n .Defunct(\"convertHeight\")\n}\n\nconvertHeight <- function(x, unitTo, valueOnly=FALSE) {\n convertUnit(x, unitTo, \"y\", \"dimension\", \"y\", \"dimension\",\n valueOnly=valueOnly)\n}\n\nconvertNative <- function(unit, dimension=\"x\", type=\"location\") {\n .Defunct(\"convertUnit\")\n}\n\ndeviceLoc <- function(x, y, valueOnly=FALSE) {\n result <- grid.Call(C_devLoc, x, y)\n names(result) <- c(\"x\", \"y\")\n if (!valueOnly)\n list(x=unit(result$x, \"in\"), y=unit(result$y, \"in\"))\n else\n result\n}\n\ndeviceDim <- function(w, h, valueOnly=FALSE) {\n result <- grid.Call(C_devDim, w, h)\n names(result) <- c(\"w\", \"h\")\n if (!valueOnly)\n list(w=unit(result$w, \"in\"), h=unit(result$h, \"in\"))\n else\n result\n}\n\n# This is like the \"convert\" functions: it evaluates units (immediately)\n# in the current context\ncalcStringMetric <- function(text) {\n # .Call rather than .Call.graphics because it is a one-off calculation\n metric <- grid.Call(C_stringMetric, text)\n names(metric) <- c(\"ascent\", \"descent\", \"width\")\n metric\n}\n\n# NOTE: the order of the strings in these conversion functions must\n# match the order of the enums in ../src/grid.h\n# AND in ../src/unit.c (see UnitTable)\n# NOTE: ../src/unit.c also allows some pseudonyms (e.g., \"in\" for \"inches\")\n.grid.unit.list <- c(\"npc\", \"cm\", \"inches\", \"lines\",\n \"native\", \"null\", \"snpc\", \"mm\",\n \"points\", \"picas\", \"bigpts\",\n \"dida\", \"cicero\", \"scaledpts\",\n \"strwidth\", \"strheight\",\n \"strascent\", \"strdescent\",\n \"vplayoutwidth\", \"vplayoutheight\", \"char\",\n \"grobx\", \"groby\", \"grobwidth\", \"grobheight\",\n \"grobascent\", \"grobdescent\",\n \"mylines\", \"mychar\", \"mystrwidth\", \"mystrheight\",\n \"sum\", \"min\", \"max\")\n\nvalid.units <- function(units) {\n .Call(C_validUnits, units)\n}\n\n# Printing, formating, and coercion\nunitDesc <- function(x, format = FALSE, ...) {\n amount <- if (format) format(x[[1]], ...) else x[[1]]\n unit <- units[as.character(x[[3]])]\n if (unit %in% c('sum', 'min', 'max')) {\n paste0(if (amount == 1) '' else paste0(amount, '*'),\n unit, '(', paste(lapply(x[[2]], unitDesc, format = format, ...), collapse = ', '), ')')\n } else {\n paste0(amount, unit)\n }\n}\nas.character.unit <- function(x, ...) {\n vapply(as.unit(x), unitDesc, character(1))\n}\nas.double.unit <- function(x, ...) {\n vapply(unclass(x), `[[`, numeric(1), 1L)\n}\nas.vector.unit <- as.double.unit\nformat.unit <- function(x, ...) {\n vapply(as.unit(x), unitDesc, character(1), format = TRUE, ...)\n}\nprint.unit <- function(x, ...) {\n print(as.character(x), quote = FALSE, ...)\n invisible(x)\n}\nas.double.simpleUnit <- function(x, ...) as.double(unclass(x), ...)\nas.vector.simpleUnit <- function(x, ...) as.double(unclass(x), ...)\n\nis.unit <- function(x) inherits(x, 'unit')\nis.simpleUnit <- function(x) inherits(x, 'simpleUnit')\nidenticalUnits <- function(x) .Call(C_conformingUnits, x)\n\nas.unit <- function(x) {\n\t.Call(C_asUnit, x)\n}\n\nstr.unit <- function(object, ...) {\n object <- as.unit(object)\n for (i in seq_along(object)) {\n unit <- object[[i]]\n cat('[[', i, ']] Amount: ', unit[[1]], '; Unit: ', units[[as.character(unit[[3]])]], '; Data: ', if (is.null(unit[[2]])) 'none' else as.character(unit[[2]]), '\\n', sep = '')\n }\n}\n#########################\n# UNIT ARITHMETIC STUFF\n#########################\n\nSummary.unit <- function(..., na.rm=FALSE) {\n units <- list(...)\n ok <- switch(.Generic, \"sum\" = 201L, \"min\" = 202L, \"max\" = 203L, 0L)\n if (ok == 0)\n \tstop(gettextf(\"'Summary' function '%s' not meaningful for units\",\n \t\t\t\t .Generic), domain = NA)\n # Optimise for simple units\n identicalSimple <- identicalUnits(units)\n if (!is.null(identicalSimple)) {\n \tres <- switch(\n \t\t.Generic,\n \t\t\"sum\" = sum(unlist(units)),\n \t\t\"min\" = min(unlist(units)),\n \t\t\"max\" = max(unlist(units)),\n \t)\n \treturn(`attributes<-`(res, list(\n \t\tclass = c(\"simpleUnit\", \"unit\"), \n \t\tunit = identicalSimple\n \t)))\n }\n # NOTE that this call to unit.c makes sure that arg1 is\n # a single unit object\n x <- unlist(lapply(units, as.unit), recursive = FALSE)\n \n matchUnits <- .Call(C_matchUnit, x, ok)\n nMatches <- length(matchUnits)\n if (nMatches != 0) {\n data <- lapply(x, `[[`, 2L)\n amount <- vapply(x, .subset2, numeric(1), 1L)[matchUnits]\n matchData <- unlist(data[matchUnits], recursive = FALSE)\n for (i in seq_along(amount)) {\n if (amount[i] != 1) matchData[[i]] <- matchData[[i]] * amount[i]\n }\n if (nMatches == length(x)) {\n data <- matchData\n } else {\n data <- c(x[-matchUnits], matchData)\n }\n } else {\n data <- x\n }\n single_unit(1, `class<-`(data, 'unit'), ok)\n}\nOps.unit <- function(e1, e2) {\n ok <- switch(.Generic, \"+\"=TRUE, \"-\"=TRUE, \"*\"=TRUE, \"/\"=TRUE, FALSE)\n if (!ok)\n stop(gettextf(\"operator '%s' not meaningful for units\", .Generic),\n domain = NA)\n # Unary\n if (missing(e2)) {\n if (.Generic %in% c('*', '/')) stop(\"'*' or '/' cannot be used as a unary operator\")\n if (.Generic == '-') {\n if (is.simpleUnit(e1)) {\n \tattr <- attributes(e1)\n \te1 <- -as.vector(e1)\n \tattributes(e1) <- attr\n } else {\n \te1 <- .Call(C_flipUnits, e1)\n }\n }\n return(e1)\n }\n # Multiply\n if (.Generic %in% c(\"*\", \"/\")) {\n # can only multiply a unit by a scalar\n if (nzchar(.Method[1L])) {\n if (nzchar(.Method[2L])) stop(\"only one operand may be a unit\")\n if (!is.numeric(e2)) stop(\"non-unit operand must be numeric\")\n unit <- e1\n value <- e2\n } else {\n if (!is.numeric(e1)) stop(\"non-unit operand must be numeric\")\n if (.Generic == \"/\") stop(\"can't divide with a unit\")\n \tunit <- e2\n \tvalue <- e1\n }\n \tif (.Generic == \"/\") value <- 1 / value\n \tif (is.simpleUnit(unit)) {\n \t\tattr <- attributes(unit)\n \t\tunit <- value * as.vector(unit)\n \t\tattributes(unit) <- attr\n \t} else {\n \t\tunit <- .Call(C_multUnits, unit, value)\n \t}\n \treturn(unit)\n }\n # Add and sub remains\n if (!nzchar(.Method[1L]) && !nzchar(.Method[2L])) {\n stop(\"both operands must be units\")\n }\n if ((is.simpleUnit(e1) && is.simpleUnit(e2)) && (attr(e1, 'unit') == attr(e2, 'unit'))) {\n \tattr <- attributes(e1)\n \tunit <- switch(\n \t\t.Generic, \n \t\t\"-\" = as.vector(e1) - as.vector(e2), \n \t\t\"+\" = as.vector(e1) + as.vector(e2)\n \t)\n \treturn(`attributes<-`(unit, attr))\n }\n # Convert subtraction to addition\n if (.Generic == '-') {\n \te2 <- -e2\n }\n .Call(C_addUnits, as.unit(e1), as.unit(e2))\n}\n\nunit.pmin <- function(...) {\n pSummary(..., op = 'min')\n}\n\nunit.pmax <- function(...) {\n pSummary(..., op = 'max')\n}\n\nunit.psum <- function(...) {\n pSummary(..., op = 'sum')\n}\n\npSummary <- function(..., op) {\n units <- list(...)\n # optimisation for simple units\n identicalSimple <- identicalUnits(units)\n if (!is.null(identicalSimple)) {\n \tres <- switch(\n \t\top,\n \t\t\"sum\" = Reduce(`+`, lapply(units, unclass)),\n \t\t\"min\" = do.call(pmin, lapply(units, unclass)),\n \t\t\"max\" = do.call(pmax, lapply(units, unclass))\n \t)\n \treturn(`attributes<-`(res, list(\n \t\tclass = c(\"simpleUnit\", \"unit\"), \n \t\tunit = identicalSimple\n \t)))\n }\n op <- switch(op, sum = 201L, min = 202L, max = 203L)\n .Call(C_summaryUnits, units, op)\n}\n\n#########################\n# Unit subsetting\n#########################\n\n# The idea of the \"top\" argument is to allow the function to\n# know if it has been called from the command-line or from\n# a previous (recursive) call to \"[.unit\" or \"[.unit.arithmetic\"\n# this allows recycling beyond the end of the unit object\n# except at the top level\n\n`[.unit` <- function(x, index, top = TRUE) {\n attr <- attributes(x)\n x <- unclass(x)\n n <- length(x)\n if (is.numeric(index) && any(index > n)) {\n if (top) stop('index out of bounds (\"unit\" subsetting)', call. = FALSE)\n index <- (seq_len(n)[index] - 1L) %% n + 1L\n }\n x <- x[index]\n `attributes<-`(x, attr)\n}\n`[<-.unit` <- function(x, i, value) {\n if (!is.unit(value)) stop('value must be a unit object')\n attr <- attributes(x)\n simpleResult <- FALSE\n if (is.simpleUnit(x)) {\n if (!(is.simpleUnit(value) && attr(x, 'unit') == attr(value, 'unit'))) {\n x <- as.unit(x)\n value <- as.unit(value)\n } else {\n simpleResult <- TRUE\n }\n } else {\n value <- as.unit(value)\n }\n x <- unclass(x)\n x[i] <- value\n if (simpleResult) {\n `attributes<-`(x, attr)\n } else {\n `class<-`(x, \"unit\")\n }\n}\n\n#########################\n# \"c\"ombining unit objects\n#########################\n\n# NOTE that I have not written methods for c()\n# because method dispatch occurs on the first argument to\n# \"c\" so c(unit(...), ...) would come here, but c(whatever, unit(...), ...)\n# would go who-knows-where.\n# A particularly nasty example is: c(1, unit(1, \"npc\")) which will\n# produce the same result as c(1, 1)\n# Same problem for trying to control c(<unit>, <unit.arithmetic>)\n# versus c(<unit.arithmetic>, <unit>), etc ...\n\n# If any arguments are unit.arithmetic or unit.list, then the result will be\n# unit.list\n\nunit.c <- function(..., check = TRUE) {\n x <- list(...)\n identicalSimple <- identicalUnits(x)\n if (!is.null(identicalSimple)) {\n \t`attributes<-`(unlist(x), list(class = c('simpleUnit', 'unit'), unit = identicalSimple))\n } else {\n \t`class<-`(unlist(lapply(x, as.unit), recursive = FALSE), 'unit')\n }\n}\n\n#########################\n# rep'ing unit objects\n#########################\n\nrep.unit <- function(x, times = 1, length.out = NA, each = 1, ...) {\n index <- rep(seq_along(x), times = times, length.out = length.out, each = each)\n x[index]\n}\n\n# Vestige from when rep() was not generic\nunit.rep <- function (x, ...)\n{\n warning(\"'unit.rep' has been deprecated in favour of a unit method for the generic rep function\", domain = NA)\n rep(x, ...)\n}\n\n#########################\n# Length of unit objects\n#########################\n\n# Vestige of when length was not generic and a custom length method was needed\nunit.length <- function(unit) {\n warning(\"'unit.length' has been deprecated in favour of a unit method for the generic length function\", domain = NA)\n length(unit)\n}\n\n#########################\n# Convenience functions\n#########################\n\nstringWidth <- function(string) {\n n <- length(string)\n if (is.language(string)) {\n data <- vector(\"list\", n)\n for (i in 1L:n)\n data[[i]] <- string[i]\n } else {\n data <- as.list(as.character(string))\n }\n unit(rep_len(1, n), \"strwidth\", data=data)\n}\n\nstringHeight <- function(string) {\n n <- length(string)\n if (is.language(string)) {\n data <- vector(\"list\", n)\n for (i in 1L:n)\n data[[i]] <- string[i]\n } else {\n data <- as.list(as.character(string))\n }\n unit(rep_len(1, n), \"strheight\", data=data)\n}\n\nstringAscent <- function(string) {\n n <- length(string)\n if (is.language(string)) {\n data <- vector(\"list\", n)\n for (i in 1L:n)\n data[[i]] <- string[i]\n } else {\n data <- as.list(as.character(string))\n }\n unit(rep_len(1, n), \"strascent\", data=data)\n}\n\nstringDescent <- function(string) {\n n <- length(string)\n if (is.language(string)) {\n data <- vector(\"list\", n)\n for (i in 1L:n)\n data[[i]] <- string[i]\n } else {\n data <- as.list(as.character(string))\n }\n unit(rep_len(1, n), \"strdescent\", data=data)\n}\n\nconvertTheta <- function(theta) {\n if (is.character(theta))\n # Allow some aliases for common angles\n switch(theta,\n east=0,\n north=90,\n west=180,\n south=270,\n stop(\"invalid 'theta'\"))\n else\n # Ensure theta in [0, 360)\n theta <- as.numeric(theta) %% 360\n}\n\n# grobX\ngrobX <- function(x, theta) {\n UseMethod(\"grobX\", x)\n}\n\ngrobX.grob <- function(x, theta) {\n unit(convertTheta(theta), \"grobx\", data=x)\n}\n\ngrobX.gList <- function(x, theta) {\n unit(rep(convertTheta(theta), length(x)), \"grobx\", data=x)\n}\n\ngrobX.gPath <- function(x, theta) {\n unit(convertTheta(theta), \"grobx\", data=x)\n}\n\ngrobX.default <- function(x, theta) {\n unit(convertTheta(theta), \"grobx\", data=gPath(as.character(x)))\n}\n\n# grobY\ngrobY <- function(x, theta) {\n UseMethod(\"grobY\", x)\n}\n\ngrobY.grob <- function(x, theta) {\n unit(convertTheta(theta), \"groby\", data=x)\n}\n\ngrobY.gList <- function(x, theta) {\n unit(rep(convertTheta(theta), length(x)), \"groby\", data=x)\n}\n\ngrobY.gPath <- function(x, theta) {\n unit(convertTheta(theta), \"groby\", data=x)\n}\n\ngrobY.default <- function(x, theta) {\n unit(convertTheta(theta), \"groby\", data=gPath(as.character(x)))\n}\n\n# grobWidth\ngrobWidth <- function(x) {\n UseMethod(\"grobWidth\")\n}\n\ngrobWidth.grob <- function(x) {\n unit(1, \"grobwidth\", data=x)\n}\n\ngrobWidth.gList <- function(x) {\n unit(rep_len(1, length(x)), \"grobwidth\", data=x)\n}\n\ngrobWidth.gPath <- function(x) {\n unit(1, \"grobwidth\", data=x)\n}\n\ngrobWidth.default <- function(x) {\n unit(1, \"grobwidth\", data=gPath(as.character(x)))\n}\n\n# grobHeight\ngrobHeight <- function(x) {\n UseMethod(\"grobHeight\")\n}\n\ngrobHeight.grob <- function(x) {\n unit(1, \"grobheight\", data=x)\n}\n\ngrobHeight.gList <- function(x) {\n unit(rep_len(1, length(x)), \"grobheight\", data=x)\n}\n\ngrobHeight.gPath <- function(x) {\n unit(1, \"grobheight\", data=x)\n}\n\ngrobHeight.default <- function(x) {\n unit(1, \"grobheight\", data=gPath(as.character(x)))\n}\n\n# grobAscent\ngrobAscent <- function(x) {\n UseMethod(\"grobAscent\")\n}\n\ngrobAscent.grob <- function(x) {\n unit(1, \"grobascent\", data=x)\n}\n\ngrobAscent.gList <- function(x) {\n unit(rep_len(1, length(x)), \"grobascent\", data=x)\n}\n\ngrobAscent.gPath <- function(x) {\n unit(1, \"grobascent\", data=x)\n}\n\ngrobAscent.default <- function(x) {\n unit(1, \"grobascent\", data=gPath(as.character(x)))\n}\n\n# grobDescent\ngrobDescent <- function(x) {\n UseMethod(\"grobDescent\")\n}\n\ngrobDescent.grob <- function(x) {\n unit(1, \"grobdescent\", data=x)\n}\n\ngrobDescent.gList <- function(x) {\n unit(rep_len(1, length(x)), \"grobdescent\", data=x)\n}\n\ngrobDescent.gPath <- function(x) {\n unit(1, \"grobdescent\", data=x)\n}\n\ngrobDescent.default <- function(x) {\n unit(1, \"grobdescent\", data=gPath(as.character(x)))\n}\n\n#########################\n# Function to decide which values in a unit are \"absolute\" (do not depend\n# on parent's drawing context or size)\n#########################\n\nabsolute.units <- function(unit) {\n .Call(C_absoluteUnits, unit)\n}\n\n# Lookup table for unit ids\n# This table MUST correspond to the enumeration in grid.h\nunits <- list(\n '0' = \"npc\",\n '1' = \"cm\",\n '2' = \"inches\",\n '3' = \"lines\",\n '4' = \"native\",\n '5' = \"null\",\n '6' = \"snpc\",\n '7' = \"mm\",\n '8' = \"points\",\n '9' = \"picas\",\n '10' = \"bigpts\",\n '11' = \"dida\",\n '12' = \"cicero\",\n '13' = \"scaledpts\",\n '14' = \"strwidth\",\n '15' = \"strheight\",\n '16' = \"strascent\",\n '17' = \"strdescent\",\n '18' = \"char\",\n '19' = \"grobx\",\n '20' = \"groby\",\n '21' = \"grobwidth\",\n '22' = \"grobheight\",\n '23' = \"grobascent\",\n '24' = \"grobdescent\",\n\n '103' = \"mylines\",\n '104' = \"mychar\",\n '105' = \"mystrwidth\",\n '106' = \"mystrheight\",\n\n '201' = \"sum\",\n '202' = \"min\",\n '203' = \"max\",\n\n '1001' = \"centimetre\",\n '1001' = \"centimetres\",\n '1001' = \"centimeter\",\n '1001' = \"centimeters\",\n '1002' = \"in\",\n '1002' = \"inch\",\n '1003' = \"line\",\n '1007' = \"millimetre\",\n '1007' = \"millimetres\",\n '1007' = \"millimeter\",\n '1007' = \"millimeters\",\n '1008' = \"point\",\n '1008' = \"pt\"\n)","normpath":"/Users/thomas/Dropbox/GitHub/grid/R/unit.R"},{"filename":"ggplot2/R/margins.R","content":"#' @param t,r,b,l Dimensions of each margin. (To remember order, think trouble).\n#' @param unit Default units of dimensions. Defaults to \"pt\" so it\n#' can be most easily scaled with the text.\n#' @rdname element\n#' @export\nmargin <- function(t = 0, r = 0, b = 0, l = 0, unit = \"pt\") {\n u <- unit(c(t, r, b, l), unit)\n class(u) <- c(\"margin\", class(u))\n u\n}\nis.margin <- function(x) {\n inherits(x, \"margin\")\n}\n\nmargin_height <- function(grob, margins) {\n if (is.zero(grob)) return(unit(0, \"cm\"))\n\n grobHeight(grob) + margins[1] + margins[3]\n}\n\nmargin_width <- function(grob, margins) {\n if (is.zero(grob)) return(unit(0, \"cm\"))\n\n grobWidth(grob) + margins[2] + margins[4]\n}\n\n#' Text grob, height, and width\n#'\n#' This function returns a list containing a text grob (and, optionally,\n#' debugging grobs) and the height and width of the text grob.\n#'\n#' @param label Either `NULL`, a string (length 1 character vector), or\n#' an expression.\n#' @param x,y x and y locations where the text is to be placed. If `x` and `y`\n#' are `NULL`, `hjust` and `vjust` are used to determine the location.\n#' @inheritParams titleGrob\n#'\n#' @noRd\ntitle_spec <- function(label, x, y, hjust, vjust, angle, gp = gpar(),\n debug = FALSE) {\n\n if (is.null(label)) return(zeroGrob())\n\n # We rotate the justifiation values to obtain the correct x and y reference point,\n # since hjust and vjust are applied relative to the rotated text frame in textGrob\n just <- rotate_just(angle, hjust, vjust)\n\n n <- max(length(x), length(y), 1)\n x <- x %||% unit(rep(just$hjust, n), \"npc\")\n y <- y %||% unit(rep(just$vjust, n), \"npc\")\n\n text_grob <- textGrob(\n label,\n x,\n y,\n hjust = hjust,\n vjust = vjust,\n rot = angle,\n gp = gp\n )\n\n # The grob dimensions don't include the text descenders, so these need to be added\n # manually. Because descentDetails calculates the actual descenders of the specific\n # text label, which depends on the label content, we replace the label with one that\n # has the common letters with descenders. This guarantees that the grob always has\n # the same height regardless of whether the text actually contains letters with\n # descenders or not. The same happens automatically with ascenders already.\n descent <- font_descent(gp$fontfamily, gp$fontface, gp$fontsize, gp$cex)\n\n # Use trigonometry to calculate grobheight and width for rotated grobs. This is only\n # exactly correct when vjust = 1. We need to take the absolute value so we don't make\n # the grob smaller when it's flipped over.\n text_height <- unit(1, \"grobheight\", text_grob) + abs(cos(angle / 180 * pi)) * descent\n text_width <- unit(1, \"grobwidth\", text_grob) + abs(sin(angle / 180 * pi)) * descent\n\n if (isTRUE(debug)) {\n children <- gList(\n rectGrob(gp = gpar(fill = \"cornsilk\", col = NA)),\n pointsGrob(x, y, pch = 20, gp = gpar(col = \"gold\")),\n text_grob\n )\n } else {\n children <- gList(text_grob)\n }\n\n list(\n text_grob = children,\n text_height = text_height,\n text_width = text_width\n )\n}\n\n#' Add margins\n#'\n#' Given a text grob, `add_margins()` adds margins around the grob in the\n#' directions determined by `margin_x` and `margin_y`.\n#'\n#' @param grob Text grob to add margins to.\n#' @param height,width Usually the height and width of the text grob. Passed as\n#' separate arguments from the grob itself because in the special case of\n#' facet strip labels each set of strips should share the same height and\n#' width, even if the labels are of different length.\n#' @inheritParams titleGrob\n#'\n#' @noRd\nadd_margins <- function(grob, height, width, margin = NULL,\n gp = gpar(), margin_x = FALSE, margin_y = FALSE) {\n\n if (is.null(margin)) {\n margin <- margin(0, 0, 0, 0)\n }\n\n if (margin_x && margin_y) {\n widths <- unit.c(margin[4], width, margin[2])\n heights <- unit.c(margin[1], height, margin[3])\n\n vp <- viewport(\n layout = grid.layout(3, 3, heights = heights, widths = widths),\n gp = gp\n )\n child_vp <- viewport(layout.pos.row = 2, layout.pos.col = 2)\n } else if (margin_x) {\n widths <- unit.c(margin[4], width, margin[2])\n vp <- viewport(layout = grid.layout(1, 3, widths = widths), gp = gp)\n child_vp <- viewport(layout.pos.col = 2)\n\n heights <- unit(1, \"null\")\n } else if (margin_y) {\n heights <- unit.c(margin[1], height, margin[3])\n\n vp <- viewport(layout = grid.layout(3, 1, heights = heights), gp = gp)\n child_vp <- viewport(layout.pos.row = 2)\n\n widths <- unit(1, \"null\")\n } else {\n widths <- width\n heights <- height\n return(\n gTree(\n children = grob,\n widths = widths,\n heights = heights,\n cl = \"titleGrob\"\n )\n )\n }\n\n gTree(\n children = grob,\n vp = vpTree(vp, vpList(child_vp)),\n widths = widths,\n heights = heights,\n cl = \"titleGrob\"\n )\n}\n\n#' Create a text grob with the proper location and margins\n#'\n#' `titleGrob()` is called when creating titles and labels for axes, legends,\n#' and facet strips.\n#'\n#' @param label Text to place on the plot. These maybe axis titles, axis labels,\n#' facet strip titles, etc.\n#' @param x,y x and y locations where the text is to be placed.\n#' @param hjust,vjust Horizontal and vertical justification of the text.\n#' @param angle Angle of rotation of the text.\n#' @param gp Additional graphical parameters in a call to `gpar()`.\n#' @param margin Margins around the text. See [margin()] for more\n#' details.\n#' @param margin_x,margin_y Whether or not to add margins in the x/y direction.\n#' @param debug If `TRUE`, aids visual debugging by drawing a solid\n#' rectangle behind the complete text area, and a point where each label\n#' is anchored.\n#'\n#' @noRd\ntitleGrob <- function(label, x, y, hjust, vjust, angle = 0, gp = gpar(),\n margin = NULL, margin_x = FALSE, margin_y = FALSE,\n debug = FALSE) {\n\n if (is.null(label))\n return(zeroGrob())\n\n # Get text grob, text height, and text width\n grob_details <- title_spec(\n label,\n x = x,\n y = y,\n hjust = hjust,\n vjust = vjust,\n angle = angle,\n gp = gp,\n debug = debug\n )\n\n add_margins(\n grob = grob_details$text_grob,\n height = grob_details$text_height,\n width = grob_details$text_width,\n gp = gp,\n margin = margin,\n margin_x = margin_x,\n margin_y = margin_y\n )\n}\n\n#' @export\nwidthDetails.titleGrob <- function(x) {\n sum(x$widths)\n}\n\n#' @export\nheightDetails.titleGrob <- function(x) {\n sum(x$heights)\n}\n\n#' Justifies a grob within a larger drawing area\n#'\n#' `justify_grobs()` can be used to take one or more grobs and draw them justified inside a larger\n#' drawing area, such as the cell in a gtable. It is needed to correctly place [`titleGrob`]s\n#' with margins.\n#'\n#' @param grobs The single grob or list of grobs to justify.\n#' @param x,y x and y location of the reference point relative to which justification\n#' should be performed. If `NULL`, justification will be done relative to the\n#' enclosing drawing area (i.e., `x = hjust` and `y = vjust`).\n#' @param hjust,vjust Horizontal and vertical justification of the grob relative to `x` and `y`.\n#' @param int_angle Internal angle of the grob to be justified. When justifying a text\n#' grob with rotated text, this argument can be used to make `hjust` and `vjust` operate\n#' relative to the direction of the text.\n#' @param debug If `TRUE`, aids visual debugging by drawing a solid\n#' rectangle behind the complete grob area.\n#'\n#' @noRd\njustify_grobs <- function(grobs, x = NULL, y = NULL, hjust = 0.5, vjust = 0.5,\n int_angle = 0, debug = FALSE) {\n if (!inherits(grobs, \"grob\")) {\n if (is.list(grobs)) {\n return(lapply(grobs, justify_grobs, x, y, hjust, vjust, int_angle, debug))\n }\n else {\n stop(\"need individual grob or list of grobs as argument.\")\n }\n }\n\n if (inherits(grobs, \"zeroGrob\")) {\n return(grobs)\n }\n\n # adjust hjust and vjust according to internal angle\n just <- rotate_just(int_angle, hjust, vjust)\n\n x <- x %||% unit(just$hjust, \"npc\")\n y <- y %||% unit(just$vjust, \"npc\")\n\n\n if (isTRUE(debug)) {\n children <- gList(\n rectGrob(gp = gpar(fill = \"lightcyan\", col = NA)),\n grobs\n )\n }\n else {\n children = gList(grobs)\n }\n\n\n result_grob <- gTree(\n children = children,\n vp = viewport(\n x = x,\n y = y,\n width = grobWidth(grobs),\n height = grobHeight(grobs),\n just = unlist(just)\n )\n )\n\n\n if (isTRUE(debug)) {\n #cat(\"x, y:\", c(x, y), \"\\n\")\n #cat(\"E - hjust, vjust:\", c(hjust, vjust), \"\\n\")\n grobTree(\n result_grob,\n pointsGrob(x, y, pch = 20, gp = gpar(col = \"mediumturquoise\"))\n )\n } else {\n result_grob\n }\n}\n\n\n#' Rotate justification parameters counter-clockwise\n#'\n#' @param angle angle of rotation, in degrees\n#' @param hjust horizontal justification\n#' @param vjust vertical justification\n#' @return A list with two components, `hjust` and `vjust`, containing the rotated hjust and vjust values\n#'\n#' @noRd\nrotate_just <- function(angle, hjust, vjust) {\n ## Ideally we would like to do something like the following commented-out lines,\n ## but it currently yields unexpected results for angles other than 0, 90, 180, 270.\n ## Problems arise in particular in cases where the horizontal and the vertical\n ## alignment model differ, for example, where horizontal alignment is relative to a\n ## point but vertical alignment is relative to an interval. This case arises for\n ## x and y axis tick labels.\n ##\n ## For more details, see: https://github.com/tidyverse/ggplot2/issues/2653\n\n # # convert angle to radians\n #rad <- (angle %||% 0) * pi / 180\n #\n #hnew <- cos(rad) * hjust - sin(rad) * vjust + (1 - cos(rad) + sin(rad)) / 2\n #vnew <- sin(rad) * hjust + cos(rad) * vjust + (1 - cos(rad) - sin(rad)) / 2\n\n angle <- (angle %||% 0) %% 360\n if (0 <= angle & angle < 90) {\n hnew <- hjust\n vnew <- vjust\n } else if (90 <= angle & angle < 180) {\n hnew <- 1 - vjust\n vnew <- hjust\n } else if (180 <= angle & angle < 270) {\n hnew <- 1 - hjust\n vnew <- 1 - vjust\n } else if (270 <= angle & angle < 360) {\n hnew <- vjust\n vnew <- 1 - hjust\n }\n\n list(hjust = hnew, vjust = vnew)\n}\ndescent_cache <- new.env(parent = emptyenv())\nfont_descent <- function(family = \"\", face = \"plain\", size = 12, cex = 1) {\n cur_dev <- names(grDevices::dev.cur())\n key <- paste0(cur_dev, ':', family, ':', face, \":\", size, \":\", cex)\n\n descent <- descent_cache[[key]]\n\n if (is.null(descent)) {\n descent <- convertHeight(grobDescent(textGrob(\n label = \"gjpqyQ\",\n gp = gpar(\n fontsize = size,\n cex = cex,\n fontfamily = family,\n fontface = face\n )\n )), 'inches')\n descent_cache[[key]] <- descent\n }\n descent\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/margins.R"},{"filename":"ggplot2/R/theme-elements.r","content":"#' Theme elements\n#'\n#' @description\n#' In conjunction with the \\link{theme} system, the `element_` functions\n#' specify the display of how non-data components of the plot are a drawn.\n#'\n#' - `element_blank`: draws nothing, and assigns no space.\n#' - `element_rect`: borders and backgrounds.\n#' - `element_line`: lines.\n#' - `element_text`: text.\n#'\n#' `rel()` is used to specify sizes relative to the parent,\n#' `margins()` is used to specify the margins of elements.\n#'\n#' @param fill Fill colour.\n#' @param colour,color Line/border colour. Color is an alias for colour.\n#' @param size Line/border size in mm; text size in pts.\n#' @param inherit.blank Should this element inherit the existence of an\n#' `element_blank` among its parents? If `TRUE` the existence of\n#' a blank element among its parents will cause this element to be blank as\n#' well. If `FALSE` any blank parent element will be ignored when\n#' calculating final element state.\n#' @return An S3 object of class `element`, `rel`, or `margin`.\n#' @examples\n#' plot <- ggplot(mpg, aes(displ, hwy)) + geom_point()\n#'\n#' plot + theme(\n#' panel.background = element_blank(),\n#' axis.text = element_blank()\n#' )\n#'\n#' plot + theme(\n#' axis.text = element_text(colour = \"red\", size = rel(1.5))\n#' )\n#'\n#' plot + theme(\n#' axis.line = element_line(arrow = arrow())\n#' )\n#'\n#' plot + theme(\n#' panel.background = element_rect(fill = \"white\"),\n#' plot.margin = margin(2, 2, 2, 2, \"cm\"),\n#' plot.background = element_rect(\n#' fill = \"grey90\",\n#' colour = \"black\",\n#' size = 1\n#' )\n#' )\n#' @name element\n#' @aliases NULL\nNULL\n\n#' @export\n#' @rdname element\nelement_blank <- function() {\n structure(\n list(),\n class = c(\"element_blank\", \"element\")\n )\n}\n\n#' @export\n#' @rdname element\nelement_rect <- function(fill = NULL, colour = NULL, size = NULL,\n linetype = NULL, color = NULL, inherit.blank = FALSE) {\n\n if (!is.null(color)) colour <- color\n structure(\n list(fill = fill, colour = colour, size = size, linetype = linetype,\n inherit.blank = inherit.blank),\n class = c(\"element_rect\", \"element\")\n )\n}\n\n#' @export\n#' @rdname element\n#' @param linetype Line type. An integer (0:8), a name (blank, solid,\n#' dashed, dotted, dotdash, longdash, twodash), or a string with\n#' an even number (up to eight) of hexadecimal digits which give the\n#' lengths in consecutive positions in the string.\n#' @param lineend Line end Line end style (round, butt, square)\n#' @param arrow Arrow specification, as created by [grid::arrow()]\nelement_line <- function(colour = NULL, size = NULL, linetype = NULL,\n lineend = NULL, color = NULL, arrow = NULL, inherit.blank = FALSE) {\n\n if (!is.null(color)) colour <- color\n if (is.null(arrow)) arrow <- FALSE\n structure(\n list(colour = colour, size = size, linetype = linetype, lineend = lineend,\n arrow = arrow, inherit.blank = inherit.blank),\n class = c(\"element_line\", \"element\")\n )\n}\n\n\n#' @param family Font family\n#' @param face Font face (\"plain\", \"italic\", \"bold\", \"bold.italic\")\n#' @param hjust Horizontal justification (in \\eqn{[0, 1]})\n#' @param vjust Vertical justification (in \\eqn{[0, 1]})\n#' @param angle Angle (in \\eqn{[0, 360]})\n#' @param lineheight Line height\n#' @param margin Margins around the text. See [margin()] for more\n#' details. When creating a theme, the margins should be placed on the\n#' side of the text facing towards the center of the plot.\n#' @param debug If `TRUE`, aids visual debugging by drawing a solid\n#' rectangle behind the complete text area, and a point where each label\n#' is anchored.\n#' @export\n#' @rdname element\nelement_text <- function(family = NULL, face = NULL, colour = NULL,\n size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL,\n color = NULL, margin = NULL, debug = NULL, inherit.blank = FALSE) {\n\n if (!is.null(color)) colour <- color\n structure(\n list(family = family, face = face, colour = colour, size = size,\n hjust = hjust, vjust = vjust, angle = angle, lineheight = lineheight,\n margin = margin, debug = debug, inherit.blank = inherit.blank),\n class = c(\"element_text\", \"element\")\n )\n}\n\n\n#' @export\nprint.element <- function(x, ...) utils::str(x)\n\n\n#' @param x A single number specifying size relative to parent element.\n#' @rdname element\n#' @export\nrel <- function(x) {\n structure(x, class = \"rel\")\n}\n\n#' @export\nprint.rel <- function(x, ...) print(noquote(paste(x, \" *\", sep = \"\")))\n\n#' Reports whether x is a rel object\n#' @param x An object to test\n#' @keywords internal\nis.rel <- function(x) inherits(x, \"rel\")\n\n# Given a theme object and element name, return a grob for the element\nelement_render <- function(theme, element, ..., name = NULL) {\n\n # Get the element from the theme, calculating inheritance\n el <- calc_element(element, theme)\n if (is.null(el)) {\n message(\"Theme element \", element, \" missing\")\n return(zeroGrob())\n }\n\n grob <- element_grob(el, ...)\n ggname(paste(element, name, sep = \".\"), grob)\n}\n\n\n# Returns NULL if x is length 0\nlen0_null <- function(x) {\n if (length(x) == 0) NULL\n else x\n}\n\n\n#' Generate grid grob from theme element\n#'\n#' @param element Theme element, i.e. `element_rect` or similar.\n#' @param ... Other arguments to control specific of rendering. This is\n#' usually at least position. See the source code for individual methods.\n#' @keywords internal\n#' @export\nelement_grob <- function(element, ...) {\n UseMethod(\"element_grob\")\n}\n\n#' @export\nelement_grob.element_blank <- function(element, ...) zeroGrob()\n\n#' @export\nelement_grob.element_rect <- function(element, x = 0.5, y = 0.5,\n width = 1, height = 1,\n fill = NULL, colour = NULL, size = NULL, linetype = NULL, ...) {\n\n # The gp settings can override element_gp\n gp <- gpar(lwd = len0_null(size * .pt), col = colour, fill = fill, lty = linetype)\n element_gp <- gpar(lwd = len0_null(element$size * .pt), col = element$colour,\n fill = element$fill, lty = element$linetype)\n\n rectGrob(x, y, width, height, gp = modify_list(element_gp, gp), ...)\n}\n\n\n#' @export\nelement_grob.element_text <- function(element, label = \"\", x = NULL, y = NULL,\n family = NULL, face = NULL, colour = NULL, size = NULL,\n hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL,\n margin = NULL, margin_x = FALSE, margin_y = FALSE, ...) {\n\n if (is.null(label))\n return(zeroGrob())\n\n vj <- vjust %||% element$vjust\n hj <- hjust %||% element$hjust\n margin <- margin %||% element$margin\n\n angle <- angle %||% element$angle %||% 0\n\n # The gp settings can override element_gp\n gp <- gpar(fontsize = size, col = colour,\n fontfamily = family, fontface = face,\n lineheight = lineheight)\n element_gp <- gpar(fontsize = element$size, col = element$colour,\n fontfamily = element$family, fontface = element$face,\n lineheight = element$lineheight)\n\n titleGrob(label, x, y, hjust = hj, vjust = vj, angle = angle,\n gp = modify_list(element_gp, gp), margin = margin,\n margin_x = margin_x, margin_y = margin_y, debug = element$debug)\n}\n\n\n\n#' @export\nelement_grob.element_line <- function(element, x = 0:1, y = 0:1,\n colour = NULL, size = NULL, linetype = NULL, lineend = NULL,\n default.units = \"npc\", id.lengths = NULL, ...) {\n\n # The gp settings can override element_gp\n gp <- gpar(\n col = colour, fill = colour,\n lwd = len0_null(size * .pt), lty = linetype, lineend = lineend\n )\n element_gp <- gpar(\n col = element$colour, fill = element$colour,\n lwd = len0_null(element$size * .pt), lty = element$linetype,\n lineend = element$lineend\n )\n arrow <- if (is.logical(element$arrow) && !element$arrow) {\n NULL\n } else {\n element$arrow\n }\n polylineGrob(\n x, y, default.units = default.units,\n gp = modify_list(element_gp, gp),\n id.lengths = id.lengths, arrow = arrow, ...\n )\n}\n\n\n\n# Define an element's class and what other elements it inherits from\n#\n# @param class The name of class (like \"element_line\", \"element_text\",\n# or the reserved \"character\", which means a character vector (not\n# \"character\" class)\n# @param inherit A vector of strings, naming the elements that this\n# element inherits from.\nel_def <- function(class = NULL, inherit = NULL, description = NULL) {\n list(class = class, inherit = inherit, description = description)\n}\n\n\n# This data structure represents the theme elements and the inheritance\n# among them. (In the future, .element_tree should be removed in favor\n# of direct assignment to ggplot_global$element_tree, see below.)\n.element_tree <- list(\n line = el_def(\"element_line\"),\n rect = el_def(\"element_rect\"),\n text = el_def(\"element_text\"),\n title = el_def(\"element_text\", \"text\"),\n axis.line = el_def(\"element_line\", \"line\"),\n axis.text = el_def(\"element_text\", \"text\"),\n axis.title = el_def(\"element_text\", \"title\"),\n axis.ticks = el_def(\"element_line\", \"line\"),\n legend.key.size = el_def(\"unit\"),\n panel.grid = el_def(\"element_line\", \"line\"),\n panel.grid.major = el_def(\"element_line\", \"panel.grid\"),\n panel.grid.minor = el_def(\"element_line\", \"panel.grid\"),\n strip.text = el_def(\"element_text\", \"text\"),\n\n axis.line.x = el_def(\"element_line\", \"axis.line\"),\n axis.line.x.top = el_def(\"element_line\", \"axis.line.x\"),\n axis.line.x.bottom = el_def(\"element_line\", \"axis.line.x\"),\n axis.line.y = el_def(\"element_line\", \"axis.line\"),\n axis.line.y.left = el_def(\"element_line\", \"axis.line.y\"),\n axis.line.y.right = el_def(\"element_line\", \"axis.line.y\"),\n axis.text.x = el_def(\"element_text\", \"axis.text\"),\n axis.text.x.top = el_def(\"element_text\", \"axis.text.x\"),\n axis.text.x.bottom = el_def(\"element_text\", \"axis.text.x\"),\n axis.text.y = el_def(\"element_text\", \"axis.text\"),\n axis.text.y.left = el_def(\"element_text\", \"axis.text.y\"),\n axis.text.y.right = el_def(\"element_text\", \"axis.text.y\"),\n axis.ticks.length = el_def(\"unit\"),\n axis.ticks.x = el_def(\"element_line\", \"axis.ticks\"),\n axis.ticks.x.top = el_def(\"element_line\", \"axis.ticks.x\"),\n axis.ticks.x.bottom = el_def(\"element_line\", \"axis.ticks.x\"),\n axis.ticks.y = el_def(\"element_line\", \"axis.ticks\"),\n axis.ticks.y.left = el_def(\"element_line\", \"axis.ticks.y\"),\n axis.ticks.y.right = el_def(\"element_line\", \"axis.ticks.y\"),\n axis.title.x = el_def(\"element_text\", \"axis.title\"),\n axis.title.x.top = el_def(\"element_text\", \"axis.title.x\"),\n axis.title.x.bottom = el_def(\"element_text\", \"axis.title.x\"),\n axis.title.y = el_def(\"element_text\", \"axis.title\"),\n axis.title.y.left = el_def(\"element_text\", \"axis.title.y\"),\n axis.title.y.right = el_def(\"element_text\", \"axis.title.y\"),\n\n legend.background = el_def(\"element_rect\", \"rect\"),\n legend.margin = el_def(\"margin\"),\n legend.spacing = el_def(\"unit\"),\n legend.spacing.x = el_def(\"unit\", \"legend.spacing\"),\n legend.spacing.y = el_def(\"unit\", \"legend.spacing\"),\n legend.key = el_def(\"element_rect\", \"rect\"),\n legend.key.height = el_def(\"unit\", \"legend.key.size\"),\n legend.key.width = el_def(\"unit\", \"legend.key.size\"),\n legend.text = el_def(\"element_text\", \"text\"),\n legend.text.align = el_def(\"character\"),\n legend.title = el_def(\"element_text\", \"title\"),\n legend.title.align = el_def(\"character\"),\n legend.position = el_def(\"character\"), # Need to also accept numbers\n legend.direction = el_def(\"character\"),\n legend.justification = el_def(\"character\"),\n legend.box = el_def(\"character\"),\n legend.box.just = el_def(\"character\"),\n legend.box.margin = el_def(\"margin\"),\n legend.box.background = el_def(\"element_rect\", \"rect\"),\n legend.box.spacing = el_def(\"unit\"),\n\n panel.background = el_def(\"element_rect\", \"rect\"),\n panel.border = el_def(\"element_rect\", \"rect\"),\n panel.spacing = el_def(\"unit\"),\n panel.spacing.x = el_def(\"unit\", \"panel.spacing\"),\n panel.spacing.y = el_def(\"unit\", \"panel.spacing\"),\n panel.grid.major.x = el_def(\"element_line\", \"panel.grid.major\"),\n panel.grid.major.y = el_def(\"element_line\", \"panel.grid.major\"),\n panel.grid.minor.x = el_def(\"element_line\", \"panel.grid.minor\"),\n panel.grid.minor.y = el_def(\"element_line\", \"panel.grid.minor\"),\n panel.ontop = el_def(\"logical\"),\n\n strip.background = el_def(\"element_rect\", \"rect\"),\n strip.background.x = el_def(\"element_rect\", \"strip.background\"),\n strip.background.y = el_def(\"element_rect\", \"strip.background\"),\n strip.text.x = el_def(\"element_text\", \"strip.text\"),\n strip.text.y = el_def(\"element_text\", \"strip.text\"),\n strip.placement = el_def(\"character\"),\n strip.placement.x = el_def(\"character\", \"strip.placement\"),\n strip.placement.y = el_def(\"character\", \"strip.placement\"),\n strip.switch.pad.grid = el_def(\"unit\"),\n strip.switch.pad.wrap = el_def(\"unit\"),\n\n plot.background = el_def(\"element_rect\", \"rect\"),\n plot.title = el_def(\"element_text\", \"title\"),\n plot.subtitle = el_def(\"element_text\", \"title\"),\n plot.caption = el_def(\"element_text\", \"title\"),\n plot.tag = el_def(\"element_text\", \"title\"),\n plot.tag.position = el_def(\"character\"), # Need to also accept numbers\n plot.margin = el_def(\"margin\"),\n\n aspect.ratio = el_def(\"character\")\n)\n\nggplot_global$element_tree <- .element_tree\n\n# Check that an element object has the proper class\n#\n# Given an element object and the name of the element, this function\n# checks it against the element inheritance tree to make sure the\n# element is of the correct class\n#\n# It throws error if invalid, and returns invisible() if valid.\n#\n# @param el an element\n# @param elname the name of the element\nvalidate_element <- function(el, elname) {\n eldef <- ggplot_global$element_tree[[elname]]\n\n if (is.null(eldef)) {\n stop('\"', elname, '\" is not a valid theme element name.')\n }\n\n # NULL values for elements are OK\n if (is.null(el)) return()\n\n if (eldef$class == \"character\") {\n # Need to be a bit looser here since sometimes it's a string like \"top\"\n # but sometimes its a vector like c(0,0)\n if (!is.character(el) && !is.numeric(el))\n stop(\"Element \", elname, \" must be a string or numeric vector.\")\n } else if (eldef$class == \"margin\") {\n if (!is.unit(el) && length(el) == 4)\n stop(\"Element \", elname, \" must be a unit vector of length 4.\")\n } else if (!inherits(el, eldef$class) && !inherits(el, \"element_blank\")) {\n stop(\"Element \", elname, \" must be a \", eldef$class, \" object.\")\n }\n invisible()\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/theme-elements.r"},{"filename":"ggplot2/R/guides-axis.r","content":"# Grob for axes\n#\n# @param position of ticks\n# @param labels at ticks\n# @param position of axis (top, bottom, left or right)\n# @param range of data values\nguide_axis <- function(at, labels, position = \"right\", theme) {\n if (length(at) == 0)\n return(zeroGrob())\n\n at <- unit(at, \"native\")\n position <- match.arg(position, c(\"top\", \"bottom\", \"right\", \"left\"))\n\n zero <- unit(0, \"npc\")\n one <- unit(1, \"npc\")\n\n label_render <- switch(position,\n top = \"axis.text.x.top\", bottom = \"axis.text.x.bottom\",\n left = \"axis.text.y.left\", right = \"axis.text.y.right\"\n )\n\n label_x <- switch(position,\n top = ,\n bottom = at,\n right = theme$axis.ticks.length,\n left = one - theme$axis.ticks.length\n )\n label_y <- switch(position,\n top = theme$axis.ticks.length,\n bottom = one - theme$axis.ticks.length,\n right = ,\n left = at\n )\n\n if (is.list(labels)) {\n if (any(sapply(labels, is.language))) {\n labels <- do.call(expression, labels)\n } else {\n labels <- unlist(labels)\n }\n }\n\n labels <- switch(position,\n top = ,\n bottom = element_render(theme, label_render, labels, x = label_x, margin_y = TRUE),\n right = ,\n left = element_render(theme, label_render, labels, y = label_y, margin_x = TRUE))\n\n line <- switch(position,\n top = element_render(theme, \"axis.line.x.top\", c(0, 1), c(0, 0), id.lengths = 2),\n bottom = element_render(theme, \"axis.line.x.bottom\", c(0, 1), c(1, 1), id.lengths = 2),\n right = element_render(theme, \"axis.line.y.right\", c(0, 0), c(0, 1), id.lengths = 2),\n left = element_render(theme, \"axis.line.y.left\", c(1, 1), c(0, 1), id.lengths = 2)\n )\n\n nticks <- length(at)\n\n ticks <- switch(position,\n top = element_render(theme, \"axis.ticks.x.top\",\n x = rep(at, each = 2),\n y = rep(unit.c(zero, theme$axis.ticks.length), nticks),\n id.lengths = rep(2, nticks)),\n bottom = element_render(theme, \"axis.ticks.x.bottom\",\n x = rep(at, each = 2),\n y = rep(unit.c(one - theme$axis.ticks.length, one), nticks),\n id.lengths = rep(2, nticks)),\n right = element_render(theme, \"axis.ticks.y.right\",\n x = rep(unit.c(zero, theme$axis.ticks.length), nticks),\n y = rep(at, each = 2),\n id.lengths = rep(2, nticks)),\n left = element_render(theme, \"axis.ticks.y.left\",\n x = rep(unit.c(one - theme$axis.ticks.length, one), nticks),\n y = rep(at, each = 2),\n id.lengths = rep(2, nticks))\n )\n\n # Create the gtable for the ticks + labels\n gt <- switch(position,\n top = gtable_col(\"axis\",\n grobs = list(labels, ticks),\n width = one,\n heights = unit.c(grobHeight(labels), theme$axis.ticks.length)\n ),\n bottom = gtable_col(\"axis\",\n grobs = list(ticks, labels),\n width = one,\n heights = unit.c(theme$axis.ticks.length, grobHeight(labels))\n ),\n right = gtable_row(\"axis\",\n grobs = list(ticks, labels),\n widths = unit.c(theme$axis.ticks.length, grobWidth(labels)),\n height = one\n ),\n left = gtable_row(\"axis\",\n grobs = list(labels, ticks),\n widths = unit.c(grobWidth(labels), theme$axis.ticks.length),\n height = one\n )\n )\n\n # Viewport for justifying the axis grob\n justvp <- switch(position,\n top = viewport(y = 0, just = \"bottom\", height = gtable_height(gt)),\n bottom = viewport(y = 1, just = \"top\", height = gtable_height(gt)),\n right = viewport(x = 0, just = \"left\", width = gtable_width(gt)),\n left = viewport(x = 1, just = \"right\", width = gtable_width(gt))\n )\n\n absoluteGrob(\n gList(line, gt),\n width = gtable_width(gt),\n height = gtable_height(gt),\n vp = justvp\n )\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/guides-axis.r"},{"filename":"ggplot2/R/coord-.r","content":"#' @section Coordinate systems:\n#'\n#' All `coord_*` functions (like `coord_trans`) return a `Coord*`\n#' object (like `CoordTrans`).\n#'\n#' Each of the `Coord*` objects is a [ggproto()] object,\n#' descended from the top-level `Coord`. To create a new type of Coord\n#' object, you typically will want to implement one or more of the following:\n#'\n#' - `aspect`: Returns the desired aspect ratio for the plot.\n#' - `labels`: Returns a list containing labels for x and y.\n#' - `render_fg`: Renders foreground elements.\n#' - `render_bg`: Renders background elements.\n#' - `render_axis_h`: Renders the horizontal axes.\n#' - `render_axis_v`: Renders the vertical axes.\n#' - `backtransform_range(panel_params)`: Extracts the panel range provided\n#' in `panel_params` (created by `setup_panel_params()`, see below) and\n#' back-transforms to data coordinates. This back-transformation can be needed\n#' for coords such as `coord_trans()` where the range in the transformed\n#' coordinates differs from the range in the untransformed coordinates. Returns\n#' a list of two ranges, `x` and `y`, and these correspond to the variables\n#' mapped to the `x` and `y` aesthetics, even for coords such as `coord_flip()`\n#' where the `x` aesthetic is shown along the y direction and vice versa.\n#' - `range(panel_params)`: Extracts the panel range provided\n#' in `panel_params` (created by `setup_panel_params()`, see below) and\n#' returns it. Unlike `backtransform_range()`, this function does not perform\n#' any back-transformation and instead returns final transformed coordinates. Returns\n#' a list of two ranges, `x` and `y`, and these correspond to the variables\n#' mapped to the `x` and `y` aesthetics, even for coords such as `coord_flip()`\n#' where the `x` aesthetic is shown along the y direction and vice versa.\n#' - `transform`: Transforms x and y coordinates.\n#' - `distance`: Calculates distance.\n#' - `is_linear`: Returns `TRUE` if the coordinate system is\n#' linear; `FALSE` otherwise.\n#' - `is_free`: Returns `TRUE` if the coordinate system supports free\n#' positional scales; `FALSE` otherwise.\n#' - `setup_panel_params(scale_x, scale_y, params)`: Determines the appropriate\n#' x and y ranges for each panel, and also calculates anything else needed to\n#' render the panel and axes, such as tick positions and labels for major\n#' and minor ticks. Returns all this information in a named list.\n#' - `setup_data(data, params)`: Allows the coordinate system to\n#' manipulate the plot data. Should return list of data frames.\n#' - `setup_layout(layout, params)`: Allows the coordinate\n#' system to manipulate the `layout` data frame which assigns\n#' data to panels and scales.\n#'\n#' @rdname ggplot2-ggproto\n#' @format NULL\n#' @usage NULL\n#' @export\nCoord <- ggproto(\"Coord\",\n\n # Is this the default coordinate system?\n default = FALSE,\n\n # should drawing be clipped to the extent of the plot panel?\n # \"on\" = yes, \"off\" = no\n clip = \"on\",\n\n aspect = function(ranges) NULL,\n\n labels = function(panel_params) panel_params,\n\n render_fg = function(panel_params, theme) element_render(theme, \"panel.border\"),\n\n render_bg = function(panel_params, theme) {\n guide_grid(theme,\n panel_params$x.minor,\n panel_params$x.major,\n panel_params$y.minor,\n panel_params$y.major)\n },\n\n render_axis_h = function(panel_params, theme) {\n arrange <- panel_params$x.arrange %||% c(\"secondary\", \"primary\")\n\n list(\n top = render_axis(panel_params, arrange[1], \"x\", \"top\", theme),\n bottom = render_axis(panel_params, arrange[2], \"x\", \"bottom\", theme)\n )\n },\n\n render_axis_v = function(panel_params, theme) {\n arrange <- panel_params$y.arrange %||% c(\"primary\", \"secondary\")\n\n list(\n left = render_axis(panel_params, arrange[1], \"y\", \"left\", theme),\n right = render_axis(panel_params, arrange[2], \"y\", \"right\", theme)\n )\n },\n\n # transform range given in transformed coordinates\n # back into range in given in (possibly scale-transformed)\n # data coordinates\n backtransform_range = function(self, panel_params) {\n warning(\n \"range backtransformation not implemented in this coord; results may be wrong.\",\n call. = FALSE\n )\n # return result from range function for backwards compatibility\n # before ggplot2 3.0.1\n self$range(panel_params)\n },\n\n # return range stored in panel_params\n range = function(panel_params) {\n warning(\n \"range calculation not implemented in this coord; results may be wrong.\",\n call. = FALSE\n )\n list(x = panel_params$x.range, y = panel_params$y.range)\n },\n\n setup_panel_params = function(scale_x, scale_y, params = list()) {\n list()\n },\n\n transform = function(data, range) NULL,\n\n distance = function(x, y, panel_params) NULL,\n\n is_linear = function() FALSE,\n\n # Does the coordinate system support free scaling of axes in a faceted plot?\n # Will generally have to return FALSE for coordinate systems that enforce a fixed aspect ratio.\n is_free = function() FALSE,\n\n setup_params = function(data) {\n list()\n },\n\n setup_data = function(data, params = list()) {\n data\n },\n\n setup_layout = function(layout, params) {\n layout\n },\n\n # Optionally, modify list of x and y scales in place. Currently\n # used as a fudge for CoordFlip and CoordPolar\n modify_scales = function(scales_x, scales_y) {\n invisible()\n }\n)\n\n#' Is this object a coordinate system?\n#'\n#' @export is.Coord\n#' @keywords internal\nis.Coord <- function(x) inherits(x, \"Coord\")\n\nexpand_default <- function(scale, discrete = c(0, 0.6, 0, 0.6), continuous = c(0.05, 0, 0.05, 0)) {\n scale$expand %|W|% if (scale$is_discrete()) discrete else continuous\n}\n\n# Renders an axis with the correct orientation or zeroGrob if no axis should be\n# generated\nrender_axis <- function(panel_params, axis, scale, position, theme) {\n if (axis == \"primary\") {\n guide_axis(panel_params[[paste0(scale, \".major\")]], panel_params[[paste0(scale, \".labels\")]], position, theme)\n } else if (axis == \"secondary\" && !is.null(panel_params[[paste0(scale, \".sec.major\")]])) {\n guide_axis(panel_params[[paste0(scale, \".sec.major\")]], panel_params[[paste0(scale, \".sec.labels\")]], position, theme)\n } else {\n zeroGrob()\n }\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/coord-.r"},{"filename":"ggplot2/R/facet-.r","content":"#' @include ggproto.r\nNULL\n\n#' @section Facets:\n#'\n#' All `facet_*` functions returns a `Facet` object or an object of a\n#' `Facet` subclass. This object describes how to assign data to different\n#' panels, how to apply positional scales and how to lay out the panels, once\n#' rendered.\n#'\n#' Extending facets can range from the simple modifications of current facets,\n#' to very laborious rewrites with a lot of [gtable()] manipulation.\n#' For some examples of both, please see the extension vignette.\n#'\n#' `Facet` subclasses, like other extendible ggproto classes, have a range\n#' of methods that can be modified. Some of these are required for all new\n#' subclasses, while other only need to be modified if need arises.\n#'\n#' The required methods are:\n#'\n#' - `compute_layout`: Based on layer data compute a mapping between\n#' panels, axes, and potentially other parameters such as faceting variable\n#' level etc. This method must return a data.frame containing at least the\n#' columns `PANEL`, `SCALE_X`, and `SCALE_Y` each containing\n#' integer keys mapping a PANEL to which axes it should use. In addition the\n#' data.frame can contain whatever other information is necessary to assign\n#' observations to the correct panel as well as determining the position of\n#' the panel.\n#'\n#' - `map_data`: This method is supplied the data for each layer in\n#' turn and is expected to supply a `PANEL` column mapping each row to a\n#' panel defined in the layout. Additionally this method can also add or\n#' subtract data points as needed e.g. in the case of adding margins to\n#' `facet_grid`.\n#'\n#' - `draw_panels`: This is where the panels are assembled into a\n#' `gtable` object. The method receives, among others, a list of grobs\n#' defining the content of each panel as generated by the Geoms and Coord\n#' objects. The responsibility of the method is to decorate the panels with\n#' axes and strips as needed, as well as position them relative to each other\n#' in a gtable. For some of the automatic functions to work correctly, each\n#' panel, axis, and strip grob name must be prefixed with \"panel\", \"axis\", and\n#' \"strip\" respectively.\n#'\n#' In addition to the methods described above, it is also possible to override\n#' the default behaviour of one or more of the following methods:\n#'\n#' - `setup_params`:\n#' - `init_scales`: Given a master scale for x and y, create panel\n#' specific scales for each panel defined in the layout. The default is to\n#' simply clone the master scale.\n#'\n#' - `train_scales`: Based on layer data train each set of panel\n#' scales. The default is to train it on the data related to the panel.\n#'\n#' - `finish_data`: Make last-minute modifications to layer data\n#' before it is rendered by the Geoms. The default is to not modify it.\n#'\n#' - `draw_back`: Add a grob in between the background defined by the\n#' Coord object (usually the axis grid) and the layer stack. The default is to\n#' return an empty grob for each panel.\n#'\n#' - `draw_front`: As above except the returned grob is placed\n#' between the layer stack and the foreground defined by the Coord object\n#' (usually empty). The default is, as above, to return an empty grob.\n#'\n#' - `draw_labels`: Given the gtable returned by `draw_panels`,\n#' add axis titles to the gtable. The default is to add one title at each side\n#' depending on the position and existence of axes.\n#'\n#' All extension methods receive the content of the params field as the params\n#' argument, so the constructor function will generally put all relevant\n#' information into this field. The only exception is the `shrink`\n#' parameter which is used to determine if scales are retrained after Stat\n#' transformations has been applied.\n#'\n#' @rdname ggplot2-ggproto\n#' @format NULL\n#' @usage NULL\n#' @export\nFacet <- ggproto(\"Facet\", NULL,\n shrink = FALSE,\n params = list(),\n\n compute_layout = function(data, params) {\n stop(\"Not implemented\", call. = FALSE)\n },\n map_data = function(data, layout, params) {\n stop(\"Not implemented\", call. = FALSE)\n },\n init_scales = function(layout, x_scale = NULL, y_scale = NULL, params) {\n scales <- list()\n if (!is.null(x_scale)) {\n scales$x <- lapply(seq_len(max(layout$SCALE_X)), function(i) x_scale$clone())\n }\n if (!is.null(y_scale)) {\n scales$y <- lapply(seq_len(max(layout$SCALE_Y)), function(i) y_scale$clone())\n }\n scales\n },\n train_scales = function(x_scales, y_scales, layout, data, params) {\n # loop over each layer, training x and y scales in turn\n for (layer_data in data) {\n match_id <- match(layer_data$PANEL, layout$PANEL)\n\n if (!is.null(x_scales)) {\n x_vars <- intersect(x_scales[[1]]$aesthetics, names(layer_data))\n SCALE_X <- layout$SCALE_X[match_id]\n\n scale_apply(layer_data, x_vars, \"train\", SCALE_X, x_scales)\n }\n\n if (!is.null(y_scales)) {\n y_vars <- intersect(y_scales[[1]]$aesthetics, names(layer_data))\n SCALE_Y <- layout$SCALE_Y[match_id]\n\n scale_apply(layer_data, y_vars, \"train\", SCALE_Y, y_scales)\n }\n }\n },\n draw_back = function(data, layout, x_scales, y_scales, theme, params) {\n rep(list(zeroGrob()), length(unique(layout$PANEL)))\n },\n draw_front = function(data, layout, x_scales, y_scales, theme, params) {\n rep(list(zeroGrob()), length(unique(layout$PANEL)))\n },\n draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) {\n stop(\"Not implemented\", call. = FALSE)\n },\n draw_labels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, labels, params) {\n panel_dim <- find_panel(panels)\n\n xlab_height_top <- grobHeight(labels$x[[1]])\n panels <- gtable_add_rows(panels, xlab_height_top, pos = 0)\n panels <- gtable_add_grob(panels, labels$x[[1]], name = \"xlab-t\",\n l = panel_dim$l, r = panel_dim$r, t = 1, clip = \"off\")\n\n xlab_height_bottom <- grobHeight(labels$x[[2]])\n panels <- gtable_add_rows(panels, xlab_height_bottom, pos = -1)\n panels <- gtable_add_grob(panels, labels$x[[2]], name = \"xlab-b\",\n l = panel_dim$l, r = panel_dim$r, t = -1, clip = \"off\")\n\n panel_dim <- find_panel(panels)\n\n ylab_width_left <- grobWidth(labels$y[[1]])\n panels <- gtable_add_cols(panels, ylab_width_left, pos = 0)\n panels <- gtable_add_grob(panels, labels$y[[1]], name = \"ylab-l\",\n l = 1, b = panel_dim$b, t = panel_dim$t, clip = \"off\")\n\n ylab_width_right <- grobWidth(labels$y[[2]])\n panels <- gtable_add_cols(panels, ylab_width_right, pos = -1)\n panels <- gtable_add_grob(panels, labels$y[[2]], name = \"ylab-r\",\n l = -1, b = panel_dim$b, t = panel_dim$t, clip = \"off\")\n\n panels\n },\n setup_params = function(data, params) {\n params\n },\n setup_data = function(data, params) {\n data\n },\n finish_data = function(data, layout, x_scales, y_scales, params) {\n data\n },\n vars = function() {\n character(0)\n }\n)\n\n# Helpers -----------------------------------------------------------------\n\n#' Quote faceting variables\n#'\n#' @description\n#' Just like [aes()], `vars()` is a [quoting function][rlang::quotation]\n#' that takes inputs to be evaluated in the context of a dataset.\n#' These inputs can be:\n#'\n#' * variable names\n#' * complex expressions\n#'\n#' In both cases, the results (the vectors that the variable\n#' represents or the results of the expressions) are used to form\n#' faceting groups.\n#'\n#' @param ... Variables or expressions automatically quoted. These are\n#' evaluated in the context of the data to form faceting groups. Can\n#' be named (the names are passed to a [labeller][labellers]).\n#'\n#' @seealso [aes()], [facet_wrap()], [facet_grid()]\n#' @export\n#' @examples\n#' p <- ggplot(mtcars, aes(wt, disp)) + geom_point()\n#' p + facet_wrap(vars(vs, am))\n#'\n#' # vars() makes it easy to pass variables from wrapper functions:\n#' wrap_by <- function(...) {\n#' facet_wrap(vars(...), labeller = label_both)\n#' }\n#' p + wrap_by(vs)\n#' p + wrap_by(vs, am)\n#'\n#' # You can also supply expressions to vars(). In this case it's often a\n#' # good idea to supply a name as well:\n#' p + wrap_by(drat = cut_number(drat, 3))\n#'\n#' # Let's create another function for cutting and wrapping a\n#' # variable. This time it will take a named argument instead of dots,\n#' # so we'll have to use the \"enquote and unquote\" pattern:\n#' wrap_cut <- function(var, n = 3) {\n#' # Let's enquote the named argument `var` to make it auto-quoting:\n#' var <- enquo(var)\n#'\n#' # `quo_name()` will create a nice default name:\n#' nm <- quo_name(var)\n#'\n#' # Now let's unquote everything at the right place. Note that we also\n#' # unquote `n` just in case the data frame has a column named\n#' # `n`. The latter would have precedence over our local variable\n#' # because the data is always masking the environment.\n#' wrap_by(!!nm := cut_number(!!var, !!n))\n#' }\n#'\n#' # Thanks to tidy eval idioms we now have another useful wrapper:\n#' p + wrap_cut(drat)\nvars <- function(...) {\n rlang::quos(...)\n}\n\n\n#' Is this object a faceting specification?\n#'\n#' @param x object to test\n#' @keywords internal\n#' @export\nis.facet <- function(x) inherits(x, \"Facet\")\n\n# A \"special\" value, currently not used but could be used to determine\n# if faceting is active\nNO_PANEL <- -1L\n\nunique_combs <- function(df) {\n if (length(df) == 0) return()\n\n unique_values <- lapply(df, ulevels)\n rev(expand.grid(rev(unique_values), stringsAsFactors = FALSE,\n KEEP.OUT.ATTRS = TRUE))\n}\n\ndf.grid <- function(a, b) {\n if (is.null(a) || nrow(a) == 0) return(b)\n if (is.null(b) || nrow(b) == 0) return(a)\n\n indexes <- expand.grid(\n i_a = seq_len(nrow(a)),\n i_b = seq_len(nrow(b))\n )\n unrowname(cbind(\n a[indexes$i_a, , drop = FALSE],\n b[indexes$i_b, , drop = FALSE]\n ))\n}\n\n# A facets spec is a list of facets. A grid facetting needs two facets\n# while a wrap facetting flattens all dimensions and thus accepts any\n# number of facets.\n#\n# A facets is a list of grouping variables. They are typically\n# supplied as variable names but can be expressions.\n#\n# as_facets() is complex due to historical baggage but its main\n# purpose is to create a facets spec from a formula: a + b ~ c + d\n# creates a facets list with two components, each of which bundles two\n# facetting variables.\n\nas_facets_list <- function(x) {\n if (inherits(x, \"mapping\")) {\n stop(\"Please use `vars()` to supply facet variables\")\n }\n if (inherits(x, \"quosures\")) {\n x <- rlang::quos_auto_name(x)\n return(list(x))\n }\n\n # This needs to happen early because we might get a formula.\n # facet_grid() directly converted strings to a formula while\n # facet_wrap() called as.quoted(). Hence this is a little more\n # complicated for backward compatibility.\n if (rlang::is_string(x)) {\n x <- rlang::parse_expr(x)\n }\n\n # At this level formulas are coerced to lists of lists for backward\n # compatibility with facet_grid(). The LHS and RHS are treated as\n # distinct facet dimensions and `+` defines multiple facet variables\n # inside each dimension.\n if (rlang::is_formula(x)) {\n return(f_as_facets_list(x))\n }\n\n # For backward-compatibility with facet_wrap()\n if (!rlang::is_bare_list(x)) {\n x <- as_quoted(x)\n }\n\n # If we have a list there are two possibilities. We may already have\n # a proper facet spec structure. Otherwise we coerce each element\n # with as_quoted() for backward compatibility with facet_grid().\n if (is.list(x)) {\n x <- lapply(x, as_facets)\n }\n\n if (sum(vapply(x, length, integer(1))) == 0L) {\n stop(\"Must specify at least one variable to facet by\", call. = FALSE)\n }\n\n x\n}\n\n# Compatibility with plyr::as.quoted()\nas_quoted <- function(x) {\n if (is.character(x)) {\n if (length(x) > 1) {\n x <- paste(x, collapse = \"; \")\n }\n return(rlang::parse_exprs(x))\n }\n if (is.null(x)) {\n return(list())\n }\n if (rlang::is_formula(x)) {\n return(simplify(x))\n }\n list(x)\n}\n# From plyr:::as.quoted.formula\nsimplify <- function(x) {\n if (length(x) == 2 && rlang::is_symbol(x[[1]], \"~\")) {\n return(simplify(x[[2]]))\n }\n if (length(x) < 3) {\n return(list(x))\n }\n op <- x[[1]]; a <- x[[2]]; b <- x[[3]]\n\n if (rlang::is_symbol(op, c(\"+\", \"*\", \"~\"))) {\n c(simplify(a), simplify(b))\n } else if (rlang::is_symbol(op, \"-\")) {\n c(simplify(a), expr(-!!simplify(b)))\n } else {\n list(x)\n }\n}\n\nf_as_facets_list <- function(f) {\n lhs <- function(x) if (length(x) == 2) NULL else x[-3]\n rhs <- function(x) if (length(x) == 2) x else x[-2]\n\n rows <- f_as_facets(lhs(f))\n cols <- f_as_facets(rhs(f))\n\n if (length(rows) + length(cols) == 0) {\n stop(\"Must specify at least one variable to facet by\", call. = FALSE)\n }\n\n if (length(rows)) {\n list(rows, cols)\n } else {\n list(cols)\n }\n}\n\nas_facets <- function(x) {\n if (is_facets(x)) {\n return(x)\n }\n\n if (rlang::is_formula(x)) {\n # Use different formula method because plyr's does not handle the\n # environment correctly.\n f_as_facets(x)\n } else {\n vars <- as_quoted(x)\n rlang::as_quosures(vars, globalenv(), named = TRUE)\n }\n}\nf_as_facets <- function(f) {\n if (is.null(f)) {\n return(rlang::as_quosures(list()))\n }\n\n env <- rlang::f_env(f) %||% globalenv()\n\n # as.quoted() handles `+` specifications\n vars <- as.quoted(f)\n\n # `.` in formulas is ignored\n vars <- discard_dots(vars)\n\n rlang::as_quosures(vars, env, named = TRUE)\n}\ndiscard_dots <- function(x) {\n x[!vapply(x, identical, logical(1), as.name(\".\"))]\n}\n\nis_facets <- function(x) {\n if (!is.list(x)) {\n return(FALSE)\n }\n if (!length(x)) {\n return(FALSE)\n }\n all(vapply(x, rlang::is_quosure, logical(1)))\n}\n\n\n# When evaluating variables in a facet specification, we evaluate bare\n# variables and expressions slightly differently. Bare variables should\n# always succeed, even if the variable doesn't exist in the data frame:\n# that makes it possible to repeat data across multiple factors. But\n# when evaluating an expression, you want to see any errors. That does\n# mean you can't have background data when faceting by an expression,\n# but that seems like a reasonable tradeoff.\neval_facets <- function(facets, data, env = globalenv()) {\n vars <- compact(lapply(facets, eval_facet, data, env = env))\n tibble::as_tibble(vars)\n}\neval_facet <- function(facet, data, env = emptyenv()) {\n if (rlang::quo_is_symbol(facet)) {\n facet <- as.character(rlang::quo_get_expr(facet))\n\n if (facet %in% names(data)) {\n out <- data[[facet]]\n } else {\n out <- NULL\n }\n return(out)\n }\n\n rlang::eval_tidy(facet, data, env)\n}\n\nlayout_null <- function() {\n # PANEL needs to be a factor to be consistent with other facet types\n new_data_frame(list(PANEL = factor(1), ROW = 1, COL = 1, SCALE_X = 1, SCALE_Y = 1))\n}\n\ncheck_layout <- function(x) {\n if (all(c(\"PANEL\", \"SCALE_X\", \"SCALE_Y\") %in% names(x))) {\n return()\n }\n\n stop(\n \"Facet layout has bad format. \",\n \"It must contain columns 'PANEL', 'SCALE_X', and 'SCALE_Y'\",\n call. = FALSE\n )\n}\n\n\n#' Get the maximal width/length of a list of grobs\n#'\n#' @param grobs A list of grobs\n#' @param value_only Should the return value be a simple numeric vector giving\n#' the maximum in cm\n#'\n#' @return The largest value. measured in cm as a unit object or a numeric\n#' vector depending on `value_only`\n#'\n#' @keywords internal\n#' @export\nmax_height <- function(grobs, value_only = FALSE) {\n height <- max(unlist(lapply(grobs, height_cm)))\n if (!value_only) height <- unit(height, \"cm\")\n height\n}\n#' @rdname max_height\n#' @export\nmax_width <- function(grobs, value_only = FALSE) {\n width <- max(unlist(lapply(grobs, width_cm)))\n if (!value_only) width <- unit(width, \"cm\")\n width\n}\n#' Find panels in a gtable\n#'\n#' These functions help detect the placement of panels in a gtable, if they are\n#' named with \"panel\" in the beginning. `find_panel` returns the extend of\n#' the panel area, while `panel_cols` and `panel_rows` returns the\n#' columns and rows that contains panels respectively.\n#'\n#' @param table A gtable\n#'\n#' @return A data.frame with some or all of the columns t(op), r(ight),\n#' b(ottom), and l(eft)\n#'\n#' @keywords internal\n#' @export\nfind_panel <- function(table) {\n layout <- table$layout\n panels <- layout[grepl(\"^panel\", layout$name), , drop = FALSE]\n\n new_data_frame(list(\n t = min(.subset2(panels, \"t\")),\n r = max(.subset2(panels, \"r\")),\n b = max(.subset2(panels, \"b\")),\n l = min(.subset2(panels, \"l\"))\n ), n = 1)\n}\n#' @rdname find_panel\n#' @export\npanel_cols = function(table) {\n panels <- table$layout[grepl(\"^panel\", table$layout$name), , drop = FALSE]\n unique(panels[, c('l', 'r')])\n}\n#' @rdname find_panel\n#' @export\npanel_rows <- function(table) {\n panels <- table$layout[grepl(\"^panel\", table$layout$name), , drop = FALSE]\n unique(panels[, c('t', 'b')])\n}\n#' Take input data and define a mapping between faceting variables and ROW,\n#' COL and PANEL keys\n#'\n#' @param data A list of data.frames, the first being the plot data and the\n#' subsequent individual layer data\n#' @param env The environment the vars should be evaluated in\n#' @param vars A list of quoted symbols matching columns in data\n#' @param drop should missing combinations/levels be dropped\n#'\n#' @return A data.frame with columns for PANEL, ROW, COL, and faceting vars\n#'\n#' @keywords internal\n#' @export\ncombine_vars <- function(data, env = emptyenv(), vars = NULL, drop = TRUE) {\n if (length(vars) == 0) return(new_data_frame())\n\n # For each layer, compute the facet values\n values <- compact(lapply(data, eval_facets, facets = vars, env = env))\n\n # Form the base data.frame which contains all combinations of faceting\n # variables that appear in the data\n has_all <- unlist(lapply(values, length)) == length(vars)\n if (!any(has_all)) {\n missing <- lapply(values, function(x) setdiff(names(vars), names(x)))\n missing_txt <- vapply(missing, var_list, character(1))\n name <- c(\"Plot\", paste0(\"Layer \", seq_len(length(data) - 1)))\n\n stop(\n \"At least one layer must contain all faceting variables: \",\n var_list(names(vars)), \".\\n\",\n paste0(\"* \", name, \" is missing \", missing_txt, collapse = \"\\n\"),\n call. = FALSE\n )\n }\n\n base <- unique(rbind_dfs(values[has_all]))\n if (!drop) {\n base <- unique_combs(base)\n }\n\n # Systematically add on missing combinations\n for (value in values[!has_all]) {\n if (empty(value)) next;\n\n old <- base[setdiff(names(base), names(value))]\n new <- unique(value[intersect(names(base), names(value))])\n if (drop) {\n new <- unique_combs(new)\n }\n base <- rbind(base, df.grid(old, new))\n }\n\n if (empty(base)) {\n stop(\"Faceting variables must have at least one value\", call. = FALSE)\n }\n\n base\n}\n#' Render panel axes\n#'\n#' These helpers facilitates generating theme compliant axes when\n#' building up the plot.\n#'\n#' @param x,y A list of ranges as available to the draw_panel method in\n#' `Facet` subclasses.\n#' @param coord A `Coord` object\n#' @param theme A `theme` object\n#' @param transpose Should the output be transposed?\n#'\n#' @return A list with the element \"x\" and \"y\" each containing axis\n#' specifications for the ranges passed in. Each axis specification is a list\n#' with a \"top\" and \"bottom\" element for x-axes and \"left\" and \"right\" element\n#' for y-axis, holding the respective axis grobs. Depending on the content of x\n#' and y some of the grobs might be zeroGrobs. If `transpose=TRUE` the\n#' content of the x and y elements will be transposed so e.g. all left-axes are\n#' collected in a left element as a list of grobs.\n#'\n#' @keywords internal\n#' @export\n#'\nrender_axes <- function(x = NULL, y = NULL, coord, theme, transpose = FALSE) {\n axes <- list()\n if (!is.null(x)) {\n axes$x <- lapply(x, coord$render_axis_h, theme)\n }\n if (!is.null(y)) {\n axes$y <- lapply(y, coord$render_axis_v, theme)\n }\n if (transpose) {\n axes <- list(\n x = list(\n top = lapply(axes$x, `[[`, \"top\"),\n bottom = lapply(axes$x, `[[`, \"bottom\")\n ),\n y = list(\n left = lapply(axes$y, `[[`, \"left\"),\n right = lapply(axes$y, `[[`, \"right\")\n )\n )\n }\n axes\n}\n#' Render panel strips\n#'\n#' All positions are rendered and it is up to the facet to decide which to use\n#'\n#' @param x,y A data.frame with a column for each variable and a row for each\n#' combination to draw\n#' @param labeller A labeller function\n#' @param theme a `theme` object\n#'\n#' @return A list with an \"x\" and a \"y\" element, each containing a \"top\" and\n#' \"bottom\" or \"left\" and \"right\" element respectively. These contains a list of\n#' rendered strips as gtables.\n#'\n#' @keywords internal\n#' @export\nrender_strips <- function(x = NULL, y = NULL, labeller, theme) {\n list(\n x = build_strip(x, labeller, theme, TRUE),\n y = build_strip(y, labeller, theme, FALSE)\n )\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/facet-.r"},{"filename":"ggplot2/R/facet-grid-.r","content":"#' @include facet-.r\nNULL\n\n#' Lay out panels in a grid\n#'\n#' `facet_grid()` forms a matrix of panels defined by row and column\n#' faceting variables. It is most useful when you have two discrete\n#' variables, and all combinations of the variables exist in the data.\n#'\n#' @param rows,cols A set of variables or expressions quoted by\n#' [vars()] and defining faceting groups on the rows or columns\n#' dimension. The variables can be named (the names are passed to\n#' `labeller`).\n#'\n#' For compatibility with the classic interface, `rows` can also be\n#' a formula with the rows (of the tabular display) on the LHS and\n#' the columns (of the tabular display) on the RHS; the dot in the\n#' formula is used to indicate there should be no faceting on this\n#' dimension (either row or column).\n#' @param scales Are scales shared across all facets (the default,\n#' `\"fixed\"`), or do they vary across rows (`\"free_x\"`),\n#' columns (`\"free_y\"`), or both rows and columns (`\"free\"`)?\n#' @param space If `\"fixed\"`, the default, all panels have the same size.\n#' If `\"free_y\"` their height will be proportional to the length of the\n#' y scale; if `\"free_x\"` their width will be proportional to the\n#' length of the x scale; or if `\"free\"` both height and width will\n#' vary. This setting has no effect unless the appropriate scales also vary.\n#' @param labeller A function that takes one data frame of labels and\n#' returns a list or data frame of character vectors. Each input\n#' column corresponds to one factor. Thus there will be more than\n#' one with formulae of the type `~cyl + am`. Each output\n#' column gets displayed as one separate line in the strip\n#' label. This function should inherit from the \"labeller\" S3 class\n#' for compatibility with [labeller()]. See\n#' [label_value()] for more details and pointers to other\n#' options.\n#' @param as.table If `TRUE`, the default, the facets are laid out like\n#' a table with highest values at the bottom-right. If `FALSE`, the\n#' facets are laid out like a plot with the highest value at the top-right.\n#' @param switch By default, the labels are displayed on the top and\n#' right of the plot. If `\"x\"`, the top labels will be\n#' displayed to the bottom. If `\"y\"`, the right-hand side\n#' labels will be displayed to the left. Can also be set to\n#' `\"both\"`.\n#' @param shrink If `TRUE`, will shrink scales to fit output of\n#' statistics, not raw data. If `FALSE`, will be range of raw data\n#' before statistical summary.\n#' @param drop If `TRUE`, the default, all factor levels not used in the\n#' data will automatically be dropped. If `FALSE`, all factor levels\n#' will be shown, regardless of whether or not they appear in the data.\n#' @param margins Either a logical value or a character\n#' vector. Margins are additional facets which contain all the data\n#' for each of the possible values of the faceting variables. If\n#' `FALSE`, no additional facets are included (the\n#' default). If `TRUE`, margins are included for all faceting\n#' variables. If specified as a character vector, it is the names of\n#' variables for which margins are to be created.\n#' @param facets This argument is soft-deprecated, please us `rows`\n#' and `cols` instead.\n#' @export\n#' @examples\n#' p <- ggplot(mpg, aes(displ, cty)) + geom_point()\n#'\n#' # Use vars() to supply variables from the dataset:\n#' p + facet_grid(rows = vars(drv))\n#' p + facet_grid(cols = vars(cyl))\n#' p + facet_grid(vars(drv), vars(cyl))\n#'\n#' # The historical formula interface is also available:\n#' \\donttest{\n#' p + facet_grid(. ~ cyl)\n#' p + facet_grid(drv ~ .)\n#' p + facet_grid(drv ~ cyl)\n#' }\n#'\n#' # To change plot order of facet grid,\n#' # change the order of variable levels with factor()\n#'\n#' # If you combine a facetted dataset with a dataset that lacks those\n#' # faceting variables, the data will be repeated across the missing\n#' # combinations:\n#' df <- data.frame(displ = mean(mpg$displ), cty = mean(mpg$cty))\n#' p +\n#' facet_grid(cols = vars(cyl)) +\n#' geom_point(data = df, colour = \"red\", size = 2)\n#'\n#' # Free scales -------------------------------------------------------\n#' # You can also choose whether the scales should be constant\n#' # across all panels (the default), or whether they should be allowed\n#' # to vary\n#' mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +\n#' geom_point()\n#'\n#' mt + facet_grid(. ~ cyl, scales = \"free\")\n#'\n#' # If scales and space are free, then the mapping between position\n#' # and values in the data will be the same across all panels. This\n#' # is particularly useful for categorical axes\n#' ggplot(mpg, aes(drv, model)) +\n#' geom_point() +\n#' facet_grid(manufacturer ~ ., scales = \"free\", space = \"free\") +\n#' theme(strip.text.y = element_text(angle = 0))\n#'\n#' # Margins ----------------------------------------------------------\n#' \\donttest{\n#' # Margins can be specified logically (all yes or all no) or for specific\n#' # variables as (character) variable names\n#' mg <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point()\n#' mg + facet_grid(vs + am ~ gear, margins = TRUE)\n#' mg + facet_grid(vs + am ~ gear, margins = \"am\")\n#' # when margins are made over \"vs\", since the facets for \"am\" vary\n#' # within the values of \"vs\", the marginal facet for \"vs\" is also\n#' # a margin over \"am\".\n#' mg + facet_grid(vs + am ~ gear, margins = \"vs\")\n#' }\nfacet_grid <- function(rows = NULL, cols = NULL, scales = \"fixed\",\n space = \"fixed\", shrink = TRUE,\n labeller = \"label_value\", as.table = TRUE,\n switch = NULL, drop = TRUE, margins = FALSE,\n facets = NULL) {\n # `facets` is soft-deprecated and renamed to `rows`\n if (!is.null(facets)) {\n rows <- facets\n }\n # Should become a warning in a future release\n if (is.logical(cols)) {\n margins <- cols\n cols <- NULL\n }\n\n scales <- match.arg(scales, c(\"fixed\", \"free_x\", \"free_y\", \"free\"))\n free <- list(\n x = any(scales %in% c(\"free_x\", \"free\")),\n y = any(scales %in% c(\"free_y\", \"free\"))\n )\n\n space <- match.arg(space, c(\"fixed\", \"free_x\", \"free_y\", \"free\"))\n space_free <- list(\n x = any(space %in% c(\"free_x\", \"free\")),\n y = any(space %in% c(\"free_y\", \"free\"))\n )\n\n if (!is.null(switch) && !switch %in% c(\"both\", \"x\", \"y\")) {\n stop(\"switch must be either 'both', 'x', or 'y'\", call. = FALSE)\n }\n\n facets_list <- grid_as_facets_list(rows, cols)\n n <- length(facets_list)\n if (n > 2L) {\n stop(\"A grid facet specification can't have more than two dimensions\", call. = FALSE)\n }\n if (n == 1L) {\n rows <- quos()\n cols <- facets_list[[1]]\n } else {\n rows <- facets_list[[1]]\n cols <- facets_list[[2]]\n }\n\n # Check for deprecated labellers\n labeller <- check_labeller(labeller)\n\n ggproto(NULL, FacetGrid,\n shrink = shrink,\n params = list(rows = rows, cols = cols, margins = margins,\n free = free, space_free = space_free, labeller = labeller,\n as.table = as.table, switch = switch, drop = drop)\n )\n}\ngrid_as_facets_list <- function(rows, cols) {\n is_rows_vars <- is.null(rows) || rlang::is_quosures(rows)\n if (!is_rows_vars) {\n if (!is.null(cols)) {\n stop(\"`rows` must be `NULL` or a `vars()` list if `cols` is a `vars()` list\", call. = FALSE)\n }\n return(as_facets_list(rows))\n }\n\n is_cols_vars <- is.null(cols) || rlang::is_quosures(cols)\n if (!is_cols_vars) {\n stop(\"`cols` must be `NULL` or a `vars()` specification\", call. = FALSE)\n }\n\n if (is.null(rows)) {\n rows <- quos()\n } else {\n rows <- rlang::quos_auto_name(rows)\n }\n if (is.null(cols)) {\n cols <- quos()\n } else {\n cols <- rlang::quos_auto_name(cols)\n }\n\n list(rows, cols)\n}\n\n#' @rdname ggplot2-ggproto\n#' @format NULL\n#' @usage NULL\n#' @export\nFacetGrid <- ggproto(\"FacetGrid\", Facet,\n shrink = TRUE,\n\n compute_layout = function(data, params) {\n rows <- params$rows\n cols <- params$cols\n\n dups <- intersect(names(rows), names(cols))\n if (length(dups) > 0) {\n stop(\n \"Faceting variables can only appear in row or cols, not both.\\n\",\n \"Problems: \", paste0(dups, collapse = \"'\"),\n call. = FALSE\n )\n }\n\n base_rows <- combine_vars(data, params$plot_env, rows, drop = params$drop)\n if (!params$as.table) {\n rev_order <- function(x) factor(x, levels = rev(ulevels(x)))\n base_rows[] <- lapply(base_rows, rev_order)\n }\n base_cols <- combine_vars(data, params$plot_env, cols, drop = params$drop)\n base <- df.grid(base_rows, base_cols)\n\n # Add margins\n base <- reshape2::add_margins(base, list(names(rows), names(cols)), params$margins)\n # Work around bug in reshape2\n base <- unique(base)\n\n # Create panel info dataset\n panel <- id(base, drop = TRUE)\n panel <- factor(panel, levels = seq_len(attr(panel, \"n\")))\n\n rows <- if (!length(names(rows))) rep(1L, length(panel)) else id(base[names(rows)], drop = TRUE)\n cols <- if (!length(names(cols))) rep(1L, length(panel)) else id(base[names(cols)], drop = TRUE)\n\n panels <- new_data_frame(c(list(PANEL = panel, ROW = rows, COL = cols), base))\n panels <- panels[order(panels$PANEL), , drop = FALSE]\n rownames(panels) <- NULL\n\n panels$SCALE_X <- if (params$free$x) panels$COL else 1L\n panels$SCALE_Y <- if (params$free$y) panels$ROW else 1L\n\n panels\n },\n map_data = function(data, layout, params) {\n if (empty(data)) {\n return(cbind(data, PANEL = integer(0)))\n }\n\n rows <- params$rows\n cols <- params$cols\n vars <- c(names(rows), names(cols))\n\n # Compute faceting values and add margins\n margin_vars <- list(intersect(names(rows), names(data)),\n intersect(names(cols), names(data)))\n data <- reshape2::add_margins(data, margin_vars, params$margins)\n\n facet_vals <- eval_facets(c(rows, cols), data, params$plot_env)\n\n # If any faceting variables are missing, add them in by\n # duplicating the data\n missing_facets <- setdiff(vars, names(facet_vals))\n if (length(missing_facets) > 0) {\n to_add <- unique(layout[missing_facets])\n\n data_rep <- rep.int(1:nrow(data), nrow(to_add))\n facet_rep <- rep(1:nrow(to_add), each = nrow(data))\n\n data <- unrowname(data[data_rep, , drop = FALSE])\n facet_vals <- unrowname(cbind(\n facet_vals[data_rep, , drop = FALSE],\n to_add[facet_rep, , drop = FALSE]))\n }\n\n # Add PANEL variable\n if (nrow(facet_vals) == 0) {\n # Special case of no faceting\n data$PANEL <- NO_PANEL\n } else {\n facet_vals[] <- lapply(facet_vals[], as.factor)\n facet_vals[] <- lapply(facet_vals[], addNA, ifany = TRUE)\n\n keys <- join_keys(facet_vals, layout, by = vars)\n\n data$PANEL <- layout$PANEL[match(keys$x, keys$y)]\n }\n data\n },\n draw_panels = function(panels, layout, x_scales, y_scales, ranges, coord, data, theme, params) {\n if ((params$free$x || params$free$y) && !coord$is_free()) {\n stop(snake_class(coord), \" doesn't support free scales\", call. = FALSE)\n }\n\n cols <- which(layout$ROW == 1)\n rows <- which(layout$COL == 1)\n axes <- render_axes(ranges[cols], ranges[rows], coord, theme, transpose = TRUE)\n\n col_vars <- unique(layout[names(params$cols)])\n row_vars <- unique(layout[names(params$rows)])\n # Adding labels metadata, useful for labellers\n attr(col_vars, \"type\") <- \"cols\"\n attr(col_vars, \"facet\") <- \"grid\"\n attr(row_vars, \"type\") <- \"rows\"\n attr(row_vars, \"facet\") <- \"grid\"\n strips <- render_strips(col_vars, row_vars, params$labeller, theme)\n\n aspect_ratio <- theme$aspect.ratio\n if (is.null(aspect_ratio) && !params$free$x && !params$free$y) {\n aspect_ratio <- coord$aspect(ranges[[1]])\n }\n if (is.null(aspect_ratio)) {\n aspect_ratio <- 1\n respect <- FALSE\n } else {\n respect <- TRUE\n }\n ncol <- max(layout$COL)\n nrow <- max(layout$ROW)\n panel_table <- matrix(panels, nrow = nrow, ncol = ncol, byrow = TRUE)\n\n # @kohske\n # Now size of each panel is calculated using PANEL$ranges, which is given by\n # coord_train called by train_range.\n # So here, \"scale\" need not to be referred.\n #\n # In general, panel has all information for building facet.\n if (params$space_free$x) {\n ps <- layout$PANEL[layout$ROW == 1]\n widths <- vapply(ps, function(i) diff(ranges[[i]]$x.range), numeric(1))\n panel_widths <- unit(widths, \"null\")\n } else {\n panel_widths <- rep(unit(1, \"null\"), ncol)\n }\n if (params$space_free$y) {\n ps <- layout$PANEL[layout$COL == 1]\n heights <- vapply(ps, function(i) diff(ranges[[i]]$y.range), numeric(1))\n panel_heights <- unit(heights, \"null\")\n } else {\n panel_heights <- rep(unit(1 * aspect_ratio, \"null\"), nrow)\n }\n\n panel_table <- gtable_matrix(\"layout\", panel_table,\n panel_widths, panel_heights, respect = respect, clip = coord$clip, z = matrix(1, ncol = ncol, nrow = nrow))\n panel_table$layout$name <- paste0('panel-', rep(seq_len(ncol), nrow), '-', rep(seq_len(nrow), each = ncol))\n\n panel_table <- gtable_add_col_space(panel_table,\n theme$panel.spacing.x %||% theme$panel.spacing)\n panel_table <- gtable_add_row_space(panel_table,\n theme$panel.spacing.y %||% theme$panel.spacing)\n\n # Add axes\n panel_table <- gtable_add_rows(panel_table, max_height(axes$x$top), 0)\n panel_table <- gtable_add_rows(panel_table, max_height(axes$x$bottom), -1)\n panel_table <- gtable_add_cols(panel_table, max_width(axes$y$left), 0)\n panel_table <- gtable_add_cols(panel_table, max_width(axes$y$right), -1)\n panel_pos_col <- panel_cols(panel_table)\n panel_pos_rows <- panel_rows(panel_table)\n\n panel_table <- gtable_add_grob(panel_table, axes$x$top, 1, panel_pos_col$l, clip = \"off\", name = paste0(\"axis-t-\", seq_along(axes$x$top)), z = 3)\n panel_table <- gtable_add_grob(panel_table, axes$x$bottom, -1, panel_pos_col$l, clip = \"off\", name = paste0(\"axis-b-\", seq_along(axes$x$bottom)), z = 3)\n panel_table <- gtable_add_grob(panel_table, axes$y$left, panel_pos_rows$t, 1, clip = \"off\", name = paste0(\"axis-l-\", seq_along(axes$y$left)), z = 3)\n panel_table <- gtable_add_grob(panel_table, axes$y$right, panel_pos_rows$t, -1, clip = \"off\", name = paste0(\"axis-r-\", seq_along(axes$y$right)), z= 3)\n\n # Add strips\n switch_x <- !is.null(params$switch) && params$switch %in% c(\"both\", \"x\")\n switch_y <- !is.null(params$switch) && params$switch %in% c(\"both\", \"y\")\n inside_x <- (theme$strip.placement.x %||% theme$strip.placement %||% \"inside\") == \"inside\"\n inside_y <- (theme$strip.placement.y %||% theme$strip.placement %||% \"inside\") == \"inside\"\n strip_padding <- convertUnit(theme$strip.switch.pad.grid, \"cm\")\n panel_pos_col <- panel_cols(panel_table)\n if (switch_x) {\n if (!is.null(strips$x$bottom)) {\n if (inside_x) {\n panel_table <- gtable_add_rows(panel_table, max_height(strips$x$bottom), -2)\n panel_table <- gtable_add_grob(panel_table, strips$x$bottom, -2, panel_pos_col$l, clip = \"on\", name = paste0(\"strip-b-\", seq_along(strips$x$bottom)), z = 2)\n } else {\n panel_table <- gtable_add_rows(panel_table, strip_padding, -1)\n panel_table <- gtable_add_rows(panel_table, max_height(strips$x$bottom), -1)\n panel_table <- gtable_add_grob(panel_table, strips$x$bottom, -1, panel_pos_col$l, clip = \"on\", name = paste0(\"strip-b-\", seq_along(strips$x$bottom)), z = 2)\n }\n }\n } else {\n if (!is.null(strips$x$top)) {\n if (inside_x) {\n panel_table <- gtable_add_rows(panel_table, max_height(strips$x$top), 1)\n panel_table <- gtable_add_grob(panel_table, strips$x$top, 2, panel_pos_col$l, clip = \"on\", name = paste0(\"strip-t-\", seq_along(strips$x$top)), z = 2)\n } else {\n panel_table <- gtable_add_rows(panel_table, strip_padding, 0)\n panel_table <- gtable_add_rows(panel_table, max_height(strips$x$top), 0)\n panel_table <- gtable_add_grob(panel_table, strips$x$top, 1, panel_pos_col$l, clip = \"on\", name = paste0(\"strip-t-\", seq_along(strips$x$top)), z = 2)\n }\n }\n }\n panel_pos_rows <- panel_rows(panel_table)\n if (switch_y) {\n if (!is.null(strips$y$left)) {\n if (inside_y) {\n panel_table <- gtable_add_cols(panel_table, max_width(strips$y$left), 1)\n panel_table <- gtable_add_grob(panel_table, strips$y$left, panel_pos_rows$t, 2, clip = \"on\", name = paste0(\"strip-l-\", seq_along(strips$y$left)), z = 2)\n } else {\n panel_table <- gtable_add_cols(panel_table, strip_padding, 0)\n panel_table <- gtable_add_cols(panel_table, max_width(strips$y$left), 0)\n panel_table <- gtable_add_grob(panel_table, strips$y$left, panel_pos_rows$t, 1, clip = \"on\", name = paste0(\"strip-l-\", seq_along(strips$y$left)), z = 2)\n }\n }\n } else {\n if (!is.null(strips$y$right)) {\n if (inside_y) {\n panel_table <- gtable_add_cols(panel_table, max_width(strips$y$right), -2)\n panel_table <- gtable_add_grob(panel_table, strips$y$right, panel_pos_rows$t, -2, clip = \"on\", name = paste0(\"strip-r-\", seq_along(strips$y$right)), z = 2)\n } else {\n panel_table <- gtable_add_cols(panel_table, strip_padding, -1)\n panel_table <- gtable_add_cols(panel_table, max_width(strips$y$right), -1)\n panel_table <- gtable_add_grob(panel_table, strips$y$right, panel_pos_rows$t, -1, clip = \"on\", name = paste0(\"strip-r-\", seq_along(strips$y$right)), z = 2)\n }\n }\n }\n panel_table\n },\n vars = function(self) {\n names(c(self$params$rows, self$params$cols))\n }\n)\n\n# Helpers -----------------------------------------------------------------\n\nulevels <- function(x) {\n if (is.factor(x)) {\n x <- addNA(x, TRUE)\n factor(levels(x), levels(x), exclude = NULL)\n } else {\n sort(unique(x))\n }\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/facet-grid-.r"},{"filename":"grid/R/primitives.R","content":"# File src/library/grid/R/primitives.R\n# Part of the R package, https://www.R-project.org\n#\n# Copyright (C) 1995-2018 The R Core Team\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# A copy of the GNU General Public License is available at\n# https://www.R-project.org/Licenses/\n\n\n# Function that creates a description of an arrow head\n# to add to a line\narrow <- function(angle=30, length=unit(0.25, \"inches\"),\n ends=\"last\", type=\"open\") {\n angle <- as.numeric(angle)\n if (!is.unit(length))\n stop(\"'length' must be a 'unit' object\")\n ends <- as.integer(match(ends, c(\"first\", \"last\", \"both\")))\n type <- as.integer(match(type, c(\"open\", \"closed\")))\n if (anyNA(ends) || anyNA(type) ||\n length(ends) == 0 || length(type) == 0)\n stop(\"invalid 'ends' or 'type' argument\")\n a <- list(angle=angle, length=length,\n ends=ends, type=type)\n class(a) <- \"arrow\"\n a\n}\n\nlength.arrow <- function(x) {\n max(do.call(\"max\", lapply(x, length)),\n length(x$length))\n}\n\nrep.arrow <- function(x, ...) {\n maxn <- length(x)\n newa <- list(angle=rep(x$angle, length.out=maxn),\n length=rep(x$length, length.out=maxn),\n ends=rep(x$ends, length.out=maxn),\n type=rep(x$type, length.out=maxn))\n newa <- lapply(newa, rep, ...)\n class(newa) <- \"arrow\"\n newa\n}\n\n# Method for subsetting \"arrow\" objects\n`[.arrow` <- function(x, index, ...) {\n if (length(index) == 0)\n return(NULL)\n maxn <- length(x)\n newa <- list(angle=rep(x$angle, length.out=maxn),\n length=rep(x$length, length.out=maxn),\n ends=rep(x$ends, length.out=maxn),\n type=rep(x$type, length.out=maxn))\n newa <- lapply(X = newa, FUN = \"[\", index, ...)\n class(newa) <- \"arrow\"\n newa\n}\n\nstr.arrow <- function(object, ...) {\n o <- oldClass(object)\n oldClass(object) <- setdiff(o, \"arrow\")\n str(object)\n}\n\n######################################\n# move-to and line-to primitives\n######################################\nvalidDetails.move.to <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y))\n stop(\"'x' and 'y' must be units\")\n # Make sure that x and y are of length 1\n if (length(x$x) > 1 | length(x$y) > 1)\n stop(\"'x' and 'y' must have length 1\")\n x\n}\n\ndrawDetails.move.to <- function(x, recording=TRUE) {\n grid.Call.graphics(C_moveTo, x$x, x$y)\n}\n\nmoveToGrob <- function(x=0, y=0,\n default.units=\"npc\",\n name=NULL, vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y,\n name=name, vp=vp, cl=\"move.to\")\n}\n\ngrid.move.to <- function(x=0, y=0,\n default.units=\"npc\",\n name=NULL, draw=TRUE, vp=NULL) {\n mtg <- moveToGrob(x=x, y=y, default.units=default.units,\n name=name, vp=vp)\n if (draw)\n grid.draw(mtg)\n invisible(mtg)\n}\n\nvalidDetails.line.to <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y))\n stop(\"'x' and 'y' must be units\")\n # Make sure that x and y are of length 1\n if (length(x$x) > 1 | length(x$y) > 1)\n stop(\"'x' and 'y' must have length 1\")\n if (!(is.null(x$arrow) || inherits(x$arrow, \"arrow\")))\n stop(\"invalid 'arrow' argument\")\n x\n}\n\ndrawDetails.line.to <- function(x, recording=TRUE) {\n grid.Call.graphics(C_lineTo, x$x, x$y, x$arrow)\n}\n\nlineToGrob <- function(x=1, y=1,\n default.units=\"npc\",\n arrow=NULL,\n name=NULL, gp=gpar(), vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y, arrow=arrow,\n name=name, gp=gp, vp=vp, cl=\"line.to\")\n}\n\ngrid.line.to <- function(x=1, y=1,\n default.units=\"npc\",\n arrow=NULL,\n name=NULL, gp=gpar(), draw=TRUE, vp=NULL) {\n ltg <- lineToGrob(x=x, y=y, default.units=default.units, arrow=arrow,\n name=name, gp=gp, vp=vp)\n if (draw)\n grid.draw(ltg)\n invisible(ltg)\n}\n\n######################################\n# LINES primitive\n######################################\nvalidDetails.lines <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y))\n stop(\"'x' and 'y' must be units\")\n if (!(is.null(x$arrow) || inherits(x$arrow, \"arrow\")))\n stop(\"invalid 'arrow' argument\")\n x\n}\n\ndrawDetails.lines <- function(x, recording=TRUE) {\n grid.Call.graphics(C_lines, x$x, x$y,\n list(as.integer(1L:max(length(x$x), length(x$y)))),\n x$arrow)\n}\n\nxDetails.lines <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.lines <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.lines <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.lines <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\nlinesGrob <- function(x=unit(c(0, 1), \"npc\"),\n y=unit(c(0, 1), \"npc\"),\n default.units=\"npc\",\n arrow=NULL,\n name=NULL, gp=gpar(), vp=NULL) {\n # Allow user to specify unitless vector; add default units\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y,\n arrow=arrow, name=name, gp=gp, vp=vp, cl=\"lines\")\n}\n\ngrid.lines <- function(x=unit(c(0, 1), \"npc\"),\n y=unit(c(0, 1), \"npc\"),\n default.units=\"npc\",\n arrow=NULL,\n name=NULL, gp=gpar(), draw=TRUE, vp=NULL) {\n lg <- linesGrob(x=x, y=y,\n default.units=default.units, arrow=arrow,\n name=name, gp=gp, vp=vp)\n if (draw)\n grid.draw(lg)\n invisible(lg)\n}\n\n######################################\n# POLYLINES primitive\n######################################\n# Very similar to LINES primitive, but allows\n# multiple polylines via 'id' and 'id.lengths' args\n# as per POLYGON primitive\nvalidDetails.polyline <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y))\n stop(\"'x' and 'y' must be units\")\n if (!is.null(x$id) && !is.null(x$id.lengths))\n stop(\"it is invalid to specify both 'id' and 'id.lengths'\")\n if (length(x$x) != length(x$y))\n stop(\"'x' and 'y' must be same length\")\n if (!is.null(x$id) && (length(x$id) != length(x$x)))\n stop(\"'x' and 'y' and 'id' must all be same length\")\n if (!is.null(x$id))\n x$id <- as.integer(x$id)\n if (!is.null(x$id.lengths) && (sum(x$id.lengths) != length(x$x)))\n stop(\"'x' and 'y' and 'id.lengths' must specify same overall length\")\n if (!is.null(x$id.lengths))\n x$id.lengths <- as.integer(x$id.lengths)\n if (!(is.null(x$arrow) || inherits(x$arrow, \"arrow\")))\n stop(\"invalid 'arrow' argument\")\n x\n}\n\ndrawDetails.polyline <- function(x, recording=TRUE) {\n if (is.null(x$id) && is.null(x$id.lengths))\n grid.Call.graphics(C_lines, x$x, x$y,\n list(as.integer(seq_along(x$x))),\n x$arrow)\n else {\n if (is.null(x$id)) {\n n <- length(x$id.lengths)\n id <- rep(1L:n, x$id.lengths)\n } else {\n n <- length(unique(x$id))\n id <- x$id\n }\n index <- split(as.integer(seq_along(x$x)), id)\n grid.Call.graphics(C_lines, x$x, x$y, index, x$arrow)\n }\n}\n\nxDetails.polyline <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.polyline <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.polyline <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.polyline <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\npolylineGrob <- function(x=unit(c(0, 1), \"npc\"),\n y=unit(c(0, 1), \"npc\"),\n id=NULL, id.lengths=NULL,\n default.units=\"npc\",\n arrow=NULL,\n name=NULL, gp=gpar(), vp=NULL) {\n # Allow user to specify unitless vector; add default units\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y, id=id, id.lengths=id.lengths,\n arrow=arrow, name=name, gp=gp, vp=vp, cl=\"polyline\")\n}\n\ngrid.polyline <- function(...) {\n grid.draw(polylineGrob(...))\n}\n\n######################################\n# SEGMENTS primitive\n######################################\nvalidDetails.segments <- function(x) {\n if (!is.unit(x$x0) || !is.unit(x$x1) ||\n !is.unit(x$y0) || !is.unit(x$y1))\n stop(\"'x0', 'y0', 'x1', and 'y1' must be units\")\n if (!(is.null(x$arrow) || inherits(x$arrow, \"arrow\")))\n stop(\"invalid 'arrow' argument\")\n x\n}\n\ndrawDetails.segments <- function(x, recording=TRUE) {\n grid.Call.graphics(C_segments, x$x0, x$y0, x$x1, x$y1, x$arrow)\n}\n\nsegmentBounds <- function(x, theta) {\n n <- max(length(x$x0), length(x$x1),\n length(x$y0), length(x$y1))\n x0 <- rep(x$x0, length.out=n)\n x1 <- rep(x$x1, length.out=n)\n y0 <- rep(x$y0, length.out=n)\n y1 <- rep(x$y1, length.out=n)\n grid.Call(C_locnBounds, unit.c(x0, x1), unit.c(y0, y1), theta)\n}\n\nxDetails.segments <- function(x, theta) {\n bounds <- segmentBounds(x, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.segments <- function(x, theta) {\n bounds <- segmentBounds(x, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.segments <- function(x) {\n bounds <- segmentBounds(x, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.segments <- function(x) {\n bounds <- segmentBounds(x, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\nsegmentsGrob <- function(x0=unit(0, \"npc\"), y0=unit(0, \"npc\"),\n x1=unit(1, \"npc\"), y1=unit(1, \"npc\"),\n default.units=\"npc\",\n arrow=NULL,\n name=NULL, gp=gpar(), vp=NULL) {\n # Allow user to specify unitless vector; add default units\n if (!is.unit(x0))\n x0 <- unit(x0, default.units)\n if (!is.unit(x1))\n x1 <- unit(x1, default.units)\n if (!is.unit(y0))\n y0 <- unit(y0, default.units)\n if (!is.unit(y1))\n y1 <- unit(y1, default.units)\n grob(x0=x0, y0=y0, x1=x1, y1=y1, arrow=arrow, name=name, gp=gp, vp=vp,\n cl=\"segments\")\n}\n\ngrid.segments <- function(x0=unit(0, \"npc\"), y0=unit(0, \"npc\"),\n x1=unit(1, \"npc\"), y1=unit(1, \"npc\"),\n default.units=\"npc\",\n arrow=NULL,\n name=NULL, gp=gpar(), draw=TRUE, vp=NULL) {\n sg <- segmentsGrob(x0=x0, y0=y0, x1=x1, y1=y1,\n default.units=default.units,\n arrow=arrow,\n name=name, gp=gp, vp=vp)\n if (draw)\n grid.draw(sg)\n invisible(sg)\n}\n\n######################################\n# ARROWS primitive\n######################################\n\n# Superceded by 'arrow' arg to line-drawing primitives\n# which contains an \"arrow\" object\nvalidDetails.arrows <- function(x) {\n if ((!is.null(x$x) && !is.unit(x$x)) ||\n (!is.null(x$y) && !is.unit(x$y)))\n stop(\"'x' and 'y' must be units or NULL\")\n if (!is.unit(x$length))\n stop(\"'length' must be a 'unit' object\")\n x$ends <- as.integer(match(x$ends, c(\"first\", \"last\", \"both\")))\n x$type <- as.integer(match(x$type, c(\"open\", \"closed\")))\n if (any(is.na(x$ends)) || any(is.na(x$type)))\n stop(\"invalid 'ends' or 'type' argument\")\n x\n}\n\ndrawDetails.arrows <- function(x, recording=TRUE) {\n if (is.null(x$x)) { # y should be null too\n if (!is.null(x$y))\n stop(\"corrupt 'arrows' object\")\n lineThing <- getGrob(x, childNames(x))\n # This could be done via method dispatch, but that really\n # seemed like overkill\n # OTOH, this is NOT user-extensible\n # AND the code for, e.g., \"lines\" is not located with\n # the other grid.lines code so changes there are unlikely\n # to propagate to here (e.g., add an id arg to grid.lines?\n if (inherits(lineThing, \"line.to\")) {\n x1 <- NULL\n x2 <- lineThing$x\n y1 <- NULL\n y2 <- lineThing$y\n xnm1 <- NULL\n xn <- lineThing$x\n ynm1 <- NULL\n yn <- lineThing$y\n } else if (inherits(lineThing, \"lines\")) {\n # x or y may be recycled\n n <- max(length(lineThing$x),\n length(lineThing$y))\n xx <- rep(lineThing$x, length.out=2)\n x1 <- xx[1L]\n x2 <- xx[2L]\n xx <- rep(lineThing$x, length.out=n)\n xnm1 <- xx[n - 1]\n xn <- xx[n]\n yy <- rep(lineThing$y, length.out=2)\n y1 <- yy[1L]\n y2 <- yy[2L]\n yy <- rep(lineThing$y, length.out=n)\n ynm1 <- yy[n - 1]\n yn <- yy[n]\n } else { # inherits(lineThing, \"segments\")\n x1 <- lineThing$x0\n x2 <- lineThing$x1\n xnm1 <- lineThing$x0\n xn <- lineThing$x1\n y1 <- lineThing$y0\n y2 <- lineThing$y1\n ynm1 <- lineThing$y0\n yn <- lineThing$y1\n }\n } else {\n # x or y may be recycled\n n <- max(length(x$x), length(x$y))\n xx <- rep(x$x, length.out=2)\n x1 <- xx[1L]\n x2 <- xx[2L]\n xx <- rep(x$x, length.out=n)\n xnm1 <- xx[n - 1]\n xn <- xx[n]\n yy <- rep(x$y, length.out=2)\n y1 <- yy[1L]\n y2 <- yy[2L]\n yy <- rep(x$y, length.out=n)\n ynm1 <- yy[n - 1]\n yn <- yy[n]\n grid.Call.graphics(C_lines, x$x, x$y,\n list(as.integer(1L:n)),\n NULL)\n }\n grid.Call.graphics(C_arrows, x1, x2, xnm1, xn, y1, y2, ynm1, yn,\n x$angle, x$length, x$ends, x$type)\n}\n\nwidthDetails.arrows <- function(x) {\n if (is.null(x$x)) { # y should be null too\n if (!is.null(x$y))\n stop(\"corrupt 'arrows' object\")\n lineThing <- getGrob(x, childNames(x))\n widthDetails(lineThing)\n } else {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n }\n}\n\nheightDetails.arrows <- function(x) {\n if (is.null(x$x)) { # y should be null too\n if (!is.null(x$y))\n stop(\"corrupt 'arrows' object\")\n lineThing <- getGrob(x, childNames(x))\n heightDetails(lineThing)\n } else {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n }\n}\n\narrowsGrob <- function(x=c(0.25, 0.75), y=0.5,\n default.units=\"npc\",\n grob=NULL,\n angle=30, length=unit(0.25, \"inches\"),\n ends=\"last\", type=\"open\",\n name=NULL, gp=gpar(), vp=NULL) {\n .Defunct(msg=\"'arrowsGrob' is defunct; use 'arrow' arguments to line drawing functions\")\n}\n\ngrid.arrows <- function(x=c(0.25, 0.75), y=0.5,\n default.units=\"npc\",\n grob=NULL,\n angle=30, length=unit(0.25, \"inches\"),\n ends=\"last\", type=\"open\",\n name=NULL, gp=gpar(), draw=TRUE, vp=NULL) {\n .Defunct(msg=\"'grid.arrows' is defunct; use 'arrow' arguments to line drawing functions\")\n}\n\n######################################\n# POLYGON primitive\n######################################\n\nvalidDetails.polygon <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y))\n stop(\"'x' and 'y' must be units\")\n if (!is.null(x$id) && !is.null(x$id.lengths))\n stop(\"it is invalid to specify both 'id' and 'id.lengths'\")\n if (length(x$x) != length(x$y))\n stop(\"'x' and 'y' must be same length\")\n if (!is.null(x$id) && (length(x$id) != length(x$x)))\n stop(\"'x' and 'y' and 'id' must all be same length\")\n if (!is.null(x$id))\n x$id <- as.integer(x$id)\n if (!is.null(x$id.lengths) && (sum(x$id.lengths) != length(x$x)))\n stop(\"'x' and 'y' and 'id.lengths' must specify same overall length\")\n if (!is.null(x$id.lengths))\n x$id.lengths <- as.integer(x$id.lengths)\n x\n}\n\ndrawDetails.polygon <- function(x, recording=TRUE) {\n if (is.null(x$id) && is.null(x$id.lengths))\n grid.Call.graphics(C_polygon, x$x, x$y,\n list(as.integer(seq_along(x$x))))\n else {\n if (is.null(x$id)) {\n n <- length(x$id.lengths)\n id <- rep(1L:n, x$id.lengths)\n } else {\n n <- length(unique(x$id))\n id <- x$id\n }\n index <- split(as.integer(seq_along(x$x)), id)\n grid.Call.graphics(C_polygon, x$x, x$y, index)\n }\n}\n\nxDetails.polygon <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.polygon <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.polygon <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.polygon <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\npolygonGrob <- function(x=c(0, 0.5, 1, 0.5), y=c(0.5, 1, 0.5, 0),\n id=NULL, id.lengths=NULL,\n default.units=\"npc\",\n name=NULL, gp=gpar(), vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y, id=id,\n id.lengths=id.lengths,\n name=name, gp=gp, vp=vp, cl=\"polygon\")\n}\n\ngrid.polygon <- function(x=c(0, 0.5, 1, 0.5), y=c(0.5, 1, 0.5, 0),\n id=NULL, id.lengths=NULL,\n default.units=\"npc\",\n name=NULL, gp=gpar(), draw=TRUE, vp=NULL) {\n pg <- polygonGrob(x=x, y=y, id=id, id.lengths=id.lengths,\n default.units=default.units,\n name=name, gp=gp, vp=vp)\n if (draw)\n grid.draw(pg)\n invisible(pg)\n}\n\n######################################\n# PATH primitive\n######################################\n\nvalidDetails.pathgrob <- function(x) {\n if (!is.unit(x$x) || !is.unit(x$y))\n stop(\"'x' and 'y' must be units\")\n if (!is.null(x$id) && !is.null(x$id.lengths))\n stop(\"it is invalid to specify both 'id' and 'id.lengths'\")\n if (length(x$x) != length(x$y))\n stop(\"'x' and 'y' must be same length\")\n if (!is.null(x$id) && (length(x$id) != length(x$x)))\n stop(\"'x' and 'y' and 'id' must all be same length\")\n if (!is.null(x$id))\n x$id <- as.integer(x$id)\n if (!is.null(x$pathId))\n \tx$pathId <- as.integer(x$pathId)\n if (!is.null(x$id.lengths) && (sum(x$id.lengths) != length(x$x)))\n stop(\"'x' and 'y' and 'id.lengths' must specify same overall length\")\n if (!is.null(x$pathId.lengths) && (sum(x$pathId.lengths) != length(x$x)))\n \tstop(\"'x' and 'y' and 'pathId.lengths' must specify same overall length\")\n if (!is.null(x$id.lengths))\n x$id.lengths <- as.integer(x$id.lengths)\n if (!is.null(x$pathId.lengths))\n \tx$pathId.lengths <- as.integer(x$pathId.lengths)\n x\n}\n\nxDetails.pathgrob <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.pathgrob <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.pathgrob <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.pathgrob <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\n\ndrawDetails.pathgrob <- function(x, recording=TRUE) {\n hasMultiple <- !(is.null(x$pathId) && is.null(x$pathId.lengths))\n if (hasMultiple) {\n if (is.null(x$pathId)) {\n n <- length(x$pathId.lengths)\n pathId <- rep(1L:n, x$pathId.lengths)\n } else {\n pathId <- x$pathId\n }\n }\n if (is.null(x$id) && is.null(x$id.lengths)) {\n if (hasMultiple) {\n grid.Call.graphics(C_polygon, x$x, x$y,\n split(as.integer(seq_along(x$x)), pathId))\n } else {\n grid.Call.graphics(C_polygon, x$x, x$y,\n list(as.integer(seq_along(x$x))))\n }\n } else {\n if (is.null(x$id)) {\n n <- length(x$id.lengths)\n id <- rep(1L:n, x$id.lengths)\n } else {\n n <- length(unique(x$id))\n id <- x$id\n }\n if (hasMultiple) {\n index <- mapply(split,\n x=split(as.integer(seq_along(x$x)), pathId), \n f=split(id, pathId),\n SIMPLIFY = FALSE, USE.NAMES = FALSE)\n } else {\n index <- list(split(as.integer(seq_along(x$x)), id))\n }\n grid.Call.graphics(C_path, x$x, x$y, index,\n switch(x$rule, winding=1L, evenodd=0L))\n }\n}\n\npathGrob <- function(x, y,\n id=NULL, id.lengths=NULL,\n pathId=NULL, pathId.lengths=NULL,\n rule=\"winding\",\n default.units=\"npc\",\n name=NULL, gp=gpar(), vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y, id=id, id.lengths=id.lengths,\n pathId=pathId, pathId.lengths=pathId.lengths,\n rule=rule,\n name=name, gp=gp, vp=vp, cl=\"pathgrob\")\n}\n\ngrid.path <- function(...) {\n grid.draw(pathGrob(...))\n}\n\n######################################\n# XSPLINE primitive\n######################################\n\nvalidDetails.xspline <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y))\n stop(\"x and y must be units\")\n if (!is.null(x$id) && !is.null(x$id.lengths))\n stop(\"it is invalid to specify both 'id' and 'id.lengths'\")\n nx <- length(x$x)\n ny <- length(x$y)\n if (nx != ny)\n stop(\"'x' and 'y' must be same length\")\n if (!is.null(x$id) && (length(x$id) != nx))\n stop(\"'x' and 'y' and 'id' must all be same length\")\n if (!is.null(x$id))\n x$id <- as.integer(x$id)\n if (!is.null(x$id.lengths) && (sum(x$id.lengths) != nx))\n stop(\"'x' and 'y' and 'id.lengths' must specify same overall length\")\n if (!is.null(x$id.lengths))\n x$id.lengths <- as.integer(x$id.lengths)\n if (!(is.null(x$arrow) || inherits(x$arrow, \"arrow\")))\n stop(\"invalid 'arrow' argument\")\n if (any(x$shape < -1 | x$shape > 1))\n stop(\"'shape' must be between -1 and 1\")\n x$open <- as.logical(x$open)\n # Force all first and last shapes to be 0 for open xsplines\n if (x$open) {\n x$shape <- rep(x$shape, length.out=nx)\n # Watch out for id or id.length!\n index <- xsplineIndex(x)\n first <- sapply(index, min)\n last <- sapply(index, max)\n x$shape[c(first, last)] <- 0\n }\n x\n}\n\nxsplineIndex <- function(x) {\n if (is.null(x$id) && is.null(x$id.lengths))\n list(as.integer(seq_along(x$x)))\n else {\n if (is.null(x$id)) {\n n <- length(x$id.lengths)\n id <- rep(1L:n, x$id.lengths)\n } else {\n n <- length(unique(x$id))\n id <- x$id\n }\n split(as.integer(seq_along(x$x)), id)\n }\n}\n\ndrawDetails.xspline <- function(x, recording=TRUE) {\n grid.Call.graphics(C_xspline, x$x, x$y, x$shape, x$open, x$arrow,\n x$repEnds, xsplineIndex(x))\n}\n\nxDetails.xspline <- function(x, theta) {\n bounds <- grid.Call(C_xsplineBounds, x$x, x$y, x$shape, x$open, x$arrow,\n x$repEnds, xsplineIndex(x), theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.xspline <- function(x, theta) {\n bounds <- grid.Call(C_xsplineBounds, x$x, x$y, x$shape, x$open, x$arrow,\n x$repEnds, xsplineIndex(x), theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.xspline <- function(x) {\n bounds <- grid.Call(C_xsplineBounds, x$x, x$y, x$shape, x$open, x$arrow,\n x$repEnds, list(as.integer(seq_along(x$x))), 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.xspline <- function(x) {\n bounds <- grid.Call(C_xsplineBounds, x$x, x$y, x$shape, x$open, x$arrow,\n x$repEnds, list(as.integer(seq_along(x$x))), 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\nxsplineGrob <- function(x=c(0, 0.5, 1, 0.5), y=c(0.5, 1, 0.5, 0),\n id=NULL, id.lengths=NULL,\n default.units=\"npc\",\n shape=0, open=TRUE, arrow=NULL, repEnds=TRUE,\n name=NULL, gp=gpar(), vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y, shape=shape, open=open,\n id=id, id.lengths=id.lengths, arrow=arrow, repEnds=repEnds,\n name=name, gp=gp, vp=vp, cl=\"xspline\")\n}\n\ngrid.xspline <- function(...) {\n grid.draw(xsplineGrob(...))\n}\n\nxsplinePoints <- function(x) {\n # Mimic drawGrob() to ensure x$vp and x$gp enforced\n dlon <- grid.Call(C_setDLon, FALSE)\n on.exit(grid.Call(C_setDLon, dlon))\n tempgpar <- grid.Call(C_getGPar)\n on.exit(grid.Call(C_setGPar, tempgpar), add=TRUE)\n preDraw(x)\n # Raw pts in dev coords\n devPoints <- grid.Call(C_xsplinePoints,\n x$x, x$y, x$shape, x$open, x$arrow,\n x$repEnds, xsplineIndex(x), 0)\n postDraw(x)\n # Convert to units in inches\n unitPoints <- lapply(devPoints,\n function(x) {\n names(x) <- c(\"x\", \"y\")\n x$x <- unit(x$x, \"inches\")\n x$y <- unit(x$y, \"inches\")\n x\n })\n if (length(unitPoints) == 1)\n unitPoints <- unitPoints[[1]]\n unitPoints\n}\n\n######################################\n# BEZIER primitive\n######################################\n\n# A bezier grob that works of a (not-100% accurate) approximation\n# using X-splines\n\n# X-Spline approx to Bezier\nMs <- 1/6*rbind(c(1, 4, 1, 0),\n c(-3, 0, 3, 0),\n c(3, -6, 3, 0),\n c(-1, 3, -3, 1))\nMsinv <- solve(Ms)\n# Bezier control matrix\nMb <- rbind(c(1, 0, 0, 0),\n c(-3, 3, 0, 0),\n c(3, -6, 3, 0),\n c(-1, 3, -3, 1))\n\nsplinePoints <- function(xb, yb, idIndex) {\n xs <- unlist(lapply(idIndex,\n function(i) {\n Msinv %*% Mb %*% xb[i]\n }))\n ys <- unlist(lapply(idIndex,\n function(i) {\n Msinv %*% Mb %*% yb[i]\n }))\n list(x=xs, y=ys)\n}\n\nsplinegrob <- function(x) {\n xx <- convertX(x$x, \"inches\", valueOnly=TRUE)\n yy <- convertY(x$y, \"inches\", valueOnly=TRUE)\n sp <- splinePoints(xx, yy, xsplineIndex(x))\n xsplineGrob(sp$x, sp$y, default.units=\"inches\",\n id=x$id, id.lengths=x$id.lengths,\n shape=1, repEnds=FALSE,\n arrow=x$arrow, name=x$name,\n gp=x$gp, vp=x$vp)\n}\n\nvalidDetails.beziergrob <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y))\n stop(\"x and y must be units\")\n if (!is.null(x$id) && !is.null(x$id.lengths))\n stop(\"it is invalid to specify both 'id' and 'id.lengths'\")\n nx <- length(x$x)\n ny <- length(x$y)\n if (nx != ny)\n stop(\"'x' and 'y' must be same length\")\n if (!is.null(x$id) && (length(x$id) != nx))\n stop(\"'x' and 'y' and 'id' must all be same length\")\n if (!is.null(x$id))\n x$id <- as.integer(x$id)\n if (!is.null(x$id.lengths) && (sum(x$id.lengths) != nx))\n stop(\"'x' and 'y' and 'id.lengths' must specify same overall length\")\n if (!is.null(x$id.lengths))\n x$id.lengths <- as.integer(x$id.lengths)\n if (is.null(x$id) && is.null(x$id.lengths)) {\n if (length(x$x) != 4L)\n stop(\"must have exactly 4 control points\")\n } else {\n if (is.null(x$id)) {\n n <- length(x$id.lengths)\n id <- rep(1L:n, x$id.lengths)\n } else {\n id <- x$id\n }\n xper <- split(x$x, id)\n if (any(lengths(xper) != 4L))\n stop(\"must have exactly 4 control points per Bezier curve\")\n }\n if (!(is.null(x$arrow) || inherits(x$arrow, \"arrow\")))\n stop(\"invalid 'arrow' argument\")\n x\n}\n\nmakeContent.beziergrob <- function(x) {\n splinegrob(x)\n}\n\nxDetails.beziergrob <- function(x, theta) {\n xDetails(splinegrob(x), theta)\n}\n\nyDetails.beziergrob <- function(x, theta) {\n yDetails(splinegrob(x), theta)\n}\n\nwidthDetails.beziergrob <- function(x) {\n widthDetails(splinegrob(x))\n}\n\nheightDetails.beziergrob <- function(x) {\n heightDetails(splinegrob(x))\n}\n\nbezierGrob <- function(x=c(0, 0.5, 1, 0.5), y=c(0.5, 1, 0.5, 0),\n id=NULL, id.lengths=NULL,\n default.units=\"npc\", arrow=NULL,\n name=NULL, gp=gpar(), vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y,\n id=id, id.lengths=id.lengths, arrow=arrow,\n name=name, gp=gp, vp=vp, cl=\"beziergrob\")\n}\n\ngrid.bezier <- function(...) {\n grid.draw(bezierGrob(...))\n}\n\nbezierPoints <- function(x) {\n sg <- splinegrob(x)\n # splinegrob() does not make use of x$vp\n sg$vp <- x$vp\n xsplinePoints(sg)\n}\n\n\n######################################\n# CIRCLE primitive\n######################################\n\nvalidDetails.circle <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y) ||\n !is.unit(x$r))\n stop(\"'x', 'y', and 'r' must be units\")\n x\n}\n\ndrawDetails.circle <- function(x, recording=TRUE) {\n grid.Call.graphics(C_circle, x$x, x$y, x$r)\n}\n\nxDetails.circle <- function(x, theta) {\n bounds <- grid.Call(C_circleBounds, x$x, x$y, x$r, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.circle <- function(x, theta) {\n bounds <- grid.Call(C_circleBounds, x$x, x$y, x$r, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.circle <- function(x) {\n bounds <- grid.Call(C_circleBounds, x$x, x$y, x$r, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.circle <- function(x) {\n bounds <- grid.Call(C_circleBounds, x$x, x$y, x$r, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\ncircleGrob <- function(x=0.5, y=0.5, r=0.5,\n default.units=\"npc\",\n name=NULL, gp=gpar(), vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n if (!is.unit(r))\n r <- unit(r, default.units)\n grob(x=x, y=y, r=r, name=name, gp=gp, vp=vp, cl=\"circle\")\n}\n\ngrid.circle <- function(x=0.5, y=0.5, r=0.5,\n default.units=\"npc\",\n name=NULL, gp=gpar(), draw=TRUE, vp=NULL) {\n cg <- circleGrob(x=x, y=y, r=r,\n default.units=default.units,\n name=name, gp=gp, vp=vp)\n if (draw)\n grid.draw(cg)\n invisible(cg)\n}\n\n######################################\n# RECT primitive\n######################################\nvalidDetails.rect <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y) ||\n !is.unit(x$width) ||\n !is.unit(x$height))\n stop(\"'x', 'y', 'width', and 'height' must be units\")\n valid.just(x$just)\n if (!is.null(x$hjust))\n x$hjust <- as.numeric(x$hjust)\n if (!is.null(x$vjust))\n x$vjust <- as.numeric(x$vjust)\n x\n}\n\ndrawDetails.rect <- function(x, recording=TRUE) {\n grid.Call.graphics(C_rect, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust))\n}\n\nxDetails.rect <- function(x, theta) {\n bounds <- grid.Call(C_rectBounds, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.rect <- function(x, theta) {\n bounds <- grid.Call(C_rectBounds, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.rect <- function(x) {\n bounds <- grid.Call(C_rectBounds, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.rect <- function(x) {\n bounds <- grid.Call(C_rectBounds, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\nrectGrob <- function(x=unit(0.5, \"npc\"), y=unit(0.5, \"npc\"),\n width=unit(1, \"npc\"), height=unit(1, \"npc\"),\n just=\"centre\", hjust=NULL, vjust=NULL,\n default.units=\"npc\",\n name=NULL, gp=gpar(), vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n if (!is.unit(width))\n width <- unit(width, default.units)\n if (!is.unit(height))\n height <- unit(height, default.units)\n grob(x=x, y=y, width=width, height=height, just=just,\n hjust=hjust, vjust=vjust,\n name=name, gp=gp, vp=vp, cl=\"rect\")\n}\n\ngrid.rect <- function(x=unit(0.5, \"npc\"), y=unit(0.5, \"npc\"),\n width=unit(1, \"npc\"), height=unit(1, \"npc\"),\n just=\"centre\", hjust=NULL, vjust=NULL,\n default.units=\"npc\",\n name=NULL, gp=gpar(), draw=TRUE, vp=NULL) {\n rg <- rectGrob(x=x, y=y, width=width, height=height, just=just,\n hjust=hjust, vjust=vjust,\n default.units=default.units,\n name=name, gp=gp, vp=vp)\n if (draw)\n grid.draw(rg)\n invisible(rg)\n}\n\n######################################\n# RASTER primitive\n######################################\n\nvalidDetails.rastergrob <- function(x) {\n if (!(is.raster(x$raster) || inherits(x$raster, \"nativeRaster\")))\n x$raster <- as.raster(x$raster)\n if (!is.unit(x$x) ||\n !is.unit(x$y) ||\n (!is.null(x$width) && !is.unit(x$width)) ||\n (!is.null(x$height) && !is.unit(x$height)))\n stop(\"'x', 'y', 'width', and 'height' must be units\")\n valid.just(x$just)\n if (!is.null(x$hjust))\n x$hjust <- as.numeric(x$hjust)\n if (!is.null(x$vjust))\n x$vjust <- as.numeric(x$vjust)\n x\n}\n\nresolveRasterSize <- function(x) {\n if (is.null(x$width)) {\n if (is.null(x$height)) {\n rasterRatio <- dim(x$raster)[1]/dim(x$raster)[2]\n vpWidth <- convertWidth(unit(1, \"npc\"), \"inches\", valueOnly=TRUE)\n vpHeight <- convertHeight(unit(1, \"npc\"), \"inches\", valueOnly=TRUE)\n vpRatio <- vpHeight/vpWidth\n if (rasterRatio > vpRatio) {\n x$height <- unit(vpHeight, \"inches\")\n x$width <- unit(vpHeight*dim(x$raster)[2]/dim(x$raster)[1],\n \"inches\")\n } else {\n x$width <- unit(vpWidth, \"inches\")\n x$height <- unit(vpWidth*dim(x$raster)[1]/dim(x$raster)[2],\n \"inches\")\n }\n } else {\n h <- convertHeight(x$height, \"inches\", valueOnly=TRUE)\n x$width <- unit(h*dim(x$raster)[2]/dim(x$raster)[1],\n \"inches\")\n }\n } else {\n if (is.null(x$height)) {\n w <- convertWidth(x$width, \"inches\", valueOnly=TRUE)\n x$height <- unit(w*dim(x$raster)[1]/dim(x$raster)[2],\n \"inches\")\n }\n }\n x\n}\n\ndrawDetails.rastergrob <- function(x, recording=TRUE) {\n # At this point resolve NULL width/height based on\n # image dimensions\n x <- resolveRasterSize(x)\n if (is.null(x$width)) {\n if (is.null(x$height)) {\n rasterRatio <- dim(x$raster)[1]/dim(x$raster)[2]\n vpWidth <- convertWidth(unit(1, \"npc\"), \"inches\", valueOnly=TRUE)\n vpHeight <- convertHeight(unit(1, \"npc\"), \"inches\", valueOnly=TRUE)\n vpRatio <- vpHeight/vpWidth\n if (rasterRatio > vpRatio) {\n x$height <- unit(vpHeight, \"inches\")\n x$width <- unit(vpHeight*dim(x$raster)[2]/dim(x$raster)[1],\n \"inches\")\n } else {\n x$width <- unit(vpWidth, \"inches\")\n x$height <- unit(vpWidth*dim(x$raster)[1]/dim(x$raster)[2],\n \"inches\")\n }\n } else {\n h <- convertHeight(x$height, \"inches\", valueOnly=TRUE)\n x$width <- unit(h*dim(x$raster)[2]/dim(x$raster)[1],\n \"inches\")\n }\n } else {\n if (is.null(x$height)) {\n w <- convertWidth(x$width, \"inches\", valueOnly=TRUE)\n x$height <- unit(w*dim(x$raster)[1]/dim(x$raster)[2],\n \"inches\")\n }\n }\n grid.Call.graphics(C_raster, x$raster,\n x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n x$interpolate)\n}\n\nxDetails.rastergrob <- function(x, theta) {\n x <- resolveRasterSize(x)\n bounds <- grid.Call(C_rectBounds, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.rastergrob <- function(x, theta) {\n x <- resolveRasterSize(x)\n bounds <- grid.Call(C_rectBounds, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.rastergrob <- function(x) {\n x <- resolveRasterSize(x)\n bounds <- grid.Call(C_rectBounds, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.rastergrob <- function(x) {\n x <- resolveRasterSize(x)\n bounds <- grid.Call(C_rectBounds, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\nrasterGrob <- function(image,\n x=unit(0.5, \"npc\"), y=unit(0.5, \"npc\"),\n width=NULL, height=NULL,\n just=\"centre\", hjust=NULL, vjust=NULL,\n interpolate=TRUE,\n default.units=\"npc\",\n name=NULL, gp=gpar(), vp=NULL) {\n\n if (inherits(image, \"nativeRaster\"))\n raster <- image\n else\n raster <- as.raster(image)\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n if (!is.null(width) && !is.unit(width))\n width <- unit(width, default.units)\n if (!is.null(height) && !is.unit(height))\n height <- unit(height, default.units)\n grob(raster=raster, x=x, y=y, width=width, height=height, just=just,\n hjust=hjust, vjust=vjust, interpolate=interpolate,\n name=name, gp=gp, vp=vp, cl=\"rastergrob\")\n}\n\ngrid.raster <- function(image,\n x=unit(0.5, \"npc\"), y=unit(0.5, \"npc\"),\n width=NULL, height=NULL,\n just=\"centre\", hjust=NULL, vjust=NULL,\n interpolate=TRUE,\n default.units=\"npc\",\n name=NULL, gp=gpar(), vp=NULL) {\n rg <- rasterGrob(image,\n x=x, y=y, width=width, height=height, just=just,\n hjust=hjust, vjust=vjust, interpolate=interpolate,\n default.units=default.units,\n name=name, gp=gp, vp=vp)\n grid.draw(rg)\n}\n\n######################################\n# TEXT primitive\n######################################\nvalidDetails.text <- function(x) {\n if (!is.language(x$label))\n x$label <- as.character(x$label)\n if (!is.unit(x$x) ||\n !is.unit(x$y))\n stop(\"'x' and 'y' must be units\")\n x$rot <- as.numeric(x$rot)\n if (!all(is.finite(x$rot)) || length(x$rot) == 0)\n stop(\"invalid 'rot' value\")\n valid.just(x$just)\n if (!is.null(x$hjust))\n x$hjust <- as.numeric(x$hjust)\n if (!is.null(x$vjust))\n x$vjust <- as.numeric(x$vjust)\n x$check.overlap <- as.logical(x$check.overlap)\n x\n}\n\ndrawDetails.text <- function(x, recording=TRUE) {\n grid.Call.graphics(C_text, as.graphicsAnnot(x$label),\n x$x, x$y,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n x$rot, x$check.overlap)\n}\n\nxDetails.text <- function(x, theta) {\n bounds <- grid.Call(C_textBounds, as.graphicsAnnot(x$label),\n x$x, x$y,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n x$rot, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.text <- function(x, theta) {\n bounds <- grid.Call(C_textBounds, as.graphicsAnnot(x$label),\n x$x, x$y,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n x$rot, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.text <- function(x) {\n bounds <- grid.Call(C_textBounds, as.graphicsAnnot(x$label),\n x$x, x$y,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n x$rot, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.text <- function(x) {\n bounds <- grid.Call(C_textBounds, as.graphicsAnnot(x$label),\n x$x, x$y,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust),\n x$rot, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\nascentDetails.text <- function(x) {\n if (length(x$label) == 1) {\n metrics <- grid.Call(C_stringMetric, as.graphicsAnnot(x$label))\n unit(metrics[[1]], \"inches\")\n } else {\n heightDetails(x)\n }\n}\n\ndescentDetails.text <- function(x) {\n if (length(x$label) == 1) {\n metrics <- grid.Call(C_stringMetric, as.graphicsAnnot(x$label))\n unit(metrics[[2]], \"inches\")\n } else {\n unit(0, \"inches\")\n }\n}\n\ntextGrob <- function(label, x=unit(0.5, \"npc\"), y=unit(0.5, \"npc\"),\n just=\"centre\", hjust=NULL, vjust=NULL,\n rot=0, check.overlap=FALSE,\n default.units=\"npc\",\n name=NULL, gp=gpar(), vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(label=label, x=x, y=y, just=just, hjust=hjust, vjust=vjust,\n rot=rot, check.overlap=check.overlap,\n name=name, gp=gp, vp=vp, cl=\"text\")\n}\n\ngrid.text <- function(label, x=unit(0.5, \"npc\"), y=unit(0.5, \"npc\"),\n just=\"centre\", hjust=NULL, vjust=NULL,\n rot=0, check.overlap=FALSE,\n default.units=\"npc\",\n name=NULL, gp=gpar(), draw=TRUE, vp=NULL) {\n tg <- textGrob(label=label, x=x, y=y, just=just,\n hjust=hjust, vjust=vjust, rot=rot,\n check.overlap=check.overlap,\n default.units=default.units,\n name=name, gp=gp, vp=vp)\n if (draw)\n grid.draw(tg)\n invisible(tg)\n}\n\n######################################\n# POINTS primitive\n######################################\nvalid.pch <- function(pch) {\n if (length(pch) == 0L)\n stop(\"zero-length 'pch'\")\n if (is.null(pch))\n pch <- 1L\n else if (!is.character(pch))\n pch <- as.integer(pch)\n pch\n}\n\nvalidDetails.points <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y) ||\n !is.unit(x$size))\n stop(\"'x', 'y' and 'size' must be units\")\n if (length(x$x) != length(x$y))\n stop(\"'x' and 'y' must be 'unit' objects and have the same length\")\n x$pch <- valid.pch(x$pch)\n x\n}\n\ndrawDetails.points <- function(x, recording=TRUE) {\n grid.Call.graphics(C_points, x$x, x$y, x$pch, x$size)\n}\n\n# FIXME: does not take into account the size of the symbols\nxDetails.points <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.points <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\nwidthDetails.points <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[3L], \"inches\")\n}\n\nheightDetails.points <- function(x) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, 0)\n if (is.null(bounds))\n unit(0, \"inches\")\n else\n unit(bounds[4L], \"inches\")\n}\n\npointsGrob <- function(x=stats::runif(10),\n y=stats::runif(10),\n pch=1, size=unit(1, \"char\"),\n default.units=\"native\",\n name=NULL, gp=gpar(), vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y, pch=pch, size=size,\n name=name, gp=gp, vp=vp, cl=\"points\")\n}\n\ngrid.points <- function(x=stats::runif(10),\n y=stats::runif(10),\n pch=1, size=unit(1, \"char\"),\n default.units=\"native\",\n name=NULL, gp=gpar(),\n draw=TRUE, vp=NULL) {\n pg <- pointsGrob(x=x, y=y, pch=pch, size=size,\n default.units=default.units,\n name=name, gp=gp, vp=vp)\n if (draw)\n grid.draw(pg)\n invisible(pg)\n}\n\n######################################\n# CLIP primitive\n######################################\nvalidDetails.clip <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y) ||\n !is.unit(x$width) ||\n !is.unit(x$height))\n stop(\"'x', 'y', 'width', and 'height' must be units\")\n if (length(x$x) > 1 || length(x$y) > 1 ||\n length(x$width) > 1 || length(x$height) > 1)\n stop(\"'x', 'y', 'width', and 'height' must all be units of length 1\")\n valid.just(x$just)\n if (!is.null(x$hjust))\n x$hjust <- as.numeric(x$hjust)\n if (!is.null(x$vjust))\n x$vjust <- as.numeric(x$vjust)\n x\n}\n\ndrawDetails.clip <- function(x, recording=TRUE) {\n grid.Call.graphics(C_clip, x$x, x$y, x$width, x$height,\n resolveHJust(x$just, x$hjust),\n resolveVJust(x$just, x$vjust))\n}\n\nclipGrob <- function(x=unit(0.5, \"npc\"), y=unit(0.5, \"npc\"),\n width=unit(1, \"npc\"), height=unit(1, \"npc\"),\n just=\"centre\", hjust=NULL, vjust=NULL,\n default.units=\"npc\",\n name=NULL, vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n if (!is.unit(width))\n width <- unit(width, default.units)\n if (!is.unit(height))\n height <- unit(height, default.units)\n grob(x=x, y=y, width=width, height=height, just=just,\n hjust=hjust, vjust=vjust,\n name=name, vp=vp, cl=\"clip\")\n}\n\ngrid.clip <- function(...) {\n grid.draw(clipGrob(...))\n}\n\n\n######################################\n# NULL primitive\n######################################\n\nvalidDetails.null <- function(x) {\n if (!is.unit(x$x) ||\n !is.unit(x$y))\n stop(\"'x' and 'y' must be units\")\n if (length(x$x) > 1 || length(x$y) > 1)\n stop(\"'x' and 'y' must all be units of length 1\")\n x\n}\n\ndrawDetails.null <- function(x, recording=TRUE) {\n # Deliberate null op.\n # NOTE: nothing will go on the graphics engine DL\n # This is ok I think because these grobs are only\n # useful on the grid DL (for other grid code to query\n # their size or location).\n}\n\nxDetails.null <- function(x, theta) {\n bounds <- grid.Call(C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[1L], \"inches\")\n}\n\nyDetails.null <- function(x, theta) {\n bounds <- grid.Call( C_locnBounds, x$x, x$y, theta)\n if (is.null(bounds))\n unit(0.5, \"npc\")\n else\n unit(bounds[2L], \"inches\")\n}\n\n# Deliberately ZERO\nwidthDetails.null <- function(x) {\n unit(0, \"inches\")\n}\n\nheightDetails.null <- function(x) {\n unit(0, \"inches\")\n}\n\n# A grob with GUARANTEED zero-width\n# also GUARANTEED NOT to draw anything\nnullGrob <- function(x=unit(0.5, \"npc\"), y=unit(0.5, \"npc\"),\n default.units=\"npc\",\n name=NULL, vp=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n grob(x=x, y=y, name=name, vp=vp, cl=\"null\")\n}\n\n# Convenient way to get nullGrob on the grid display list\ngrid.null <- function(...) {\n grid.draw(nullGrob(...))\n}\n\n\n\n\n\n\n\n\n\n","normpath":"/Users/thomas/Dropbox/GitHub/grid/R/primitives.R"},{"filename":"grid/R/size.R","content":"# File src/library/grid/R/size.R\n# Part of the R package, https://www.R-project.org\n#\n# Copyright (C) 1995-2012 The R Core Team\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# A copy of the GNU General Public License is available at\n# https://www.R-project.org/Licenses/\n\n# These functions are used to evaluate \"grobwidth\" and\n# \"grobheight\" units.\n# They are usually called from within the C code\n# (specifically, from within unit.c)\n# It should be noted that they only give the width/height\n# of the grob in the current drawing context\n# (i.e., evaluating the width/height in another context\n# will not necessarily give the same result)\n\n# The C code to evaluate \"grobwidth\" and \"grobheight\" calls\n# the preDrawDetails and postDrawDetails generics before and\n# after the call to width/height() to allow for complex grobs which\n# construct their own viewports.\n\n#########\n# X locations on edge\n#########\n\nxDetails <- function(x, theta) {\n UseMethod(\"xDetails\")\n}\n\nxDetails.default <- function(x, theta) {\n unit(0.5, \"npc\")\n}\n\n#########\n# Y locations on edge\n#########\n\nyDetails <- function(x, theta) {\n UseMethod(\"yDetails\")\n}\n\nyDetails.default <- function(x, theta) {\n unit(0.5, \"npc\")\n}\n\n#########\n# WIDTHS\n#########\n\n# We are doing this in R code to provide generics like widthDetails\n# so that users can customise the behaviour for complex grobs by\n# writing their own (R code!) methods\nwidth <- function(x) {\n widthDetails(x)\n}\n\nwidthDetails <- function(x) {\n UseMethod(\"widthDetails\", x)\n}\n\nwidthDetails.default <- function(x) {\n unit(1, \"null\")\n}\n\n#########\n# HEIGHTS\n#########\nheight <- function(x) {\n heightDetails(x)\n}\n\nheightDetails <- function(x) {\n UseMethod(\"heightDetails\", x)\n}\n\nheightDetails.default <- function(x) {\n unit(1, \"null\")\n}\n\nascentDetails <- function(x) {\n UseMethod(\"ascentDetails\", x)\n}\n\nascentDetails.default <- heightDetails.default\n\nascentDetails.grob <- function(x) {\n heightDetails(x)\n}\n\ndescentDetails <- function(x) {\n UseMethod(\"descentDetails\", x)\n}\n\ndescentDetails.default <- function(x) {\n unit(0, \"inches\")\n}\n\n#########\n# Some functions that might be useful for determining the sizes\n# of your grobs\n#########\n\n# Dimensions which depend on the parent context EITHER don't make\n# sense (e.g., no good to have the parent width depend on the child's\n# width unit(1, \"grobwidth\", <child>), which depends on the parent's\n# width unit(.1, \"npc\"), ...) OR are slightly ambiguous\n# (e.g., gf <- grid.frame(); grid.pack(gf, grid.rect(width=unit(.1, \"npc\")))\n# makes the area allocated to the rectangle .1 of the frame area, but\n# then the rectangle only occupies .1 of _that_ allocated area; my head\n# hurts !). The first sort will actually lead to infinite loops so\n# watch out for that; the second sort I just don't want to have to deal with.\n#\n# On the other hand, dimensions which do not depend on the parent context\n# are much easier to deal with (e.g., \"inches\", \"cm\", \"lines\", ...)\n#\n# So this function takes a unit and returns absolute values\n# untouched and replaces other values with unit(1, \"null\")\n\nabsolute.size <- function(unit) {\n absolute.units(unit)\n}\n","normpath":"/Users/thomas/Dropbox/GitHub/grid/R/size.R"},{"filename":"ggplot2/R/labeller.r","content":"#' Useful labeller functions\n#'\n#' Labeller functions are in charge of formatting the strip labels of\n#' facet grids and wraps. Most of them accept a `multi_line`\n#' argument to control whether multiple factors (defined in formulae\n#' such as `~first + second`) should be displayed on a single\n#' line separated with commas, or each on their own line.\n#'\n#' `label_value()` only displays the value of a factor while\n#' `label_both()` displays both the variable name and the factor\n#' value. `label_context()` is context-dependent and uses\n#' `label_value()` for single factor faceting and\n#' `label_both()` when multiple factors are\n#' involved. `label_wrap_gen()` uses [base::strwrap()]\n#' for line wrapping.\n#'\n#' `label_parsed()` interprets the labels as plotmath\n#' expressions. [label_bquote()] offers a more flexible\n#' way of constructing plotmath expressions. See examples and\n#' [bquote()] for details on the syntax of the\n#' argument.\n#'\n#' @section Writing New Labeller Functions:\n#'\n#' Note that an easy way to write a labeller function is to\n#' transform a function operating on character vectors with\n#' [as_labeller()].\n#'\n#' A labeller function accepts a data frame of labels (character\n#' vectors) containing one column for each factor. Multiple factors\n#' occur with formula of the type `~first + second`.\n#'\n#' The return value must be a rectangular list where each 'row'\n#' characterises a single facet. The list elements can be either\n#' character vectors or lists of plotmath expressions. When multiple\n#' elements are returned, they get displayed on their own new lines\n#' (i.e., each facet gets a multi-line strip of labels).\n#'\n#' To illustrate, let's say your labeller returns a list of two\n#' character vectors of length 3. This is a rectangular list because\n#' all elements have the same length. The first facet will get the\n#' first elements of each vector and display each of them on their\n#' own line. Then the second facet gets the second elements of each\n#' vector, and so on.\n#'\n#' If it's useful to your labeller, you can retrieve the `type`\n#' attribute of the incoming data frame of labels. The value of this\n#' attribute reflects the kind of strips your labeller is dealing\n#' with: `\"cols\"` for columns and `\"rows\"` for rows. Note\n#' that [facet_wrap()] has columns by default and rows\n#' when the strips are switched with the `switch` option. The\n#' `facet` attribute also provides metadata on the labels. It\n#' takes the values `\"grid\"` or `\"wrap\"`.\n#'\n#' For compatibility with [labeller()], each labeller\n#' function must have the `labeller` S3 class.\n#'\n#' @param labels Data frame of labels. Usually contains only one\n#' element, but faceting over multiple factors entails multiple\n#' label variables.\n#' @param multi_line Whether to display the labels of multiple factors\n#' on separate lines.\n#' @param sep String separating variables and values.\n#' @param width Maximum number of characters before wrapping the strip.\n#' @family facet\n#' @seealso [labeller()], [as_labeller()],\n#' [label_bquote()]\n#' @examples\n#' mtcars$cyl2 <- factor(mtcars$cyl, labels = c(\"alpha\", \"beta\", \"gamma\"))\n#' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()\n#'\n#' # The default is label_value\n#' p + facet_grid(. ~ cyl, labeller = label_value)\n#'\n#' \\donttest{\n#' # Displaying both the values and the variables\n#' p + facet_grid(. ~ cyl, labeller = label_both)\n#'\n#' # Displaying only the values or both the values and variables\n#' # depending on whether multiple factors are facetted over\n#' p + facet_grid(am ~ vs+cyl, labeller = label_context)\n#'\n#' # Interpreting the labels as plotmath expressions\n#' p + facet_grid(. ~ cyl2)\n#' p + facet_grid(. ~ cyl2, labeller = label_parsed)\n#' }\n#' @name labellers\nNULL\n\ncollapse_labels_lines <- function(labels) {\n out <- do.call(\"Map\", c(list(paste, sep = \", \"), labels))\n list(unname(unlist(out)))\n}\n\n#' @rdname labellers\n#' @export\nlabel_value <- function(labels, multi_line = TRUE) {\n labels <- lapply(labels, as.character)\n if (multi_line) {\n labels\n } else {\n collapse_labels_lines(labels)\n }\n}\n# Should ideally not have the 'function' class here, but this is\n# currently needed for Roxygen\nclass(label_value) <- c(\"function\", \"labeller\")\n\n# Helper for label_both\nlabel_variable <- function(labels, multi_line = TRUE) {\n if (multi_line) {\n row <- as.list(names(labels))\n } else {\n row <- list(paste(names(labels), collapse = \", \"))\n }\n lapply(row, rep, nrow(labels) %||% length(labels[[1]]))\n}\n\n#' @rdname labellers\n#' @export\nlabel_both <- function(labels, multi_line = TRUE, sep = \": \") {\n value <- label_value(labels, multi_line = multi_line)\n variable <- label_variable(labels, multi_line = multi_line)\n\n if (multi_line) {\n out <- vector(\"list\", length(value))\n for (i in seq_along(out)) {\n out[[i]] <- paste(variable[[i]], value[[i]], sep = sep)\n }\n } else {\n value <- do.call(\"paste\", c(value, sep = \", \"))\n variable <- do.call(\"paste\", c(variable, sep = \", \"))\n out <- Map(paste, variable, value, sep = sep)\n out <- list(unname(unlist(out)))\n }\n\n out\n}\nclass(label_both) <- c(\"function\", \"labeller\")\n\n#' @rdname labellers\n#' @export\nlabel_context <- function(labels, multi_line = TRUE, sep = \": \") {\n if (length(labels) == 1) {\n label_value(labels, multi_line)\n } else {\n label_both(labels, multi_line)\n }\n}\nclass(label_context) <- c(\"function\", \"labeller\")\n\n#' @rdname labellers\n#' @export\nlabel_parsed <- function(labels, multi_line = TRUE) {\n labels <- label_value(labels, multi_line = multi_line)\n if (multi_line) {\n # Using unname() and c() to return a cleaner and easily testable\n # object structure\n lapply(unname(labels), lapply, function(values) {\n c(parse(text = as.character(values)))\n })\n } else {\n lapply(labels, function(values) {\n values <- paste0(\"list(\", values, \")\")\n lapply(values, function(expr) c(parse(text = expr)))\n })\n }\n}\nclass(label_parsed) <- c(\"function\", \"labeller\")\n\nfind_names <- function(expr) {\n if (is.call(expr)) {\n unlist(lapply(expr[-1], find_names))\n } else if (is.name(expr)) {\n as.character(expr)\n }\n}\n\n#' Label with mathematical expressions\n#'\n#' `label_bquote()` offers a flexible way of labelling\n#' facet rows or columns with plotmath expressions. Backquoted\n#' variables will be replaced with their value in the facet.\n#'\n#' @param rows Backquoted labelling expression for rows.\n#' @param cols Backquoted labelling expression for columns.\n#' @param default Unused, kept for compatibility.\n#' @seealso \\link{labellers}, [labeller()],\n#' @export\n#' @examples\n#' # The variables mentioned in the plotmath expression must be\n#' # backquoted and referred to by their names.\n#' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()\n#' p + facet_grid(vs ~ ., labeller = label_bquote(alpha ^ .(vs)))\n#' p + facet_grid(. ~ vs, labeller = label_bquote(cols = .(vs) ^ .(vs)))\n#' p + facet_grid(. ~ vs + am, labeller = label_bquote(cols = .(am) ^ .(vs)))\nlabel_bquote <- function(rows = NULL, cols = NULL,\n default) {\n cols_quoted <- substitute(cols)\n rows_quoted <- substitute(rows)\n has_warned <- FALSE\n\n fun <- function(labels) {\n quoted <- resolve_labeller(rows_quoted, cols_quoted, labels)\n if (is.null(quoted)) {\n return(label_value(labels))\n }\n\n evaluate <- function(...) {\n params <- list(...)\n\n # Mapping `x` to the first variable for backward-compatibility,\n # but only if there is no facetted variable also named `x`\n if (\"x\" %in% find_names(quoted) && !\"x\" %in% names(params)) {\n if (!has_warned) {\n warning(\"Referring to `x` is deprecated, use variable name instead\",\n call. = FALSE)\n # The function is called for each facet so this avoids\n # multiple warnings\n has_warned <<- TRUE\n }\n params$x <- params[[1]]\n }\n\n eval(substitute(bquote(expr, params), list(expr = quoted)))\n }\n list(do.call(\"Map\", c(list(f = evaluate), labels)))\n }\n\n structure(fun, class = \"labeller\")\n}\nutils::globalVariables(c(\"x\", \".\"))\n\n#' @rdname labellers\n#' @export\nlabel_wrap_gen <- function(width = 25, multi_line = TRUE) {\n fun <- function(labels) {\n labels <- label_value(labels, multi_line = multi_line)\n lapply(labels, function(x) {\n x <- strwrap(x, width = width, simplify = FALSE)\n vapply(x, paste, character(1), collapse = \"\\n\")\n })\n }\n structure(fun, class = \"labeller\")\n}\n\nis_labeller <- function(x) inherits(x, \"labeller\")\n\nresolve_labeller <- function(rows, cols, labels) {\n if (is.null(cols) && is.null(rows)) {\n stop(\"Supply one of rows or cols\", call. = FALSE)\n }\n if (attr(labels, \"facet\") == \"wrap\") {\n # Return either rows or cols for facet_wrap()\n if (!is.null(cols) && !is.null(rows)) {\n stop(\"Cannot supply both rows and cols to facet_wrap()\", call. = FALSE)\n }\n cols %||% rows\n } else {\n if (attr(labels, \"type\") == \"rows\") {\n rows\n } else {\n cols\n }\n }\n}\n\n#' Coerce to labeller function\n#'\n#' This transforms objects to labeller functions. Used internally by\n#' [labeller()].\n#' @param x Object to coerce to a labeller function. If a named\n#' character vector, it is used as a lookup table before being\n#' passed on to `default`. If a non-labeller function, it is\n#' assumed it takes and returns character vectors and is applied to\n#' the labels. If a labeller, it is simply applied to the labels.\n#' @param multi_line Whether to display the labels of multiple factors\n#' on separate lines. This is passed to the labeller function.\n#' @param default Default labeller to process the labels produced by\n#' lookup tables or modified by non-labeller functions.\n#' @seealso [labeller()], \\link{labellers}\n#' @keywords internal\n#' @export\n#' @examples\n#' p <- ggplot(mtcars, aes(disp, drat)) + geom_point()\n#' p + facet_wrap(~am)\n#'\n#' # Rename labels on the fly with a lookup character vector\n#' to_string <- as_labeller(c(`0` = \"Zero\", `1` = \"One\"))\n#' p + facet_wrap(~am, labeller = to_string)\n#'\n#' # Quickly transform a function operating on character vectors to a\n#' # labeller function:\n#' appender <- function(string, suffix = \"-foo\") paste0(string, suffix)\n#' p + facet_wrap(~am, labeller = as_labeller(appender))\n#'\n#' # If you have more than one faceting variable, be sure to dispatch\n#' # your labeller to the right variable with labeller()\n#' p + facet_grid(cyl ~ am, labeller = labeller(am = to_string))\nas_labeller <- function(x, default = label_value, multi_line = TRUE) {\n force(x)\n fun <- function(labels) {\n labels <- lapply(labels, as.character)\n\n # Dispatch multi_line argument to the labeller function instead of\n # supplying it to the labeller call because some labellers do not\n # support it.\n default <- dispatch_args(default, multi_line = multi_line)\n\n if (is_labeller(x)) {\n x <- dispatch_args(x, multi_line = multi_line)\n x(labels)\n } else if (is.function(x)) {\n default(lapply(labels, x))\n } else if (is.character(x)) {\n default(lapply(labels, function(label) x[label]))\n } else {\n default(labels)\n }\n }\n structure(fun, class = \"labeller\")\n}\n\n#' Construct labelling specification\n#'\n#' This function makes it easy to assign different labellers to\n#' different factors. The labeller can be a function or it can be a\n#' named character vectors that will serve as a lookup table.\n#'\n#' In case of functions, if the labeller has class `labeller`, it\n#' is directly applied on the data frame of labels. Otherwise, it is\n#' applied to the columns of the data frame of labels. The data frame\n#' is then processed with the function specified in the\n#' `.default` argument. This is intended to be used with\n#' functions taking a character vector such as\n#' [Hmisc::capitalize()].\n#'\n#' @param ... Named arguments of the form \\code{variable =\n#' labeller}. Each labeller is passed to [as_labeller()]\n#' and can be a lookup table, a function taking and returning\n#' character vectors, or simply a labeller function.\n#' @param .rows,.cols Labeller for a whole margin (either the rows or\n#' the columns). It is passed to [as_labeller()]. When a\n#' margin-wide labeller is set, make sure you don't mention in\n#' `...` any variable belonging to the margin.\n#' @param keep.as.numeric Deprecated. All supplied labellers and\n#' on-labeller functions should be able to work with character\n#' labels.\n#' @param .multi_line Whether to display the labels of multiple\n#' factors on separate lines. This is passed to the labeller\n#' function.\n#' @param .default Default labeller for variables not specified. Also\n#' used with lookup tables or non-labeller functions.\n#' @family facet labeller\n#' @seealso [as_labeller()], \\link{labellers}\n#' @return A labeller function to supply to [facet_grid()]\n#' for the argument `labeller`.\n#' @export\n#' @examples\n#' \\donttest{\n#' p1 <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point()\n#'\n#' # You can assign different labellers to variables:\n#' p1 + facet_grid(\n#' vs + am ~ gear,\n#' labeller = labeller(vs = label_both, am = label_value)\n#' )\n#'\n#' # Or whole margins:\n#' p1 + facet_grid(\n#' vs + am ~ gear,\n#' labeller = labeller(.rows = label_both, .cols = label_value)\n#' )\n#'\n#' # You can supply functions operating on strings:\n#' capitalize <- function(string) {\n#' substr(string, 1, 1) <- toupper(substr(string, 1, 1))\n#' string\n#' }\n#' p2 <- ggplot(msleep, aes(x = sleep_total, y = awake)) + geom_point()\n#' p2 + facet_grid(vore ~ conservation, labeller = labeller(vore = capitalize))\n#'\n#' # Or use character vectors as lookup tables:\n#' conservation_status <- c(\n#' cd = \"Conservation Dependent\",\n#' en = \"Endangered\",\n#' lc = \"Least concern\",\n#' nt = \"Near Threatened\",\n#' vu = \"Vulnerable\",\n#' domesticated = \"Domesticated\"\n#' )\n#' ## Source: http://en.wikipedia.org/wiki/Wikipedia:Conservation_status\n#'\n#' p2 + facet_grid(vore ~ conservation, labeller = labeller(\n#' .default = capitalize,\n#' conservation = conservation_status\n#' ))\n#'\n#' # In the following example, we rename the levels to the long form,\n#' # then apply a wrap labeller to the columns to prevent cropped text\n#' idx <- match(msleep$conservation, names(conservation_status))\n#' msleep$conservation2 <- conservation_status[idx]\n#'\n#' p3 <- ggplot(msleep, aes(x = sleep_total, y = awake)) + geom_point()\n#' p3 +\n#' facet_grid(vore ~ conservation2,\n#' labeller = labeller(conservation2 = label_wrap_gen(10))\n#' )\n#'\n#' # labeller() is especially useful to act as a global labeller. You\n#' # can set it up once and use it on a range of different plots with\n#' # different facet specifications.\n#'\n#' global_labeller <- labeller(\n#' vore = capitalize,\n#' conservation = conservation_status,\n#' conservation2 = label_wrap_gen(10),\n#' .default = label_both\n#' )\n#'\n#' p2 + facet_grid(vore ~ conservation, labeller = global_labeller)\n#' p3 + facet_wrap(~conservation2, labeller = global_labeller)\n#' }\nlabeller <- function(..., .rows = NULL, .cols = NULL,\n keep.as.numeric = NULL, .multi_line = TRUE,\n .default = label_value) {\n if (!is.null(keep.as.numeric)) {\n .Deprecated(old = \"keep.as.numeric\")\n }\n dots <- list(...)\n .default <- as_labeller(.default)\n\n function(labels) {\n if (!is.null(.rows) || !is.null(.cols)) {\n margin_labeller <- resolve_labeller(.rows, .cols, labels)\n } else {\n margin_labeller <- NULL\n }\n\n if (is.null(margin_labeller)) {\n labellers <- lapply(dots, as_labeller)\n } else {\n margin_labeller <- as_labeller(margin_labeller, default = .default,\n multi_line = .multi_line)\n\n # Check that variable-specific labellers do not overlap with\n # margin-wide labeller\n if (any(names(dots) %in% names(labels))) {\n stop(\"Conflict between .\", attr(labels, \"type\"), \" and \",\n paste(names(dots), collapse = \", \"), call. = FALSE)\n }\n }\n\n # Apply relevant labeller\n if (is.null(margin_labeller)) {\n # Apply named labeller one by one\n out <- lapply(names(labels), function(label) {\n if (label %in% names(labellers)) {\n labellers[[label]](labels[label])[[1]]\n } else {\n .default(labels[label])[[1]]\n }\n })\n names(out) <- names(labels)\n if (.multi_line) {\n out\n } else {\n collapse_labels_lines(out)\n }\n } else {\n margin_labeller(labels)\n }\n }\n}\n\n#' Build facet strips\n#'\n#' Builds a set of facet strips from a data frame of labels.\n#'\n#' @param label_df Data frame of labels to place in strips.\n#' @param labeller Labelling function.\n#' @param theme A theme object.\n#' @param horizontal Whether the strips are horizontal (e.g. x facets) or not.\n#'\n#' @noRd\nbuild_strip <- function(label_df, labeller, theme, horizontal) {\n labeller <- match.fun(labeller)\n\n # No labelling data, so return empty row/col\n if (empty(label_df)) {\n return(if (horizontal) {\n list(top = NULL, bottom = NULL)\n } else {\n list(left = NULL, right = NULL)\n })\n }\n\n text_theme <- if (horizontal) \"strip.text.x\" else \"strip.text.y\"\n\n element <- calc_element(text_theme, theme)\n\n if (inherits(element, \"element_blank\")) {\n grobs <- rep(list(zeroGrob()), nrow(label_df))\n return(structure(\n list(grobs, grobs),\n names = if (horizontal) c('top', 'bottom') else c('left', 'right')\n ))\n }\n\n # Create matrix of labels\n labels <- lapply(labeller(label_df), cbind)\n labels <- do.call(\"cbind\", labels)\n\n gp <- gpar(\n fontsize = element$size,\n col = element$colour,\n fontfamily = element$family,\n fontface = element$face,\n lineheight = element$lineheight\n )\n\n if (horizontal) {\n\n grobs <- create_strip_labels(labels, element, gp)\n grobs <- ggstrip(grobs, theme, element, gp, horizontal, clip = \"on\")\n\n list(\n top = grobs,\n bottom = grobs\n )\n } else {\n\n grobs <- create_strip_labels(labels, element, gp)\n grobs_right <- grobs[, rev(seq_len(ncol(grobs))), drop = FALSE]\n\n grobs_right <- ggstrip(\n grobs_right,\n theme,\n element,\n gp,\n horizontal,\n clip = \"on\"\n )\n\n # Change angle of strip labels for y strips that are placed on the left side\n if (inherits(element, \"element_text\")) {\n element$angle <- adjust_angle(element$angle)\n }\n\n grobs_left <- create_strip_labels(labels, element, gp)\n\n grobs_left <- ggstrip(\n grobs_left,\n theme,\n element,\n gp,\n horizontal,\n clip = \"on\"\n )\n\n list(\n left = grobs_left,\n right = grobs_right\n )\n }\n}\n\n#' Create list of strip labels\n#'\n#' Calls [title_spec()] on all the labels for a set of strips to create a list\n#' of text grobs, heights, and widths.\n#'\n#' @param labels Matrix of strip labels\n#' @param element Theme element (see [calc_element()]).\n#' @param gp Additional graphical parameters.\n#'\n#' @noRd\ncreate_strip_labels <- function(labels, element, gp) {\n grobs <- lapply(labels, title_spec,\n x = NULL,\n y = NULL,\n hjust = element$hjust,\n vjust = element$vjust,\n angle = element$angle,\n gp = gp,\n debug = element$debug\n )\n dim(grobs) <- dim(labels)\n grobs\n}\n\n#' Grob for strip labels\n#'\n#' Takes the output from title_spec, adds margins, creates gList with strip\n#' background and label, and returns gtable matrix.\n#'\n#' @param grobs Output from [title_spec()].\n#' @param theme Theme object.\n#' @param element Theme element (see [calc_element()]).\n#' @param gp Additional graphical parameters.\n#' @param horizontal Whether the strips are horizontal (e.g. x facets) or not.\n#' @param clip should drawing be clipped to the specified cells (‘\"on\"’),the\n#' entire table (‘\"inherit\"’), or not at all (‘\"off\"’).\n#'\n#' @noRd\nggstrip <- function(grobs, theme, element, gp, horizontal = TRUE, clip) {\n\n if (horizontal) {\n height <- max_height(lapply(grobs, function(x) x$text_height))\n width <- unit(1, \"null\")\n } else {\n height <- unit(1, \"null\")\n width <- max_width(lapply(grobs, function(x) x$text_width))\n }\n\n # Add margins around text grob\n grobs <- apply(\n grobs,\n c(1, 2),\n function(x) {\n add_margins(\n grob = x[[1]]$text_grob,\n height = height,\n width = width,\n gp = gp,\n margin = element$margin,\n margin_x = TRUE,\n margin_y = TRUE\n )\n }\n )\n\n background <- if (horizontal) \"strip.background.x\" else \"strip.background.y\"\n\n # Put text on a strip\n grobs <- apply(\n grobs,\n c(1, 2),\n function(label) {\n ggname(\n \"strip\",\n gTree(\n children = gList(\n element_render(theme, background),\n label[[1]]\n )\n )\n )\n })\n\n if (horizontal) {\n height <- height + sum(element$margin[c(1, 3)])\n } else {\n width <- width + sum(element$margin[c(2, 4)])\n }\n\n\n apply(\n grobs,\n 1,\n function(x) {\n if (horizontal) {\n mat <- matrix(x, ncol = 1)\n } else {\n mat <- matrix(x, nrow = 1)\n }\n\n gtable_matrix(\n \"strip\",\n mat,\n rep(width, ncol(mat)),\n rep(height, nrow(mat)),\n clip = clip\n )\n })\n\n}\n\n# Helper to adjust angle of switched strips\nadjust_angle <- function(angle) {\n if (is.null(angle)) {\n -90\n } else if ((angle + 180) > 360) {\n angle - 180\n } else {\n angle + 180\n }\n}\n\n# Check for old school labeller\ncheck_labeller <- function(labeller) {\n labeller <- match.fun(labeller)\n is_deprecated <- all(c(\"variable\", \"value\") %in% names(formals(labeller)))\n\n if (is_deprecated) {\n old_labeller <- labeller\n labeller <- function(labels) {\n Map(old_labeller, names(labels), labels)\n }\n warning(\"The labeller API has been updated. Labellers taking `variable`\",\n \"and `value` arguments are now deprecated. See labellers documentation.\",\n call. = FALSE)\n }\n\n labeller\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/labeller.r"},{"filename":"ggplot2/R/guides-.r","content":"#' Set guides for each scale\n#'\n#' Guides for each scale can be set scale-by-scale with the `guide`\n#' argument, or en masse with `guides()`.\n#'\n#' @param ... List of scale name-guide pairs. The guide can either\n#' be a string (i.e. \"colorbar\" or \"legend\"), or a call to a guide function\n#' (i.e. [guide_colourbar()] or [guide_legend()])\n#' specifying additional arguments.\n#' @return A list containing the mapping between scale and guide.\n#' @export\n#' @family guides\n#' @examples\n#' \\donttest{\n#' # ggplot object\n#'\n#' dat <- data.frame(x = 1:5, y = 1:5, p = 1:5, q = factor(1:5),\n#' r = factor(1:5))\n#' p <- ggplot(dat, aes(x, y, colour = p, size = q, shape = r)) + geom_point()\n#'\n#' # without guide specification\n#' p\n#'\n#' # Show colorbar guide for colour.\n#' # All these examples below have a same effect.\n#'\n#' p + guides(colour = \"colorbar\", size = \"legend\", shape = \"legend\")\n#' p + guides(colour = guide_colorbar(), size = guide_legend(),\n#' shape = guide_legend())\n#' p +\n#' scale_colour_continuous(guide = \"colorbar\") +\n#' scale_size_discrete(guide = \"legend\") +\n#' scale_shape(guide = \"legend\")\n#'\n#' # Remove some guides\n#' p + guides(colour = \"none\")\n#' p + guides(colour = \"colorbar\",size = \"none\")\n#'\n#' # Guides are integrated where possible\n#'\n#' p + guides(colour = guide_legend(\"title\"), size = guide_legend(\"title\"),\n#' shape = guide_legend(\"title\"))\n#' # same as\n#' g <- guide_legend(\"title\")\n#' p + guides(colour = g, size = g, shape = g)\n#'\n#' p + theme(legend.position = \"bottom\")\n#'\n#' # position of guides\n#'\n#' # Set order for multiple guides\n#' ggplot(mpg, aes(displ, cty)) +\n#' geom_point(aes(size = hwy, colour = cyl, shape = drv)) +\n#' guides(\n#' colour = guide_colourbar(order = 1),\n#' shape = guide_legend(order = 2),\n#' size = guide_legend(order = 3)\n#' )\n#' }\nguides <- function(...) {\n args <- list(...)\n if (is.list(args[[1]]) && !inherits(args[[1]], \"guide\")) args <- args[[1]]\n args <- rename_aes(args)\n structure(args, class = \"guides\")\n}\n\nupdate_guides <- function(p, guides) {\n p <- plot_clone(p)\n p$guides <- defaults(guides, p$guides)\n p\n}\n\n\n# building guides - called in ggplotGrob (plot-render.r)\n#\n# the procedure is as follows:\n#\n# 1. guides_train()\n# train each scale and generate guide definition for all guides\n# here, one gdef for one scale\n#\n# 2. guides_merge()\n# merge gdefs if they are overlayed\n# number of gdefs may be less than number of scales\n#\n# 3. guides_geom()\n# process layer information and generate geom info.\n#\n# 4. guides_gengrob()\n# generate ggrob from each gdef\n# one ggrob for one gdef\n#\n# 5. guides_build()\n# arrange all ggrobs\n\nbuild_guides <- function(scales, layers, default_mapping, position, theme, guides, labels) {\n theme$legend.key.width <- theme$legend.key.width %||% theme$legend.key.size\n theme$legend.key.height <- theme$legend.key.height %||% theme$legend.key.size\n\n # Layout of legends depends on their overall location\n position <- legend_position(position)\n if (position == \"inside\") {\n theme$legend.box <- theme$legend.box %||% \"vertical\"\n theme$legend.direction <- theme$legend.direction %||% \"vertical\"\n theme$legend.box.just <- theme$legend.box.just %||% c(\"center\", \"center\")\n } else if (position == \"vertical\") {\n theme$legend.box <- theme$legend.box %||% \"vertical\"\n theme$legend.direction <- theme$legend.direction %||% \"vertical\"\n theme$legend.box.just <- theme$legend.box.just %||% c(\"left\", \"top\")\n } else if (position == \"horizontal\") {\n theme$legend.box <- theme$legend.box %||% \"horizontal\"\n theme$legend.direction <- theme$legend.direction %||% \"horizontal\"\n theme$legend.box.just <- theme$legend.box.just %||% c(\"center\", \"top\")\n }\n\n # scales -> data for guides\n gdefs <- guides_train(scales = scales, theme = theme, guides = guides, labels = labels)\n if (length(gdefs) == 0) return(zeroGrob())\n\n # merge overlay guides\n gdefs <- guides_merge(gdefs)\n\n # process layer information\n gdefs <- guides_geom(gdefs, layers, default_mapping)\n if (length(gdefs) == 0) return(zeroGrob())\n\n # generate grob of each guides\n ggrobs <- guides_gengrob(gdefs, theme)\n\n # build up guides\n grobs <- guides_build(ggrobs, theme)\n\n grobs\n}\n\n# Simplify legend position to one of horizontal/vertical/inside\nlegend_position <- function(position) {\n if (length(position) == 1) {\n if (position %in% c(\"top\", \"bottom\")) {\n \"horizontal\"\n } else {\n \"vertical\"\n }\n } else {\n \"inside\"\n }\n}\n\n# validate guide object\nvalidate_guide <- function(guide) {\n # if guide is specified by character, then find the corresponding guide\n if (is.character(guide))\n match.fun(paste(\"guide_\", guide, sep = \"\"))()\n else if (inherits(guide, \"guide\"))\n guide\n else\n stop(\"Unknown guide: \", guide)\n}\n\n# train each scale in scales and generate the definition of guide\nguides_train <- function(scales, theme, guides, labels) {\n\n gdefs <- list()\n for (scale in scales$scales) {\n for (output in scale$aesthetics) {\n\n # guides(XXX) is stored in guides[[XXX]],\n # which is prior to scale_ZZZ(guide=XXX)\n # guide is determined in order of:\n # + guides(XXX) > + scale_ZZZ(guide=XXX) > default(i.e., legend)\n guide <- guides[[output]] %||% scale$guide\n\n # this should be changed to testing guide == \"none\"\n # scale$legend is backward compatibility\n # if guides(XXX=FALSE), then scale_ZZZ(guides=XXX) is discarded.\n if (identical(guide, \"none\") || isFALSE(guide)) next\n\n # check the validity of guide.\n # if guide is character, then find the guide object\n guide <- validate_guide(guide)\n\n # check the consistency of the guide and scale.\n if (!identical(guide$available_aes, \"any\") && !any(scale$aesthetics %in% guide$available_aes))\n stop(\"Guide '\", guide$name, \"' cannot be used for '\", scale$aesthetics, \"'.\")\n\n guide$title <- scale$make_title(guide$title %|W|% scale$name %|W|% labels[[output]])\n\n # direction of this grob\n guide$direction <- guide$direction %||% theme$legend.direction\n\n # each guide object trains scale within the object,\n # so Guides (i.e., the container of guides) need not to know about them\n guide <- guide_train(guide, scale, output)\n\n if (!is.null(guide)) gdefs[[length(gdefs) + 1]] <- guide\n }\n }\n gdefs\n}\n\n# merge overlapped guides\nguides_merge <- function(gdefs) {\n # split gdefs based on hash, and apply Reduce (guide_merge) to each gdef group.\n gdefs <- lapply(gdefs, function(g) {\n if (g$order == 0) {\n order <- \"99\"\n } else {\n order <- sprintf(\"%02d\", g$order)\n }\n g$hash <- paste(order, g$hash, sep = \"_\")\n g\n })\n tapply(gdefs, sapply(gdefs, function(g)g$hash), function(gs)Reduce(guide_merge, gs))\n}\n\n# process layer information\nguides_geom <- function(gdefs, layers, default_mapping) {\n compact(lapply(gdefs, guide_geom, layers, default_mapping))\n}\n\n# generate grob from each gdef (needs to write this function?)\nguides_gengrob <- function(gdefs, theme) {\n # common drawing process for all guides\n gdefs <- lapply(gdefs,\n function(g) {\n g$title.position <- g$title.position %||% switch(g$direction, vertical = \"top\", horizontal = \"left\")\n if (!g$title.position %in% c(\"top\", \"bottom\", \"left\", \"right\"))\n stop(\"title position \\\"\", g$title.position, \"\\\" is invalid\")\n g\n })\n\n lapply(gdefs, guide_gengrob, theme)\n}\n\n# build up all guide boxes into one guide-boxes.\nguides_build <- function(ggrobs, theme) {\n theme$legend.spacing <- theme$legend.spacing %||% unit(0.5, \"lines\")\n theme$legend.spacing.y <- theme$legend.spacing.y %||% theme$legend.spacing\n theme$legend.spacing.x <- theme$legend.spacing.x %||% theme$legend.spacing\n\n widths <- do.call(\"unit.c\", lapply(ggrobs, function(g)sum(g$widths)))\n heights <- do.call(\"unit.c\", lapply(ggrobs, function(g)sum(g$heights)))\n\n # Set the justification of each legend within the legend box\n # First value is xjust, second value is yjust\n just <- valid.just(theme$legend.box.just)\n xjust <- just[1]\n yjust <- just[2]\n\n # setting that is different for vertical and horizontal guide-boxes.\n if (identical(theme$legend.box, \"horizontal\")) {\n # Set justification for each legend\n for (i in seq_along(ggrobs)) {\n ggrobs[[i]] <- editGrob(ggrobs[[i]],\n vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust),\n height = heightDetails(ggrobs[[i]])))\n }\n\n guides <- gtable_row(name = \"guides\",\n grobs = ggrobs,\n widths = widths, height = max(heights))\n\n # add space between the guide-boxes\n guides <- gtable_add_col_space(guides, theme$legend.spacing.x)\n\n } else { # theme$legend.box == \"vertical\"\n # Set justification for each legend\n for (i in seq_along(ggrobs)) {\n ggrobs[[i]] <- editGrob(ggrobs[[i]],\n vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust),\n width = widthDetails(ggrobs[[i]])))\n }\n\n guides <- gtable_col(name = \"guides\",\n grobs = ggrobs,\n width = max(widths), heights = heights)\n\n # add space between the guide-boxes\n guides <- gtable_add_row_space(guides, theme$legend.spacing.y)\n }\n\n # Add margins around the guide-boxes.\n theme$legend.box.margin <- theme$legend.box.margin %||% margin()\n guides <- gtable_add_cols(guides, theme$legend.box.margin[4], pos = 0)\n guides <- gtable_add_cols(guides, theme$legend.box.margin[2], pos = ncol(guides))\n guides <- gtable_add_rows(guides, theme$legend.box.margin[1], pos = 0)\n guides <- gtable_add_rows(guides, theme$legend.box.margin[3], pos = nrow(guides))\n\n # Add legend box background\n background <- element_grob(theme$legend.box.background %||% element_blank())\n\n guides <- gtable_add_grob(guides, background, t = 1, l = 1,\n b = -1, r = -1, z = -Inf, clip = \"off\", name = \"legend.box.background\")\n guides$name <- \"guide-box\"\n guides\n}\n\n# Generics ----------------------------------------------------------------\n\n#' S3 generics for guides.\n#'\n#' You will need to provide methods for these S3 generics if you want to\n#' create your own guide object. They are currently undocumented; use at\n#' your own risk!\n#'\n#' @param guide The guide object\n#' @keywords internal\n#' @name guide-exts\nNULL\n\n#' @export\n#' @rdname guide-exts\nguide_train <- function(guide, scale, aesthetic = NULL) UseMethod(\"guide_train\")\n\n#' @export\n#' @rdname guide-exts\nguide_merge <- function(guide, new_guide) UseMethod(\"guide_merge\")\n\n#' @export\n#' @rdname guide-exts\nguide_geom <- function(guide, layers, default_mapping) UseMethod(\"guide_geom\")\n\n#' @export\n#' @rdname guide-exts\nguide_gengrob <- function(guide, theme) UseMethod(\"guide_gengrob\")\n\n\n# Helpers -----------------------------------------------------------------\n\nmatched_aes <- function(layer, guide, defaults) {\n all <- names(c(layer$mapping, if (layer$inherit.aes) defaults, layer$stat$default_aes))\n geom <- c(layer$geom$required_aes, names(layer$geom$default_aes))\n matched <- intersect(intersect(all, geom), names(guide$key))\n matched <- setdiff(matched, names(layer$geom_params))\n setdiff(matched, names(layer$aes_params))\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/guides-.r"},{"filename":"ggplot2/R/guides-grid.r","content":"# Produce a grob to be used as for panel backgrounds\n# minor and major grid line positions are given as fractional positions and will\n# be converted to `'native'` units by polylineGrob() downstream\n#\n# Any minor lines coinciding with major lines will be removed\nguide_grid <- function(theme, x.minor, x.major, y.minor, y.major) {\n\n x.minor <- setdiff(x.minor, x.major)\n y.minor <- setdiff(y.minor, y.major)\n\n ggname(\"grill\", grobTree(\n element_render(theme, \"panel.background\"),\n if (length(y.minor) > 0) element_render(\n theme, \"panel.grid.minor.y\",\n x = rep(0:1, length(y.minor)), y = rep(y.minor, each = 2),\n id.lengths = rep(2, length(y.minor))\n ),\n if (length(x.minor) > 0) element_render(\n theme, \"panel.grid.minor.x\",\n x = rep(x.minor, each = 2), y = rep(0:1, length(x.minor)),\n id.lengths = rep(2, length(x.minor))\n ),\n if (length(y.major) > 0) element_render(\n theme, \"panel.grid.major.y\",\n x = rep(0:1, length(y.major)), y = rep(y.major, each = 2),\n id.lengths = rep(2, length(y.major))\n ),\n if (length(x.major) > 0) element_render(\n theme, \"panel.grid.major.x\",\n x = rep(x.major, each = 2), y = rep(0:1, length(x.major)),\n id.lengths = rep(2, length(x.major))\n )\n ))\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/guides-grid.r"},{"filename":"ggplot2/R/theme.r","content":"#' Modify components of a theme\n#'\n#' Themes are a powerful way to customize the non-data components of your\n#' plots: i.e. titles, labels, fonts, background, gridlines, and legends.\n#' Themes can be used to give plots a consistent customized look.\n#' Modify a single plot's theme using `theme()`; see [theme_update()] if\n#' you want modify the active theme, to affect all subsequent plots. Theme\n#' elements are documented together according to inheritance, read more\n#' about theme inheritance below.\n#'\n#' @section Theme inheritance:\n#' Theme elements inherit properties from other theme elements heirarchically.\n#' For example, `axis.title.x.bottom` inherits from `axis.title.x` which inherits\n#' from `axis.title`, which in turn inherits from `text`. All text elements inherit\n#' directly or indirectly from `text`; all lines inherit from\n#' `line`, and all rectangular objects inherit from `rect`.\n#' This means that you can modify the appearance of multiple elements by\n#' setting a single high-level component.\n#'\n#' Learn more about setting these aesthetics in `vignette(\"ggplot2-specs\")`.\n#'\n#' @param line all line elements ([element_line()])\n#' @param rect all rectangular elements ([element_rect()])\n#' @param text all text elements ([element_text()])\n#' @param title all title elements: plot, axes, legends ([element_text()];\n#' inherits from `text`)\n#' @param aspect.ratio aspect ratio of the panel\n#'\n#' @param axis.title,axis.title.x,axis.title.y,axis.title.x.top,axis.title.x.bottom,axis.title.y.left,axis.title.y.right\n#' labels of axes ([element_text()]). Specify all axes' labels (`axis.title`),\n#' labels by plane (using `axis.title.x` or `axis.title.y`), or individually\n#' for each axis (using `axis.title.x.bottom`, `axis.title.x.top`,\n#' `axis.title.y.left`, `axis.title.y.right`). `axis.title.*.*` inherits from\n#' `axis.title.*` which inherits from `axis.title`, which in turn inherits\n#' from `text`\n#' @param axis.text,axis.text.x,axis.text.y,axis.text.x.top,axis.text.x.bottom,axis.text.y.left,axis.text.y.right\n#' tick labels along axes ([element_text()]). Specify all axis tick labels (`axis.text`),\n#' tick labels by plane (using `axis.text.x` or `axis.text.y`), or individually\n#' for each axis (using `axis.text.x.bottom`, `axis.text.x.top`,\n#' `axis.text.y.left`, `axis.text.y.right`). `axis.text.*.*` inherits from\n#' `axis.text.*` which inherits from `axis.text`, which in turn inherits\n#' from `text`\n#' @param axis.ticks,axis.ticks.x,axis.ticks.x.top,axis.ticks.x.bottom,axis.ticks.y,axis.ticks.y.left,axis.ticks.y.right\n#' tick marks along axes ([element_line()]). Specify all tick marks (`axis.ticks`),\n#' ticks by plane (using `axis.ticks.x` or `axis.ticks.y`), or individually\n#' for each axis (using `axis.ticks.x.bottom`, `axis.ticks.x.top`,\n#' `axis.ticks.y.left`, `axis.ticks.y.right`). `axis.ticks.*.*` inherits from\n#' `axis.ticks.*` which inherits from `axis.ticks`, which in turn inherits\n#' from `line`\n#' @param axis.ticks.length length of tick marks (`unit`)\n#' @param axis.line,axis.line.x,axis.line.x.top,axis.line.x.bottom,axis.line.y,axis.line.y.left,axis.line.y.right\n#' lines along axes ([element_line()]). Specify lines along all axes (`axis.line`),\n#' lines for each plane (using `axis.line.x` or `axis.line.y`), or individually\n#' for each axis (using `axis.line.x.bottom`, `axis.line.x.top`,\n#' `axis.line.y.left`, `axis.line.y.right`). `axis.line.*.*` inherits from\n#' `axis.line.*` which inherits from `axis.line`, which in turn inherits\n#' from `line`\n#'\n#' @param legend.background background of legend ([element_rect()]; inherits\n#' from `rect`)\n#' @param legend.margin the margin around each legend ([margin()])\n#' @param legend.spacing,legend.spacing.x,legend.spacing.y\n#' the spacing between legends (`unit`). `legend.spacing.x` & `legend.spacing.y`\n#' inherit from `legend.spacing` or can be specified separately\n#' @param legend.key background underneath legend keys ([element_rect()];\n#' inherits from `rect`)\n#' @param legend.key.size,legend.key.height,legend.key.width\n#' size of legend keys (`unit`); key background height & width inherit from\n#' `legend.key.size` or can be specified separately\n#' @param legend.text legend item labels ([element_text()]; inherits from\n#' `text`)\n#' @param legend.text.align alignment of legend labels (number from 0 (left) to\n#' 1 (right))\n#' @param legend.title title of legend ([element_text()]; inherits from\n#' `title`)\n#' @param legend.title.align alignment of legend title (number from 0 (left) to\n#' 1 (right))\n#' @param legend.position the position of legends (\"none\", \"left\", \"right\",\n#' \"bottom\", \"top\", or two-element numeric vector)\n#' @param legend.direction layout of items in legends (\"horizontal\" or\n#' \"vertical\")\n#' @param legend.justification anchor point for positioning legend inside plot\n#' (\"center\" or two-element numeric vector) or the justification according to\n#' the plot area when positioned outside the plot\n#' @param legend.box arrangement of multiple legends (\"horizontal\" or\n#' \"vertical\")\n#' @param legend.box.just justification of each legend within the overall\n#' bounding box, when there are multiple legends (\"top\", \"bottom\", \"left\", or\n#' \"right\")\n#' @param legend.box.margin margins around the full legend area, as specified\n#' using [margin()]\n#' @param legend.box.background background of legend area ([element_rect()];\n#' inherits from `rect`)\n#' @param legend.box.spacing The spacing between the plotting area and the\n#' legend box (`unit`)\n#'\n#' @param panel.background background of plotting area, drawn underneath plot\n#' ([element_rect()]; inherits from `rect`)\n#' @param panel.border border around plotting area, drawn on top of plot so that\n#' it covers tick marks and grid lines. This should be used with\n#' `fill = NA`\n#' ([element_rect()]; inherits from `rect`)\n#' @param panel.spacing,panel.spacing.x,panel.spacing.y spacing between facet\n#' panels (`unit`). `panel.spacing.x` & `panel.spacing.y` inherit from `panel.spacing`\n#' or can be specified separately.\n#' @param panel.grid,panel.grid.major,panel.grid.minor,panel.grid.major.x,panel.grid.major.y,panel.grid.minor.x,panel.grid.minor.y\n#' grid lines ([element_line()]). Specify major grid lines,\n#' or minor grid lines separately (using `panel.grid.major` or `panel.grid.minor`)\n#' or individually for each axis (using `panel.grid.major.x`, `panel.grid.minor.x`,\n#' `panel.grid.major.y`, `panel.grid.minor.y`). Y axis grid lines are horizontal\n#' and x axis grid lines are vertical. `panel.grid.*.*` inherits from\n#' `panel.grid.*` which inherits from `panel.grid`, which in turn inherits\n#' from `line`\n#' @param panel.ontop option to place the panel (background, gridlines) over\n#' the data layers (`logical`). Usually used with a transparent or blank\n#' `panel.background`.\n#'\n#' @param plot.background background of the entire plot ([element_rect()];\n#' inherits from `rect`)\n#' @param plot.title plot title (text appearance) ([element_text()]; inherits\n#' from `title`) left-aligned by default\n#' @param plot.subtitle plot subtitle (text appearance) ([element_text()];\n#' inherits from `title`) left-aligned by default\n#' @param plot.caption caption below the plot (text appearance)\n#' ([element_text()]; inherits from `title`) right-aligned by default\n#' @param plot.tag upper-left label to identify a plot (text appearance)\n#' ([element_text()]; inherits from `title`) left-aligned by default\n#' @param plot.tag.position The position of the tag as a string (\"topleft\",\n#' \"top\", \"topright\", \"left\", \"right\", \"bottomleft\", \"bottom\", \"bottomright)\n#' or a coordinate. If a string, extra space will be added to accommodate the\n#' tag.\n#' @param plot.margin margin around entire plot (`unit` with the sizes of\n#' the top, right, bottom, and left margins)\n#'\n#' @param strip.background,strip.background.x,strip.background.y\n#' background of facet labels ([element_rect()];\n#' inherits from `rect`). Horizontal facet background (`strip.background.x`)\n#' & vertical facet background (`strip.background.y`) inherit from\n#' `strip.background` or can be specified separately\n#' @param strip.placement placement of strip with respect to axes,\n#' either \"inside\" or \"outside\". Only important when axes and strips are\n#' on the same side of the plot.\n#' @param strip.text,strip.text.x,strip.text.y facet labels ([element_text()];\n#' inherits from `text`). Horizontal facet labels (`strip.text.x`) & vertical\n#' facet labels (`strip.text.y`) inherit from `strip.text` or can be specified\n#' separately\n#' @param strip.switch.pad.grid space between strips and axes when strips are\n#' switched (`unit`)\n#' @param strip.switch.pad.wrap space between strips and axes when strips are\n#' switched (`unit`)\n#'\n#' @param ... additional element specifications not part of base ggplot2. If\n#' supplied `validate` needs to be set to `FALSE`.\n#' @param complete set this to `TRUE` if this is a complete theme, such as\n#' the one returned by [theme_grey()]. Complete themes behave\n#' differently when added to a ggplot object. Also, when setting\n#' `complete = TRUE` all elements will be set to inherit from blank\n#' elements.\n#' @param validate `TRUE` to run `validate_element()`, `FALSE` to bypass checks.\n#'\n#' @seealso\n#' [+.gg()] and \\code{\\link{\\%+replace\\%}},\n#' [element_blank()], [element_line()],\n#' [element_rect()], and [element_text()] for\n#' details of the specific theme elements.\n#' @export\n#' @examples\n#' p1 <- ggplot(mtcars, aes(wt, mpg)) +\n#' geom_point() +\n#' labs(title = \"Fuel economy declines as weight increases\")\n#' p1\n#'\n#' # Plot ---------------------------------------------------------------------\n#' p1 + theme(plot.title = element_text(size = rel(2)))\n#' p1 + theme(plot.background = element_rect(fill = \"green\"))\n#'\n#' # Panels --------------------------------------------------------------------\n#'\n#' p1 + theme(panel.background = element_rect(fill = \"white\", colour = \"grey50\"))\n#' p1 + theme(panel.border = element_rect(linetype = \"dashed\", fill = NA))\n#' p1 + theme(panel.grid.major = element_line(colour = \"black\"))\n#' p1 + theme(\n#' panel.grid.major.y = element_blank(),\n#' panel.grid.minor.y = element_blank()\n#' )\n#'\n#' # Put gridlines on top of data\n#' p1 + theme(\n#' panel.background = element_rect(fill = NA),\n#' panel.grid.major = element_line(colour = \"grey50\"),\n#' panel.ontop = TRUE\n#' )\n#'\n#' # Axes ----------------------------------------------------------------------\n#' p1 + theme(axis.line = element_line(size = 3, colour = \"grey80\"))\n#' p1 + theme(axis.text = element_text(colour = \"blue\"))\n#' p1 + theme(axis.ticks = element_line(size = 2))\n#' p1 + theme(axis.ticks.length = unit(.25, \"cm\"))\n#' p1 + theme(axis.title.y = element_text(size = rel(1.5), angle = 90))\n#'\n#' \\donttest{\n#' # Legend --------------------------------------------------------------------\n#' p2 <- ggplot(mtcars, aes(wt, mpg)) +\n#' geom_point(aes(colour = factor(cyl), shape = factor(vs))) +\n#' labs(\n#' x = \"Weight (1000 lbs)\",\n#' y = \"Fuel economy (mpg)\",\n#' colour = \"Cylinders\",\n#' shape = \"Transmission\"\n#' )\n#' p2\n#'\n#' # Position\n#' p2 + theme(legend.position = \"none\")\n#' p2 + theme(legend.justification = \"top\")\n#' p2 + theme(legend.position = \"bottom\")\n#'\n#' # Or place legends inside the plot using relative coordinates between 0 and 1\n#' # legend.justification sets the corner that the position refers to\n#' p2 + theme(\n#' legend.position = c(.95, .95),\n#' legend.justification = c(\"right\", \"top\"),\n#' legend.box.just = \"right\",\n#' legend.margin = margin(6, 6, 6, 6)\n#' )\n#'\n#' # The legend.box properties work similarly for the space around\n#' # all the legends\n#' p2 + theme(\n#' legend.box.background = element_rect(),\n#' legend.box.margin = margin(6, 6, 6, 6)\n#' )\n#'\n#' # You can also control the display of the keys\n#' # and the justification related to the plot area can be set\n#' p2 + theme(legend.key = element_rect(fill = \"white\", colour = \"black\"))\n#' p2 + theme(legend.text = element_text(size = 8, colour = \"red\"))\n#' p2 + theme(legend.title = element_text(face = \"bold\"))\n#'\n#' # Strips --------------------------------------------------------------------\n#'\n#' p3 <- ggplot(mtcars, aes(wt, mpg)) +\n#' geom_point() +\n#' facet_wrap(~ cyl)\n#' p3\n#'\n#' p3 + theme(strip.background = element_rect(colour = \"black\", fill = \"white\"))\n#' p3 + theme(strip.text.x = element_text(colour = \"white\", face = \"bold\"))\n#' p3 + theme(panel.spacing = unit(1, \"lines\"))\n#' }\ntheme <- function(line,\n rect,\n text,\n title,\n aspect.ratio,\n axis.title,\n axis.title.x,\n axis.title.x.top,\n axis.title.x.bottom,\n axis.title.y,\n axis.title.y.left,\n axis.title.y.right,\n axis.text,\n axis.text.x,\n axis.text.x.top,\n axis.text.x.bottom,\n axis.text.y,\n axis.text.y.left,\n axis.text.y.right,\n axis.ticks,\n axis.ticks.x,\n axis.ticks.x.top,\n axis.ticks.x.bottom,\n axis.ticks.y,\n axis.ticks.y.left,\n axis.ticks.y.right,\n axis.ticks.length,\n axis.line,\n axis.line.x,\n axis.line.x.top,\n axis.line.x.bottom,\n axis.line.y,\n axis.line.y.left,\n axis.line.y.right,\n legend.background,\n legend.margin,\n legend.spacing,\n legend.spacing.x,\n legend.spacing.y,\n legend.key,\n legend.key.size,\n legend.key.height,\n legend.key.width,\n legend.text,\n legend.text.align,\n legend.title,\n legend.title.align,\n legend.position,\n legend.direction,\n legend.justification,\n legend.box,\n legend.box.just,\n legend.box.margin,\n legend.box.background,\n legend.box.spacing,\n panel.background,\n panel.border,\n panel.spacing,\n panel.spacing.x,\n panel.spacing.y,\n panel.grid,\n panel.grid.major,\n panel.grid.minor,\n panel.grid.major.x,\n panel.grid.major.y,\n panel.grid.minor.x,\n panel.grid.minor.y,\n panel.ontop,\n plot.background,\n plot.title,\n plot.subtitle,\n plot.caption,\n plot.tag,\n plot.tag.position,\n plot.margin,\n strip.background,\n strip.background.x,\n strip.background.y,\n strip.placement,\n strip.text,\n strip.text.x,\n strip.text.y,\n strip.switch.pad.grid,\n strip.switch.pad.wrap,\n ...,\n complete = FALSE,\n validate = TRUE\n ) {\n elements <- find_args(..., complete = NULL, validate = NULL)\n\n if (!is.null(elements$axis.ticks.margin)) {\n warning(\"`axis.ticks.margin` is deprecated. Please set `margin` property \",\n \" of `axis.text` instead\", call. = FALSE)\n elements$axis.ticks.margin <- NULL\n }\n if (!is.null(elements$panel.margin)) {\n warning(\"`panel.margin` is deprecated. Please use `panel.spacing` property \",\n \"instead\", call. = FALSE)\n elements$panel.spacing <- elements$panel.margin\n elements$panel.margin <- NULL\n }\n if (!is.null(elements$panel.margin.x)) {\n warning(\"`panel.margin.x` is deprecated. Please use `panel.spacing.x` property \",\n \"instead\", call. = FALSE)\n elements$panel.spacing.x <- elements$panel.margin.x\n elements$panel.margin.x <- NULL\n }\n if (!is.null(elements$panel.margin.y)) {\n warning(\"`panel.margin` is deprecated. Please use `panel.spacing` property \",\n \"instead\", call. = FALSE)\n elements$panel.spacing.y <- elements$panel.margin.y\n elements$panel.margin.y <- NULL\n }\n if (is.unit(elements$legend.margin) && !is.margin(elements$legend.margin)) {\n warning(\"`legend.margin` must be specified using `margin()`. For the old \",\n \"behavior use legend.spacing\", call. = FALSE)\n elements$legend.spacing <- elements$legend.margin\n elements$legend.margin <- margin()\n }\n\n # Check that all elements have the correct class (element_text, unit, etc)\n if (validate) {\n mapply(validate_element, elements, names(elements))\n }\n\n # If complete theme set all non-blank elements to inherit from blanks\n if (complete) {\n elements <- lapply(elements, function(el) {\n if (inherits(el, \"element\") && !inherits(el, \"element_blank\")) {\n el$inherit.blank <- TRUE\n }\n el\n })\n }\n structure(\n elements,\n class = c(\"theme\", \"gg\"),\n complete = complete,\n validate = validate\n )\n}\n\nis_theme_complete <- function(x) isTRUE(attr(x, \"complete\"))\n\n\n# Combine plot defaults with current theme to get complete theme for a plot\nplot_theme <- function(x, default = theme_get()) {\n theme <- x$theme\n if (is_theme_complete(theme)) {\n theme\n } else {\n defaults(theme, default)\n }\n}\n\n#' Modify properties of an element in a theme object\n#'\n#' @param t1 A theme object\n#' @param t2 A theme object that is to be added to `t1`\n#' @param t2name A name of the t2 object. This is used for printing\n#' informative error messages.\n#' @keywords internal\nadd_theme <- function(t1, t2, t2name) {\n if (!is.theme(t2)) {\n stop(\"Don't know how to add RHS to a theme object\",\n call. = FALSE)\n }\n\n # Iterate over the elements that are to be updated\n for (item in names(t2)) {\n x <- t1[[item]]\n y <- t2[[item]]\n\n if (is.null(x) || inherits(x, \"element_blank\")) {\n # If x is NULL or element_blank, then just assign it y\n x <- y\n } else if (is.null(y) || is.character(y) || is.numeric(y) || is.unit(y) ||\n is.logical(y) || inherits(y, \"element_blank\")) {\n # If y is NULL, or a string or numeric vector, or is element_blank, just replace x\n x <- y\n } else {\n # If x is not NULL, then merge into y\n x <- merge_element(y, x)\n }\n\n # Assign it back to t1\n # This is like doing t1[[item]] <- x, except that it preserves NULLs.\n # The other form will simply drop NULL values\n t1[item] <- list(x)\n }\n\n # If either theme is complete, then the combined theme is complete\n attr(t1, \"complete\") <- is_theme_complete(t1) || is_theme_complete(t2)\n t1\n}\n\n\n# Update a theme from a plot object\n#\n# This is called from add_ggplot.\n#\n# If newtheme is a *complete* theme, then it is meant to replace\n# oldtheme; this function just returns newtheme.\n#\n# Otherwise, it adds elements from newtheme to oldtheme:\n# If oldtheme doesn't already contain those elements,\n# it searches the current default theme, grabs the elements with the\n# same name as those from newtheme, and puts them in oldtheme. Then\n# it adds elements from newtheme to oldtheme.\n# This makes it possible to do things like:\n# ggplot(data.frame(x = 1:3, y = 1:3)) +\n# geom_point() + theme(text = element_text(colour = 'red'))\n# and have 'text' keep properties from the default theme. Otherwise\n# you would have to set all the element properties, like family, size,\n# etc.\n#\n# @param oldtheme an existing theme, usually from a plot object, like\n# plot$theme. This could be an empty list.\n# @param newtheme a new theme object to add to the existing theme\nupdate_theme <- function(oldtheme, newtheme) {\n # If the newtheme is a complete one, don't bother searching\n # the default theme -- just replace everything with newtheme\n if (is_theme_complete(newtheme))\n return(newtheme)\n\n # These are elements in newtheme that aren't already set in oldtheme.\n # They will be pulled from the default theme.\n newitems <- !names(newtheme) %in% names(oldtheme)\n newitem_names <- names(newtheme)[newitems]\n oldtheme[newitem_names] <- theme_get()[newitem_names]\n\n # Update the theme elements with the things from newtheme\n # Turn the 'theme' list into a proper theme object first, and preserve\n # the 'complete' attribute. It's possible that oldtheme is an empty\n # list, and in that case, set complete to FALSE.\n old.validate <- isTRUE(attr(oldtheme, \"validate\"))\n new.validate <- isTRUE(attr(newtheme, \"validate\"))\n oldtheme <- do.call(theme, c(oldtheme,\n complete = isTRUE(attr(oldtheme, \"complete\")),\n validate = old.validate & new.validate))\n\n oldtheme + newtheme\n}\n\n#' Calculate the element properties, by inheriting properties from its parents\n#'\n#' @param element The name of the theme element to calculate\n#' @param theme A theme object (like [theme_grey()])\n#' @param verbose If TRUE, print out which elements this one inherits from\n#' @keywords internal\n#' @export\n#' @examples\n#' t <- theme_grey()\n#' calc_element('text', t)\n#'\n#' # Compare the \"raw\" element definition to the element with calculated inheritance\n#' t$axis.text.x\n#' calc_element('axis.text.x', t, verbose = TRUE)\n#'\n#' # This reports that axis.text.x inherits from axis.text,\n#' # which inherits from text. You can view each of them with:\n#' t$axis.text.x\n#' t$axis.text\n#' t$text\ncalc_element <- function(element, theme, verbose = FALSE) {\n if (verbose) message(element, \" --> \", appendLF = FALSE)\n\n # If this is element_blank, don't inherit anything from parents\n if (inherits(theme[[element]], \"element_blank\")) {\n if (verbose) message(\"element_blank (no inheritance)\")\n return(theme[[element]])\n }\n\n # If the element is defined (and not just inherited), check that\n # it is of the class specified in .element_tree\n if (!is.null(theme[[element]]) &&\n !inherits(theme[[element]], ggplot_global$element_tree[[element]]$class)) {\n stop(element, \" should have class \", ggplot_global$element_tree[[element]]$class)\n }\n\n # Get the names of parents from the inheritance tree\n pnames <- ggplot_global$element_tree[[element]]$inherit\n\n # If no parents, this is a \"root\" node. Just return this element.\n if (is.null(pnames)) {\n # Check that all the properties of this element are non-NULL\n nullprops <- vapply(theme[[element]], is.null, logical(1))\n if (any(nullprops)) {\n stop(\"Theme element '\", element, \"' has NULL property: \",\n paste(names(nullprops)[nullprops], collapse = \", \"))\n }\n\n if (verbose) message(\"nothing (top level)\")\n return(theme[[element]])\n }\n\n # Calculate the parent objects' inheritance\n if (verbose) message(paste(pnames, collapse = \", \"))\n parents <- lapply(pnames, calc_element, theme, verbose)\n\n # Combine the properties of this element with all parents\n Reduce(combine_elements, parents, theme[[element]])\n}\n\n#' Merge a parent element into a child element\n#'\n#' This is a generic and element classes must provide an implementation of this\n#' method\n#'\n#' @param new The child element in the theme hierarchy\n#' @param old The parent element in the theme hierarchy\n#' @return A modified version of `new` updated with the properties of\n#' `old`\n#' @keywords internal\n#' @export\n#' @examples\n#' new <- element_text(colour = \"red\")\n#' old <- element_text(colour = \"blue\", size = 10)\n#'\n#' # Adopt size but ignore colour\n#' merge_element(new, old)\n#'\nmerge_element <- function(new, old) {\n UseMethod(\"merge_element\")\n}\n#' @rdname merge_element\n#' @export\nmerge_element.default <- function(new, old) {\n stop(\"No method for merging \", class(new)[1], \" into \", class(old)[1], call. = FALSE)\n}\n#' @rdname merge_element\n#' @export\nmerge_element.element <- function(new, old) {\n if (!inherits(new, class(old)[1])) {\n stop(\"Only elements of the same class can be merged\", call. = FALSE)\n }\n # Override NULL properties of new with the values in old\n # Get logical vector of NULL properties in new\n idx <- vapply(new, is.null, logical(1))\n # Get the names of TRUE items\n idx <- names(idx[idx])\n\n # Update non-NULL items\n new[idx] <- old[idx]\n\n new\n}\n\n# Combine the properties of two elements\n#\n# @param e1 An element object\n# @param e2 An element object which e1 inherits from\ncombine_elements <- function(e1, e2) {\n\n # If e2 is NULL, nothing to inherit\n if (is.null(e2) || inherits(e1, \"element_blank\")) return(e1)\n # If e1 is NULL inherit everything from e2\n if (is.null(e1)) return(e2)\n # If e2 is element_blank, and e1 inherits blank inherit everything from e2,\n # otherwise ignore e2\n if (inherits(e2, \"element_blank\")) {\n if (e1$inherit.blank) return(e2)\n else return(e1)\n }\n\n # If e1 has any NULL properties, inherit them from e2\n n <- vapply(e1[names(e2)], is.null, logical(1))\n e1[n] <- e2[n]\n\n # Calculate relative sizes\n if (is.rel(e1$size)) {\n e1$size <- e2$size * unclass(e1$size)\n }\n\n e1\n}\n\n#' Reports whether x is a theme object\n#' @param x An object to test\n#' @export\n#' @keywords internal\nis.theme <- function(x) inherits(x, \"theme\")\n\n#' @export\nprint.theme <- function(x, ...) utils::str(x)","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/theme.r"},{"filename":"grid/R/gpar.R","content":"# File src/library/grid/R/gpar.R\n# Part of the R package, https://www.R-project.org\n#\n# Copyright (C) 1995-2016 The R Core Team\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# A copy of the GNU General Public License is available at\n# https://www.R-project.org/Licenses/\n\n\n# A \"gpar\" object is a list of graphics parameters\n# A graphics parameter is a name-value pair\n\ngpar <- function(...) {\n gp <- validGP(list(...))\n class(gp) <- \"gpar\"\n gp\n}\n\nis.gpar <- function(x) {\n inherits(x, \"gpar\")\n}\n\nprint.gpar <- function(x, ...) {\n print(unclass(x), ...)\n invisible(x)\n}\n\nvalidGP <- function(gpars) {\n # Check a (non-NULL) gpar is not of length 0\n check.length <- function(gparname) {\n if (length(gpars[[gparname]]) == 0)\n stop(gettextf(\"'gpar' element '%s' must not be length 0\", gparname),\n domain = NA)\n }\n # Check a gpar is numeric and not NULL\n numnotnull <- function(gparname) {\n if (!is.na(match(gparname, names(gpars)))) {\n if (is.null(gpars[[gparname]]))\n gpars[[gparname]] <<- NULL\n else {\n check.length(gparname)\n gpars[[gparname]] <<- as.numeric(gpars[[gparname]])\n }\n }\n }\n checkNA <- function(gparname) {\n if (!is.na(match(gparname, names(gpars)))) {\n if (any(is.na(gpars[[gparname]]))) {\n # ALL NA gets removed (ignored)\n if (all(is.na(gpars[[gparname]]))) {\n gpars[[gparname]] <<- NULL\n } else {\n stop(gettextf(\"mixture of missing and non-missing values for %s\",\n gparname),\n domain=NA)\n }\n }\n }\n }\n # fontsize, lineheight, cex, lwd should be numeric and not NULL\n numnotnull(\"fontsize\")\n checkNA(\"fontsize\")\n numnotnull(\"lineheight\")\n checkNA(\"lineheight\")\n numnotnull(\"cex\")\n checkNA(\"cex\")\n numnotnull(\"lwd\")\n numnotnull(\"lex\")\n # gamma defunct in 2.7.0\n if (\"gamma\" %in% names(gpars)) {\n warning(\"'gamma' 'gpar' element is defunct\")\n gpars$gamma <- NULL\n }\n numnotnull(\"alpha\")\n # col and fill are converted in C code\n # BUT still want to check length > 0\n if (!is.na(match(\"col\", names(gpars)))) {\n if (is.null(gpars$col))\n gpars$col <- NULL\n else\n check.length(\"col\")\n }\n if (!is.na(match(\"fill\", names(gpars)))) {\n if (is.null(gpars$fill))\n gpars$fill <- NULL\n else\n check.length(\"fill\")\n }\n # lty converted in C code\n # BUT still want to check for NULL and check length > 0\n if (!is.na(match(\"lty\", names(gpars)))) {\n if (is.null(gpars$lty))\n gpars$lty <- NULL\n else\n check.length(\"lty\")\n }\n if (!is.na(match(\"lineend\", names(gpars)))) {\n if (is.null(gpars$lineend))\n gpars$lineend <- NULL\n else\n check.length(\"lineend\")\n }\n if (!is.na(match(\"linejoin\", names(gpars)))) {\n if (is.null(gpars$linejoin))\n gpars$linejoin <- NULL\n else\n check.length(\"linejoin\")\n }\n # linemitre should be larger than 1\n numnotnull(\"linemitre\")\n if (!is.na(match(\"linemitre\", names(gpars)))) {\n if (any(gpars$linemitre < 1))\n stop(\"invalid 'linemitre' value\")\n }\n # alpha should be 0 to 1\n if (!is.na(match(\"alpha\", names(gpars)))) {\n if (any(gpars$alpha < 0 || gpars$alpha > 1))\n stop(\"invalid 'alpha' value\")\n }\n # font should be integer and not NULL\n if (!is.na(match(\"font\", names(gpars)))) {\n if (is.null(gpars$font))\n gpars$font <- NULL\n else {\n check.length(\"font\")\n gpars$font <- as.integer(gpars$font)\n }\n }\n # fontfamily should be character\n if (!is.na(match(\"fontfamily\", names(gpars)))) {\n if (is.null(gpars$fontfamily))\n gpars$fontfamily <- NULL\n else {\n check.length(\"fontfamily\")\n gpars$fontfamily <- as.character(gpars$fontfamily)\n checkNA(\"fontfamily\")\n }\n }\n # fontface can be character or integer; map character to integer\n # store value in font\n # Illegal to specify both font and fontface\n if (!is.na(match(\"fontface\", names(gpars)))) {\n if (!is.na(match(\"font\", names(gpars))))\n stop(\"must specify only one of 'font' and 'fontface'\")\n gpars$font <-\n\tif (is.null(gpars$fontface)) NULL # remove it\n\telse {\n\t check.length(\"fontface\")\n\t if (is.numeric(gpars$fontface))\n\t\tas.integer(gpars$fontface)\n\t else\n\t\tvapply(as.character(gpars$fontface),\n\t\t function(ch) # returns integer\n\t\t switch(ch,\n\t\t\t plain = 1L,\n\t\t\t bold = 2L,\n\t\t\t italic=, oblique = 3L,\n\t\t\t bold.italic = 4L,\n\t\t\t symbol= 5L,\n\t\t\t\t\t# These are Hershey variants\n\t\t\t cyrillic=5L,\n\t\t\t cyrillic.oblique=6L,\n\t\t\t EUC = 7L,\n\t\t\t stop(\"invalid fontface \", ch)), 0L)\n\t}\n }\n gpars\n}\n\n# Method for subsetting \"gpar\" objects\n`[.gpar` <- function(x, index, ...) {\n if (length(x) == 0)\n return(gpar())\n maxn <- do.call(\"max\", lapply(x, length))\n newgp <- lapply(x, rep, length.out=maxn)\n newgp <- lapply(X = newgp, FUN = \"[\", index, ...)\n class(newgp) <- \"gpar\"\n newgp\n}\n\n# possible gpar names\n# The order must match the GP_* values in grid.h\n.grid.gpar.names <- c(\"fill\", \"col\", \"gamma\", \"lty\", \"lwd\", \"cex\",\n \"fontsize\", \"lineheight\", \"font\", \"fontfamily\",\n \"alpha\", \"lineend\", \"linejoin\", \"linemitre\",\n \"lex\",\n # Keep fontface at the end because it is never\n # used in C code (it gets mapped to font)\n \"fontface\")\n\nset.gpar <- function(gp, engineDL=TRUE) {\n if (!is.gpar(gp))\n stop(\"argument must be a 'gpar' object\")\n temp <- grid.Call(C_getGPar)\n # gamma defunct in 2.7.0\n if (\"gamma\" %in% names(gp)) {\n warning(\"'gamma' 'gpar' element is defunct\")\n gp$gamma <- NULL\n }\n # Special case \"cex\" (make it cumulative)\n if (match(\"cex\", names(gp), nomatch=0L))\n tempcex <- temp$cex * gp$cex\n else\n tempcex <- temp$cex\n # Special case \"alpha\" (make it cumulative)\n if (match(\"alpha\", names(gp), nomatch=0L))\n tempalpha <- temp$alpha * gp$alpha\n else\n tempalpha <- temp$alpha\n # Special case \"lex\" (make it cumulative)\n if (match(\"lex\", names(gp), nomatch=0L))\n templex <- temp$lex * gp$lex\n else\n templex <- temp$lex\n # All other gpars\n temp[names(gp)] <- gp\n temp$cex <- tempcex\n temp$alpha <- tempalpha\n temp$lex <- templex\n if (engineDL) {\n ## Do this as a .Call.graphics to get it onto the base display list\n grid.Call.graphics(C_setGPar, temp)\n } else {\n grid.Call(C_setGPar, temp)\n }\n}\n\nget.gpar <- function(names=NULL) {\n if (is.null(names)) {\n result <- grid.Call(C_getGPar)\n # drop gamma\n result$gamma <- NULL\n } else {\n if (!is.character(names) ||\n !all(names %in% .grid.gpar.names))\n stop(\"must specify only valid 'gpar' names\")\n # gamma deprecated\n if (\"gamma\" %in% names) {\n warning(\"'gamma' 'gpar' element is defunct\")\n names <- names[-match(\"gamma\", names)]\n }\n result <- unclass(grid.Call(C_getGPar))[names]\n }\n class(result) <- \"gpar\"\n result\n}\n\n# When editing a gp slot, only update the specified gpars\n# Assume gp is NULL or a gpar\n# assume newgp is a gpar (and not NULL)\nmod.gpar <- function(gp, newgp) {\n if (is.null(gp))\n gp <- newgp\n else\n gp[names(newgp)] <- newgp\n gp\n}\n","normpath":"/Users/thomas/Dropbox/GitHub/grid/R/gpar.R"},{"filename":"grid/R/viewport.R","content":"# File src/library/grid/R/viewport.R\n# Part of the R package, https://www.R-project.org\n#\n# Copyright (C) 1995-2013 The R Core Team\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# A copy of the GNU General Public License is available at\n# https://www.R-project.org/Licenses/\n\n\ninitvpAutoName <- function() {\n index <- 0\n function() {\n index <<- index + 1\n paste0(\"GRID.VP.\", index)\n }\n}\n\nvpAutoName <- initvpAutoName()\n\n# NOTE: The order of the elements in viewports and pushedvps are\n# VERY IMPORTANT because the C code accesses them using constant\n# indices (i.e., if you change the order here the world will end!\nvalid.viewport <- function(x, y, width, height, just,\n gp, clip,\n xscale, yscale, angle,\n layout, layout.pos.row, layout.pos.col,\n name) {\n if (length(x) > 1 || length(y) > 1 ||\n length(width) > 1 || length(height) > 1)\n stop(\"'x', 'y', 'width', and 'height' must all be units of length 1\")\n if (!is.gpar(gp))\n stop(\"invalid 'gp' value\")\n if (!is.logical(clip))\n clip <- switch(as.character(clip),\n on=TRUE,\n off=NA,\n inherit=FALSE,\n stop(\"invalid 'clip' value\"))\n # Ensure both 'xscale' and 'yscale' are numeric (brute force defense)\n xscale <- as.numeric(xscale)\n yscale <- as.numeric(yscale)\n if (!is.numeric(xscale) || length(xscale) != 2 ||\n any(!is.finite(xscale)) || diff(xscale) == 0)\n stop(\"invalid 'xscale' in viewport\")\n if (!is.numeric(yscale) || length(yscale) != 2 ||\n any(!is.finite(yscale)) || diff(yscale) == 0)\n stop(\"invalid 'yscale' in viewport\")\n if (!is.numeric(angle) || length(angle) != 1 ||\n !is.finite(angle))\n stop(\"invalid 'angle' in viewport\")\n if (!(is.null(layout) || is.layout(layout)))\n stop(\"invalid 'layout' in viewport\")\n if (!is.null(layout.pos.row)) {\n layout.pos.row <- as.integer(range(layout.pos.row))\n if (any(!is.finite(layout.pos.row)))\n stop(\"invalid 'layout.pos.row' in viewport\")\n }\n if (!is.null(layout.pos.col)) {\n layout.pos.col <- as.integer(range(layout.pos.col))\n if (any(!is.finite(layout.pos.col)))\n stop(\"invalid 'layout.pos.col' in viewport\")\n }\n # If name is NULL then we give it a default\n # Otherwise it should be a valid R name\n if (is.null(name))\n name <- vpAutoName()\n # Put all the valid things first so that are found quicker\n vp <- list(x = x, y = y, width = width, height = height,\n justification = just,\n gp = gp,\n clip = clip,\n xscale = xscale,\n yscale = yscale,\n angle = angle,\n layout = layout,\n layout.pos.row = layout.pos.row,\n layout.pos.col = layout.pos.col,\n valid.just = valid.just(just),\n valid.pos.row = layout.pos.row,\n valid.pos.col = layout.pos.col,\n name=name)\n class(vp) <- \"viewport\"\n vp\n}\n\n# When a viewport is pushed, an internal copy is stored along\n# with plenty of additional information relevant to the state\n# at the time of being pushed (this is all used to return to this\n# viewport without having to repush it)\npushedvp <- function(vp) {\n # NOTE that this function is only called from C code:\n # either directly from L_setviewport() or indirectly from initVP()\n # via grid.top.level.vp()\n # vp$gpar and vp$parentgpar are both set previously in push.vp.viewport()\n pvp <- c(vp, list(trans = NULL,\n widths = NULL,\n heights = NULL,\n width.cm = NULL,\n height.cm = NULL,\n rotation = NULL,\n cliprect = NULL,\n parent = NULL,\n # Children of this pushedvp will be stored\n # in an environment\n children = new.env(hash=TRUE, parent=baseenv()),\n # Initial value of 0 means that the viewport will\n # be pushed \"properly\" the first time, calculating\n # transformations, etc ...\n devwidthcm = 0,\n devheightcm = 0))\n class(pvp) <- c(\"pushedvp\", class(vp))\n pvp\n}\n\nvpFromPushedvp <- function(pvp) {\n vp <- pvp[c(\"x\", \"y\", \"width\", \"height\",\n \"justification\", \"gp\", \"clip\",\n \"xscale\", \"yscale\", \"angle\",\n \"layout\", \"layout.pos.row\", \"layout.pos.col\",\n \"valid.just\", \"valid.pos.row\", \"valid.pos.col\",\n \"name\")]\n class(vp) <- \"viewport\"\n vp\n}\n\nas.character.viewport <- function(x, ...) {\n paste0(\"viewport[\", x$name, \"]\")\n}\n\nas.character.vpList <- function(x, ...) {\n paste0(\"(\", paste(vapply(x, as.character, \"\"), collapse=\", \"), \")\")\n}\n\nas.character.vpStack <- function(x, ...) {\n paste(vapply(x, as.character, \"\"), collapse=\"->\")\n}\n\nas.character.vpTree <- function(x, ...) {\n paste(x$parent, x$children, sep=\"->\")\n}\n\nprint.viewport <- function(x, ...) {\n cat(as.character(x), \"\\n\")\n invisible(x)\n}\n\nwidth.details.viewport <- function(x) {\n absolute.size(x$width)\n}\n\nheight.details.viewport <- function(x) {\n absolute.size(x$height)\n}\n\n# How many \"levels\" in viewport object\ndepth <- function(x, ...) {\n UseMethod(\"depth\")\n}\n\ndepth.viewport <- function(x, ...) {\n 1\n}\n\ndepth.vpList <- function(x, ...) {\n # When pushed, the last element of the vpList is pushed last\n # so we are left whereever that leaves us\n depth(x[[length(x)]], ...)\n}\n\ndepth.vpStack <- function(x, ...) {\n # Elements in the stack may be vpStacks or vpLists or vpTrees\n # so need to sum all the depths\n sum(sapply(x, depth, ..., simplify=TRUE))\n}\n\ndepth.vpTree <- function(x, ...) {\n # When pushed, the last element of the vpTree$children is\n # pushed last so we are left wherever that leaves us\n depth(x$parent, ...) + depth(x$children[[length(x$children)]], ...)\n}\n\ndepth.path <- function(x, ...) {\n x$n\n}\n\n####################\n# Accessors\n####################\n\nviewport.layout <- function(vp) {\n vp$layout\n}\n\nviewport.transform <- function(vp) {\n .Defunct(\"current.transform\")\n}\n\n####################\n# Public Constructor\n####################\nviewport <- function(x = unit(0.5, \"npc\"),\n y = unit(0.5, \"npc\"),\n width = unit(1, \"npc\"),\n height = unit(1, \"npc\"),\n default.units = \"npc\",\n just = \"centre\",\n gp = gpar(),\n clip = \"inherit\",\n # FIXME: scales are only linear at the moment\n xscale = c(0, 1),\n yscale = c(0, 1),\n angle = 0,\n # Layout for arranging children of this viewport\n layout = NULL,\n # Position of this viewport in parent's layout\n layout.pos.row = NULL,\n layout.pos.col = NULL,\n # This is down here to avoid breaking\n # existing code\n name=NULL) {\n if (!is.unit(x))\n x <- unit(x, default.units)\n if (!is.unit(y))\n y <- unit(y, default.units)\n if (!is.unit(width))\n width <- unit(width, default.units)\n if (!is.unit(height))\n height <- unit(height, default.units)\n valid.viewport(x, y, width, height, just,\n gp, clip, xscale, yscale, angle,\n layout, layout.pos.row, layout.pos.col, name)\n}\n\nis.viewport <- function(vp) {\n inherits(vp, \"viewport\")\n}\n\n#############\n# Some classes derived from viewport\n#############\n\nviewportorpath <- function(x) {\n is.viewport(x) || inherits(x, \"vpPath\")\n}\n\nvpListFromList <- function(vps) {\n if (all(sapply(vps, viewportorpath, simplify=TRUE))) {\n class(vps) <- c(\"vpList\", \"viewport\")\n vps\n } else {\n stop(\"only viewports allowed in 'vpList'\")\n }\n}\n\n# Viewports will be pushed in parallel\nvpList <- function(...) {\n vps <- list(...)\n vpListFromList(vps)\n}\n\n# Viewports will be pushed in series\nvpStack <- function(...) {\n vps <- list(...)\n if (all(sapply(vps, viewportorpath, simplify=TRUE))) {\n class(vps) <- c(\"vpStack\", \"viewport\")\n vps\n } else {\n stop(\"only viewports allowed in 'vpStack'\")\n }\n}\n\n# Viewports will be pushed as a tree\nvpTree <- function(parent, children) {\n if (viewportorpath(parent) && inherits(children, \"vpList\")) {\n tree <- list(parent=parent, children=children)\n class(tree) <- c(\"vpTree\", \"viewport\")\n tree\n } else {\n stop(\"'parent' must be a viewport and 'children' must be a 'vpList' in 'vpTree'\")\n }\n}\n\n# A function for setting all gpars for vpStack/List/Tree\n# Used in size.R\nsetvpgpar <- function(vp) {\n UseMethod(\"setvpgpar\")\n}\n\nsetvpgpar.viewport <- function(vp) {\n if (!is.null(vp$gp))\n set.gpar(vp$gp)\n}\n\nsetvpgpar.vpStack <- function(vp) {\n lapply(vp, setvpgpar)\n}\n\nsetvpgpar.vpList <- function(vp) {\n setvpgpar(vp[[length(vp)]])\n}\n\nsetvpgpar.vpTree <- function(vp) {\n setvpgpar(vp$parent)\n setvpgpar(vp$children)\n}\n\n#############\n# Functions for creating \"paths\" of viewport names\n#############\n.grid.pathSep <- \"::\"\n\nvpPathFromVector <- function(names) {\n if (any(bad <- !is.character(names)))\n stop(ngettext(sum(bad),\n \"invalid viewport name\",\n \"invalid viewport names\"),\n domain = NA)\n names <- unlist(strsplit(names, .grid.pathSep))\n n <- length(names)\n if (n < 1)\n stop(\"a viewport path must contain at least one viewport name\")\n path <- list(path=if (n==1) NULL else\n paste(names[seq_len(n-1L)], collapse=.grid.pathSep),\n name=names[n],\n n=n)\n class(path) <- c(\"vpPath\", \"path\")\n path\n}\n\nvpPath <- function(...) {\n names <- c(...)\n vpPathFromVector(names)\n}\n\nas.character.path <- function(x, ...) {\n if (x$n == 1)\n x$name\n else\n paste(x$path, x$name, sep=.grid.pathSep)\n}\n\nprint.path <- function(x, ...) {\n cat(as.character(x), \"\\n\")\n invisible(x)\n}\n\n`[.vpPath` <- function(x, index, ...) {\n names <- unlist(strsplit(as.character(x), .grid.pathSep))[index]\n vpPathFromVector(names)\n}\n\n# Explode path$path\nexplode <- function(x) {\n UseMethod(\"explode\")\n}\n\nexplode.character <- function(x) {\n unlist(strsplit(x, .grid.pathSep))\n}\n\nexplode.path <- function(x) {\n if (x$n == 1)\n x$name\n else\n c(explode(x$path), x$name)\n}\n\n\n#############\n# Some handy viewport functions\n#############\n\n# Create a viewport with margins given in number of lines\nplotViewport <- function(margins=c(5.1, 4.1, 4.1, 2.1), ...) {\n margins <- rep(as.numeric(margins), length.out=4)\n viewport(x=unit(margins[2L], \"lines\"),\n width=unit(1, \"npc\") - unit(sum(margins[c(2,4)]), \"lines\"),\n y=unit(margins[1L], \"lines\"),\n height=unit(1, \"npc\") - unit(sum(margins[c(1,3)]), \"lines\"),\n just=c(\"left\", \"bottom\"),\n ...)\n}\n\n# Create a viewport from data\n# If xscale not specified then determine from x\n# If yscale not specified then determine from y\ndataViewport <- function(xData = NULL, yData = NULL,\n xscale = NULL, yscale = NULL, extension = 0.05, ...)\n{\n extension <- rep(extension, length.out = 2)\n if (is.null(xscale)) {\n if (is.null(xData))\n stop(\"must specify at least one of 'x' or 'xscale'\")\n xscale <- extendrange(xData, f = extension[1L])\n }\n if (is.null(yscale)) {\n if (is.null(yData))\n stop(\"must specify at least one of 'y' or 'yscale'\")\n yscale <- extendrange(yData, f = extension[2L])\n }\n viewport(xscale = xscale, yscale = yscale, ...)\n}","normpath":"/Users/thomas/Dropbox/GitHub/grid/R/viewport.R"},{"filename":"ggplot2/R/grob-absolute.r","content":"#' Absolute grob\n#'\n#' This grob has fixed dimensions and position.\n#'\n#' It's still experimental\n#'\n#' @keywords internal\nabsoluteGrob <- function(grob, width = NULL, height = NULL,\n xmin = NULL, ymin = NULL, vp = NULL) {\n\n gTree(\n children = grob,\n width = width, height = height,\n xmin = xmin, ymin = ymin,\n vp = vp, cl = \"absoluteGrob\"\n )\n}\n\n#' @export\n#' @method grobHeight absoluteGrob\ngrobHeight.absoluteGrob <- function(x) {\n x$height %||% grobHeight(x$children)\n}\n#' @export\n#' @method grobWidth absoluteGrob\ngrobWidth.absoluteGrob <- function(x) {\n x$width %||% grobWidth(x$children)\n}\n\n#' @export\n#' @method grobX absoluteGrob\ngrobX.absoluteGrob <- function(x, theta) {\n if (!is.null(x$xmin) && theta == \"west\") return(x$xmin)\n grobX(x$children, theta)\n}\n#' @export\n#' @method grobY absoluteGrob\ngrobY.absoluteGrob <- function(x, theta) {\n if (!is.null(x$ymin) && theta == \"south\") return(x$ymin)\n grobY(x$children, theta)\n}\n\n#' @export\n#' @method grid.draw absoluteGrob\ngrid.draw.absoluteGrob <- function(x, recording = TRUE) {\n NextMethod()\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/grob-absolute.r"},{"filename":"ggplot2/R/scale-continuous.r","content":"#' Position scales for continuous data (x & y)\n#'\n#' `scale_x_continuous()` and `scale_y_continuous()` are the default\n#' scales for continuous x and y aesthetics. There are three variants\n#' that set the `trans` argument for commonly used transformations:\n#' `scale_*_log10()`, `scale_*_sqrt()` and `scale_*_reverse()`.\n#'\n#' For simple manipulation of labels and limits, you may wish to use\n#' [labs()] and [lims()] instead.\n#'\n#' @inheritParams continuous_scale\n#' @family position scales\n#' @param ... Other arguments passed on to `scale_(x|y)_continuous()`\n#' @examples\n#' p1 <- ggplot(mpg, aes(displ, hwy)) +\n#' geom_point()\n#' p1\n#'\n#' # Manipulating the default position scales lets you:\n#' # * change the axis labels\n#' p1 +\n#' scale_x_continuous(\"Engine displacement (L)\") +\n#' scale_y_continuous(\"Highway MPG\")\n#'\n#' # You can also use the short-cut labs().\n#' # Use NULL to suppress axis labels\n#' p1 + labs(x = NULL, y = NULL)\n#'\n#' # * modify the axis limits\n#' p1 + scale_x_continuous(limits = c(2, 6))\n#' p1 + scale_x_continuous(limits = c(0, 10))\n#'\n#' # you can also use the short hand functions `xlim()` and `ylim()`\n#' p1 + xlim(2, 6)\n#'\n#' # * choose where the ticks appear\n#' p1 + scale_x_continuous(breaks = c(2, 4, 6))\n#'\n#' # * choose your own labels\n#' p1 + scale_x_continuous(\n#' breaks = c(2, 4, 6),\n#' label = c(\"two\", \"four\", \"six\")\n#' )\n#'\n#' # Typically you'll pass a function to the `labels` argument.\n#' # Some common formats are built into the scales package:\n#' df <- data.frame(\n#' x = rnorm(10) * 100000,\n#' y = seq(0, 1, length.out = 10)\n#' )\n#' p2 <- ggplot(df, aes(x, y)) + geom_point()\n#' p2 + scale_y_continuous(labels = scales::percent)\n#' p2 + scale_y_continuous(labels = scales::dollar)\n#' p2 + scale_x_continuous(labels = scales::comma)\n#'\n#' # You can also override the default linear mapping by using a\n#' # transformation. There are three shortcuts:\n#' p1 + scale_y_log10()\n#' p1 + scale_y_sqrt()\n#' p1 + scale_y_reverse()\n#'\n#' # Or you can supply a transformation in the `trans` argument:\n#' p1 + scale_y_continuous(trans = scales::reciprocal_trans())\n#'\n#' # You can also create your own. See ?scales::trans_new\n#'\n#' @name scale_continuous\n#' @aliases NULL\nNULL\n\n#' @rdname scale_continuous\n#'\n#' @param sec.axis specify a secondary axis\n#'\n#' @seealso [sec_axis()] for how to specify secondary axes\n#' @export\nscale_x_continuous <- function(name = waiver(), breaks = waiver(),\n minor_breaks = waiver(), labels = waiver(),\n limits = NULL, expand = waiver(), oob = censor,\n na.value = NA_real_, trans = \"identity\",\n position = \"bottom\", sec.axis = waiver()) {\n sc <- continuous_scale(\n c(\"x\", \"xmin\", \"xmax\", \"xend\", \"xintercept\", \"xmin_final\", \"xmax_final\", \"xlower\", \"xmiddle\", \"xupper\", \"x0\"),\n \"position_c\", identity, name = name, breaks = breaks,\n minor_breaks = minor_breaks, labels = labels, limits = limits,\n expand = expand, oob = oob, na.value = na.value, trans = trans,\n guide = \"none\", position = position, super = ScaleContinuousPosition\n )\n\n set_sec_axis(sec.axis, sc)\n\n}\n\n#' @rdname scale_continuous\n#' @export\nscale_y_continuous <- function(name = waiver(), breaks = waiver(),\n minor_breaks = waiver(), labels = waiver(),\n limits = NULL, expand = waiver(), oob = censor,\n na.value = NA_real_, trans = \"identity\",\n position = \"left\", sec.axis = waiver()) {\n sc <- continuous_scale(\n c(\"y\", \"ymin\", \"ymax\", \"yend\", \"yintercept\", \"ymin_final\", \"ymax_final\", \"lower\", \"middle\", \"upper\", \"y0\"),\n \"position_c\", identity, name = name, breaks = breaks,\n minor_breaks = minor_breaks, labels = labels, limits = limits,\n expand = expand, oob = oob, na.value = na.value, trans = trans,\n guide = \"none\", position = position, super = ScaleContinuousPosition\n )\n\n set_sec_axis(sec.axis, sc)\n}\n\n\n#' @rdname ggplot2-ggproto\n#' @format NULL\n#' @usage NULL\n#' @export\nScaleContinuousPosition <- ggproto(\"ScaleContinuousPosition\", ScaleContinuous,\n secondary.axis = waiver(),\n # Position aesthetics don't map, because the coordinate system takes\n # care of it. But they do need to be made in to doubles, so stat methods\n # can tell the difference between continuous and discrete data.\n map = function(self, x, limits = self$get_limits()) {\n scaled <- as.numeric(self$oob(x, limits))\n ifelse(!is.na(scaled), scaled, self$na.value)\n },\n break_info = function(self, range = NULL) {\n breaks <- ggproto_parent(ScaleContinuous, self)$break_info(range)\n if (!(is.waive(self$secondary.axis) || self$secondary.axis$empty())) {\n self$secondary.axis$init(self)\n breaks <- c(breaks, self$secondary.axis$break_info(breaks$range, self))\n }\n breaks\n },\n sec_name = function(self) {\n if (is.waive(self$secondary.axis)) {\n waiver()\n } else {\n self$secondary.axis$name\n }\n },\n make_sec_title = function(self, title) {\n if (!is.waive(self$secondary.axis)) {\n self$secondary.axis$make_title(title)\n } else {\n ggproto_parent(ScaleContinuous, self)$make_sec_title(title)\n }\n }\n)\n\n# Transformed scales ---------------------------------------------------------\n\n#' @rdname scale_continuous\n#' @export\nscale_x_log10 <- function(...) {\n scale_x_continuous(..., trans = log10_trans())\n}\n#' @rdname scale_continuous\n#' @export\nscale_y_log10 <- function(...) {\n scale_y_continuous(..., trans = log10_trans())\n}\n#' @rdname scale_continuous\n#' @export\nscale_x_reverse <- function(...) {\n scale_x_continuous(..., trans = reverse_trans())\n}\n#' @rdname scale_continuous\n#' @export\nscale_y_reverse <- function(...) {\n scale_y_continuous(..., trans = reverse_trans())\n}\n#' @rdname scale_continuous\n#' @export\nscale_x_sqrt <- function(...) {\n scale_x_continuous(..., trans = sqrt_trans())\n}\n#' @rdname scale_continuous\n#' @export\nscale_y_sqrt <- function(...) {\n scale_y_continuous(..., trans = sqrt_trans())\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/scale-continuous.r"},{"filename":"ggplot2/R/compat-plyr.R","content":"#' Adds missing elements to a vector from a default vector\n#'\n#' This function appends a given named vector or list with additional elements\n#' from a default vector, only adding those that does not already exist in the\n#' first.\n#'\n#' @param x,y Named vectors or lists\n#'\n#' @return `x` with missing values from `y` appended\n#'\n#' @keywords internal\n#' @noRd\n#'\ndefaults <- function(x, y) c(x, y[setdiff(names(y), names(x))])\n# Remove rownames from data frames and matrices\nunrowname <- function(x) {\n if (is.data.frame(x)) {\n attr(x, \"row.names\") <- .set_row_names(.row_names_info(x, 2L))\n } else if (is.matrix(x)) {\n dimnames(x)[1] <- list(NULL)\n } else {\n stop(\"Can only remove rownames from data.frame and matrix objects\", call. = FALSE)\n }\n x\n}\n#' Rename elements in a list, data.frame or vector\n#'\n#' This is akin to `dplyr::rename` and `plyr::rename`. It renames elements given\n#' as names in the `replace` vector to the values in the `replace` vector\n#' without touching elements not referenced.\n#'\n#' @param x A data.frame or a named vector or list\n#' @param replace A named character vector. The names identifies the elements in\n#' `x` that should be renamed and the values gives the new names.\n#'\n#' @return `x`, with new names according to `replace`\n#'\n#' @keywords internal\n#' @noRd\n#'\nrename <- function(x, replace) {\n current_names <- names(x)\n old_names <- names(replace)\n missing_names <- setdiff(old_names, current_names)\n if (length(missing_names) > 0) {\n replace <- replace[!old_names %in% missing_names]\n old_names <- names(replace)\n }\n names(x)[match(old_names, current_names)] <- as.vector(replace)\n x\n}\n# Adapted from plyr:::id_vars\n# Create a unique id for elements in a single vector\nid_var <- function(x, drop = FALSE) {\n if (length(x) == 0) {\n id <- integer()\n n = 0L\n } else if (!is.null(attr(x, \"n\")) && !drop) {\n return(x)\n } else if (is.factor(x) && !drop) {\n x <- addNA(x, ifany = TRUE)\n id <- as.integer(x)\n n <- length(levels(x))\n } else {\n levels <- sort(unique(x), na.last = TRUE)\n id <- match(x, levels)\n n <- max(id)\n }\n attr(id, \"n\") <- n\n id\n}\n#' Create an unique integer id for each unique row in a data.frame\n#'\n#' Properties:\n#' - `order(id)` is equivalent to `do.call(order, df)`\n#' - rows containing the same data have the same value\n#' - if `drop = FALSE` then room for all possibilites\n#'\n#' @param .variables list of variables\n#' @param drop Should unused factor levels be dropped?\n#'\n#' @return An integer vector with attribute `n` giving the total number of\n#' possible unique rows\n#'\n#' @keywords internal\n#' @noRd\n#'\nid <- function(.variables, drop = FALSE) {\n nrows <- NULL\n if (is.data.frame(.variables)) {\n nrows <- nrow(.variables)\n .variables <- unclass(.variables)\n }\n lengths <- vapply(.variables, length, integer(1))\n .variables <- .variables[lengths != 0]\n if (length(.variables) == 0) {\n n <- nrows %||% 0L\n id <- seq_len(n)\n attr(id, \"n\") <- n\n return(id)\n }\n if (length(.variables) == 1) {\n return(id_var(.variables[[1]], drop = drop))\n }\n ids <- rev(lapply(.variables, id_var, drop = drop))\n p <- length(ids)\n ndistinct <- vapply(ids, attr, \"n\", FUN.VALUE = numeric(1), USE.NAMES = FALSE)\n n <- prod(ndistinct)\n if (n > 2^31) {\n char_id <- do.call(\"paste\", c(ids, sep = \"\\r\"))\n res <- match(char_id, unique(char_id))\n }\n else {\n combs <- c(1, cumprod(ndistinct[-p]))\n mat <- do.call(\"cbind\", ids)\n res <- c((mat - 1L) %*% combs + 1L)\n }\n if (drop) {\n id_var(res, drop = TRUE)\n }\n else {\n res <- as.integer(res)\n attr(res, \"n\") <- n\n res\n }\n}\n#' Count number of occurences for each unique combination of variables\n#'\n#' Each unique combination of the variables in `df` given by `vars` will be\n#' identified and their occurences counted. If `wt_var` is given the counts will\n#' be weighted by the values in this column.\n#'\n#' @param df A data.frame\n#' @param vars A vector of column names. If `NULL` all columns in `df` will be\n#' used\n#' @param wt_var The name of a column to use as weight\n#'\n#' @return A data.frame with the unique combinations counted along with a `n`\n#' column giving the counts\n#'\n#' @keywords internal\n#' @noRd\n#'\ncount <- function(df, vars = NULL, wt_var = NULL) {\n df2 <- if (is.null(vars)) df else df[vars]\n id <- id(df2, drop = TRUE)\n u_id <- !duplicated(id)\n labels <- df2[u_id, , drop = FALSE]\n labels <- labels[order(id[u_id]), , drop = FALSE]\n if (is.null(wt_var)) {\n freq <- tabulate(id, attr(id, \"n\"))\n } else {\n wt <- .subset2(df, wt_var)\n freq <- vapply(split(wt, id), sum, numeric(1))\n }\n new_data_frame(c(as.list(labels), list(n = freq)))\n}\n# Adapted from plyr::join.keys\n# Create a shared unique id across two data frames such that common variable\n# combinations in the two data frames gets the same id\njoin_keys <- function(x, y, by) {\n joint <- rbind_dfs(list(x[by], y[by]))\n keys <- id(joint, drop = TRUE)\n n_x <- nrow(x)\n n_y <- nrow(y)\n list(x = keys[seq_len(n_x)], y = keys[n_x + seq_len(n_y)],\n n = attr(keys, \"n\"))\n}\n#' Replace specified values with new values, in a factor or character vector\n#'\n#' An easy to use substitution of elements in a string-like vector (character or\n#' factor). If `x` is a character vector the matching elements will be replaced\n#' directly and if `x` is a factor the matching levels will be replaced\n#'\n#' @param x A character or factor vector\n#' @param replace A named character vector with the names corresponding to the\n#' elements to replace and the values giving the replacement.\n#'\n#' @return A vector of the same class as `x` with the given values replaced\n#'\n#' @keywords internal\n#' @noRd\n#'\nrevalue <- function(x, replace) {\n if (is.character(x)) {\n replace <- replace[names(replace) %in% x]\n if (length(replace) == 0) return(x)\n x[match(names(replace), x)] <- replace\n } else if (is.factor(x)) {\n lev <- levels(x)\n replace <- replace[names(replace) %in% lev]\n if (length(replace) == 0) return(x)\n lev[match(names(replace), lev)] <- replace\n levels(x) <- lev\n } else if (!is.null(x)) {\n stop(\"x is not a factor or character vector\", call. = FALSE)\n }\n x\n}\n# Iterate through a formula and return a quoted version\nsimplify_formula <- function(x) {\n if (length(x) == 2 && x[[1]] == as.name(\"~\")) {\n return(simplify(x[[2]]))\n }\n if (length(x) < 3)\n return(list(x))\n op <- x[[1]]\n a <- x[[2]]\n b <- x[[3]]\n if (op == as.name(\"+\") || op == as.name(\"*\") || op ==\n as.name(\"~\")) {\n c(simplify(a), simplify(b))\n }\n else if (op == as.name(\"-\")) {\n c(simplify(a), bquote(-.(x), list(x = simplify(b))))\n }\n else {\n list(x)\n }\n}\n#' Create a quoted version of x\n#'\n#' This function captures the special meaning of formulas in the context of\n#' facets in ggplot2, where `+` have special meaning. It works as\n#' `plyr::as.quoted` but only for the special cases of `character`, `call`, and\n#' `formula` input as these are the only situations relevant for ggplot2.\n#'\n#' @param x A formula, string, or call to be quoted\n#' @param env The environment to a attach to the quoted expression.\n#'\n#' @keywords internal\n#' @noRd\n#'\nas.quoted <- function(x, env = parent.frame()) {\n x <- if (is.character(x)) {\n lapply(x, function(x) parse(text = x)[[1]])\n } else if (is.formula(x)) {\n simplify_formula(x)\n } else if (is.call(x)) {\n as.list(x)[-1]\n } else {\n stop(\"Only knows how to quote characters, calls, and formula\", call. = FALSE)\n }\n attributes(x) <- list(env = env, class = 'quoted')\n x\n}\n# round a number to a given precision\nround_any <- function(x, accuracy, f = round) {\n if (!is.numeric(x)) stop(\"x must be numeric\", call. = FALSE)\n f(x/accuracy) * accuracy\n}\n#' Bind data frames together by common column names\n#'\n#' This function is akin to `plyr::rbind.fill`, `dplyr::bind_rows`, and\n#' `data.table::rbindlist`. It takes data frames in a list and stacks them on\n#' top of each other, filling out values with `NA` if the column is missing from\n#' a data.frame\n#'\n#' @param dfs A list of data frames\n#'\n#' @return A data.frame with the union of all columns from the data frames given\n#' in `dfs`\n#'\n#' @keywords internal\n#' @noRd\n#'\nrbind_dfs <- function(dfs) {\n out <- list()\n columns <- unique(unlist(lapply(dfs, names)))\n nrows <- vapply(dfs, .row_names_info, integer(1), type = 2L)\n total <- sum(nrows)\n if (length(columns) == 0) return(new_data_frame(list(), total))\n allocated <- rep(FALSE, length(columns))\n names(allocated) <- columns\n col_levels <- list()\n for (df in dfs) {\n new_columns <- intersect(names(df), columns[!allocated])\n for (col in new_columns) {\n if (is.factor(df[[col]])) {\n all_factors <- all(vapply(dfs, function(df) {\n val <- .subset2(df, col)\n is.null(val) || is.factor(val)\n }, logical(1)))\n if (all_factors) {\n col_levels[[col]] <- unique(unlist(lapply(dfs, function(df) levels(.subset2(df, col)))))\n }\n out[[col]] <- rep(NA_character_, total)\n } else {\n out[[col]] <- rep(.subset2(df, col)[1][NA], total)\n }\n }\n allocated[new_columns] <- TRUE\n if (all(allocated)) break\n }\n pos <- c(cumsum(nrows) - nrows + 1)\n for (i in seq_along(dfs)) {\n df <- dfs[[i]]\n rng <- seq(pos[i], length.out = nrows[i])\n for (col in names(df)) {\n if (inherits(df[[col]], 'factor')) {\n out[[col]][rng] <- as.character(df[[col]])\n } else {\n out[[col]][rng] <- df[[col]]\n }\n }\n }\n for (col in names(col_levels)) {\n out[[col]] <- factor(out[[col]], levels = col_levels[[col]])\n }\n attributes(out) <- list(class = \"data.frame\", names = names(out), row.names = .set_row_names(total))\n out\n}\n#' Apply function to unique subsets of a data.frame\n#'\n#' This function is akin to `plyr::ddply`. It takes a single data.frame,\n#' splits it by the unique combinations of the columns given in `by`, apply a\n#' function to each split, and then reassembles the results into a sigle\n#' data.frame again.\n#'\n#' @param df A data.frame\n#' @param by A character vector of column names to split by\n#' @param fun A function to apply to each split\n#' @param ... Further arguments to `fun`\n#' @param drop Should unused factor levels in the columns given in `by` be\n#' dropped.\n#'\n#' @return A data.frame if the result of `fun` does not include the columns\n#' given in `by` these will be prepended to the result.\n#'\n#' @keywords internal\n#' @noRd\ndapply <- function(df, by, fun, ..., drop = TRUE) {\n grouping_cols <- .subset(df, by)\n ids <- id(grouping_cols, drop = drop)\n group_rows <- split(seq_len(nrow(df)), ids)\n rbind_dfs(lapply(seq_along(group_rows), function(i) {\n cur_data <- df_rows(df, group_rows[[i]])\n res <- fun(cur_data, ...)\n if (is.null(res)) return(res)\n if (length(res) == 0) return(new_data_frame())\n vars <- lapply(setNames(by, by), function(col) .subset2(cur_data, col)[1])\n if (is.matrix(res)) res <- split_matrix(res)\n if (is.null(names(res))) names(res) <- paste0(\"V\", seq_along(res))\n new_data_frame(modify_list(unclass(vars), unclass(res)))\n }))\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/compat-plyr.R"},{"filename":"grid/R/just.R","content":"# File src/library/grid/R/just.R\n# Part of the R package, https://www.R-project.org\n#\n# Copyright (C) 1995-2013 The R Core Team\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# A copy of the GNU General Public License is available at\n# https://www.R-project.org/Licenses/\n\n# NOTE: the order of the strings in these conversion functions must\n# match the order of the enums in ../src/lattice.h\n# NOTE: the result of match() is an integer, but subtracting 1 converts\n# to real => have to convert back to integer for passing to C code\n\n# If the user specifies two values, the first is horizontal\n# justification and the second is vertical\n\n# If the user specifies only one value, use the following\n# conversion table to give a second default value\n#\n# bottom --> centre, bottom\n# left --> left, centre\n# right --> right, centre\n# top --> centre, top\n# centre --> centre, centre\n\nvalid.charjust <- function(just) {\n if (length(just) == 1) {\n # single value may be any valid just\n just <- as.integer(match(just[1L], c(\"left\", \"right\", \"bottom\", \"top\",\n \"centre\", \"center\")) - 1)\n if (anyNA(just))\n stop(\"invalid justification\")\n } else if (length(just) > 1) {\n # first value must be one of \"left\", \"right\", \"centre\", or \"center\"\n just[1L] <- as.integer(match(just[1L], c(\"left\", \"right\", \"bottom\", \"top\",\n \"centre\", \"center\")) - 1)\n if (!(just[1L] %in% c(0, 1, 4, 5)))\n stop(\"invalid horizontal justification\")\n # second value must be one of \"bottom\", \"top\", \"centre\", or \"center\"\n just[2L] <- as.integer(match(just[2L], c(\"left\", \"right\", \"bottom\", \"top\",\n \"centre\", \"center\")) - 1)\n if (!(just[2L] %in% c(2, 3, 4, 5)))\n stop(\"invalid vertical justification\")\n just <- as.integer(just)\n }\n # Extend to length 2 if necessary\n if (length(just) < 2) {\n if (length(just) == 0)\n just <- c(4, 4)\n else\n just <- switch (just[1L] + 1,\n c(0, 4), # left\n c(1, 4), # right\n c(4, 2), # bottom\n c(4, 3), # top\n c(4, 4), # centre\n c(4, 4)) # center\n }\n # Convert to numeric\n just <- c(switch(just[1L] + 1, 0, 1, NA, NA, 0.5, 0.5),\n switch(just[2L] + 1, NA, NA, 0, 1, 0.5, 0.5))\n # Final paranoid check\n if (anyNA(just))\n stop(\"invalid justification\")\n just\n}\n\nvalid.numjust <- function(just) {\n if (length(just) == 0) {\n c(0.5, 0.5)\n } else {\n if (length(just) < 2) {\n c(just, 0.5)\n } else {\n just\n }\n }\n}\n\nvalid.just <- function(just) {\n if (is.character(just))\n valid.charjust(just)\n else {\n valid.numjust(as.numeric(just))\n }\n}\n\nresolveHJust <- function(just, hjust) {\n if (is.null(hjust) || length(hjust) == 0)\n valid.just(just)[1L]\n else\n hjust\n}\n\nresolveVJust <- function(just, vjust) {\n if (is.null(vjust) || length(vjust) == 0)\n valid.just(just)[2L]\n else\n vjust\n}","normpath":"/Users/thomas/Dropbox/GitHub/grid/R/just.R"},{"filename":"ggplot2/R/utilities.r","content":"#' @export\n#' @examples\n#' ggplot(mpg, aes(displ, hwy)) +\n#' geom_point(alpha = 0.5, colour = \"blue\")\n#'\n#' ggplot(mpg, aes(displ, hwy)) +\n#' geom_point(colour = alpha(\"blue\", 0.5))\nscales::alpha\n\n\"%||%\" <- function(a, b) {\n if (!is.null(a)) a else b\n}\n\n\"%|W|%\" <- function(a, b) {\n if (!is.waive(a)) a else b\n}\n\n# Check required aesthetics are present\n# This is used by geoms and stats to give a more helpful error message\n# when required aesthetics are missing.\n#\n# @param character vector of required aesthetics\n# @param character vector of present aesthetics\n# @param name of object for error message\n# @keyword internal\ncheck_required_aesthetics <- function(required, present, name) {\n missing_aes <- setdiff(required, present)\n if (length(missing_aes) == 0) return()\n\n stop(name, \" requires the following missing aesthetics: \",\n paste(missing_aes, collapse = \", \"), call. = FALSE)\n}\n\n# Concatenate a named list for output\n# Print a `list(a=1, b=2)` as `(a=1, b=2)`\n#\n# @param list to concatenate\n# @keyword internal\n#X clist(list(a=1, b=2))\n#X clist(par()[1:5])\nclist <- function(l) {\n paste(paste(names(l), l, sep = \" = \", collapse = \", \"), sep = \"\")\n}\n\n\n# Test whether package `package` is available. `fun` provides\n# the name of the ggplot2 function that uses this package, and is\n# used only to produce a meaningful error message if the\n# package is not available.\ntry_require <- function(package, fun) {\n if (requireNamespace(package, quietly = TRUE)) {\n return(invisible())\n }\n\n stop(\"Package `\", package, \"` required for `\", fun , \"`.\\n\",\n \"Please install and try again.\", call. = FALSE)\n}\n\n# Return unique columns\n# This is used for figuring out which columns are constant within a group\n#\n# @keyword internal\nuniquecols <- function(df) {\n df <- df[1, sapply(df, function(x) length(unique(x)) == 1), drop = FALSE]\n rownames(df) <- 1:nrow(df)\n df\n}\n\n#' Convenience function to remove missing values from a data.frame\n#'\n#' Remove all non-complete rows, with a warning if `na.rm = FALSE`.\n#' ggplot is somewhat more accommodating of missing values than R generally.\n#' For those stats which require complete data, missing values will be\n#' automatically removed with a warning. If `na.rm = TRUE` is supplied\n#' to the statistic, the warning will be suppressed.\n#'\n#' @param df data.frame\n#' @param na.rm If true, will suppress warning message.\n#' @param vars Character vector of variables to check for missings in\n#' @param name Optional function name to improve error message.\n#' @param finite If `TRUE`, will also remove non-finite values.\n#' @keywords internal\n#' @export\nremove_missing <- function(df, na.rm = FALSE, vars = names(df), name = \"\",\n finite = FALSE) {\n stopifnot(is.logical(na.rm))\n\n vars <- intersect(vars, names(df))\n if (name != \"\") name <- paste(\" (\", name, \")\", sep = \"\")\n\n if (finite) {\n missing <- !cases(df[, vars, drop = FALSE], is_finite)\n str <- \"non-finite\"\n } else {\n missing <- !cases(df[, vars, drop = FALSE], is_complete)\n str <- \"missing\"\n }\n\n if (any(missing)) {\n df <- df[!missing, ]\n if (!na.rm) {\n warning_wrap(\n \"Removed \", sum(missing), \" rows containing \", str, \" values\", name, \".\"\n )\n }\n }\n\n df\n}\n\n# Returns a logical vector of same length as nrow(x). If all data on a row\n# is finite (not NA, NaN, Inf, or -Inf) return TRUE; otherwise FALSE.\ncases <- function(x, fun) {\n ok <- vapply(x, fun, logical(nrow(x)))\n\n # Need a special case test when x has exactly one row, because rowSums\n # doesn't respect dimensions for 1x1 matrices. vapply returns a vector (not\n # a matrix when the input has one row.\n if (is.vector(ok)) {\n all(ok)\n } else {\n # Find all the rows where all are TRUE\n rowSums(as.matrix(ok)) == ncol(x)\n }\n}\n\n# Wrapper around is.finite to handle list cols\nis_finite <- function(x) {\n if (typeof(x) == \"list\") {\n !vapply(x, is.null, logical(1))\n } else {\n is.finite(x)\n }\n}\n\nis_complete <- function(x) {\n if (typeof(x) == \"list\") {\n !vapply(x, is.null, logical(1))\n } else {\n !is.na(x)\n }\n}\n\n\n#' Used in examples to illustrate when errors should occur.\n#'\n#' @param expr code to evaluate.\n#' @export\n#' @keywords internal\n#' @examples\n#' should_stop(stop(\"Hi!\"))\n#' should_stop(should_stop(\"Hi!\"))\nshould_stop <- function(expr) {\n res <- try(print(force(expr)), TRUE)\n if (!inherits(res, \"try-error\")) stop(\"No error!\", call. = FALSE)\n invisible()\n}\n\n\n#' A waiver object.\n#'\n#' A waiver is a \"flag\" object, similar to `NULL`, that indicates the\n#' calling function should just use the default value. It is used in certain\n#' functions to distinguish between displaying nothing (`NULL`) and\n#' displaying a default value calculated elsewhere (`waiver()`)\n#'\n#' @export\n#' @keywords internal\nwaiver <- function() structure(list(), class = \"waiver\")\n\nis.waive <- function(x) inherits(x, \"waiver\")\n\n\nrescale01 <- function(x) {\n rng <- range(x, na.rm = TRUE)\n (x - rng[1]) / (rng[2] - rng[1])\n}\n\n#' Similar to expand_range(), but taking a vector ‘expand’\n#' of *four* expansion values, where the 1st and 2nd\n#' elements are used for the lower limit, and the 3rd and\n#' 4th elements are used for the upper limit).\n#'\n#' The ‘expand’ argument can also be of length 2,\n#' and the expansion values for the lower limit\n#' are then reused for the upper limit.\n#\n#' @noRd\n#' @keywords internal\nexpand_range4 <- function(limits, expand) {\n stopifnot(is.numeric(expand) && (length(expand) %in% c(2,4)))\n # If only two expansion constants are given (i.e. the old syntax),\n # reuse them to generate a four-element expansion vector\n if (length(expand) == 2) { expand <- c(expand, expand) }\n\n # Calculate separate range expansion for the lower and\n # upper range limits, and then combine them into one vector\n lower <- expand_range(limits, expand[1], expand[2])[1]\n upper <- expand_range(limits, expand[3], expand[4])[2]\n c(lower, upper)\n}\n\n#' Generate expansion vector for scales.\n#'\n#' This is a convenience function for generating scale expansion vectors\n#' for the \\code{expand} argument of\n#' \\code{\\link[=scale_x_continuous]{scale_*_continuous}} and\n#' \\code{\\link[=scale_x_discrete]{scale_*_discrete}}.\n#' The expansions vectors are used to add some space between\n#' the data and the axes.\n#'\n#' @export\n#' @param mult vector of multiplicative range expansion factors.\n#' If length 1, both the lower and upper limits of the scale\n#' are expanded outwards by \\code{mult}. If length 2, the lower limit\n#' is expanded by \\code{mult[1]} and the upper limit by \\code{mult[2]}.\n#' @param add vector of additive range expansion constants.\n#' If length 1, both the lower and upper limits of the scale\n#' are expanded outwards by \\code{add} units. If length 2, the\n#' lower limit is expanded by \\code{add[1]} and the upper\n#' limit by \\code{add[2]}.\n#' @examples\n#' # No space below the bars but 10% above them\n#' ggplot(mtcars) +\n#' geom_bar(aes(x = factor(cyl))) +\n#' scale_y_continuous(expand = expand_scale(mult = c(0, .1)))\n#'\n#' # Add 2 units of space on the left and right of the data\n#' ggplot(subset(diamonds, carat > 2), aes(cut, clarity)) +\n#' geom_jitter() +\n#' scale_x_discrete(expand = expand_scale(add = 2))\n#'\n#' # Reproduce the default range expansion used\n#' # when the 'expand' argument is not specified\n#' ggplot(subset(diamonds, carat > 2), aes(cut, price)) +\n#' geom_jitter() +\n#' scale_x_discrete(expand = expand_scale(add = .6)) +\n#' scale_y_continuous(expand = expand_scale(mult = .05))\nexpand_scale = function(mult = 0, add = 0) {\n stopifnot(is.numeric(mult) && is.numeric(add))\n stopifnot((length(mult) %in% 1:2) && (length(add) %in% 1:2))\n\n mult <- rep(mult, length.out = 2)\n add <- rep(add, length.out = 2)\n c(mult[1], add[1], mult[2], add[2])\n}\n\n\n\n#' Give a deprecation error, warning, or message, depending on version number.\n#'\n#' Version numbers have the format <major>.<minor>.<subminor>, like 0.9.2.\n#' This function compares the current version number of ggplot2 against the\n#' specified `version`, which is the most recent version before the\n#' function (or other object) was deprecated.\n#'\n#' `gg_dep` will give an error, warning, or message, depending on the\n#' difference between the current ggplot2 version and the specified\n#' `version`.\n#'\n#' If the current major number is greater than `version`'s major number,\n#' or if the current minor number is more than 1 greater than `version`'s\n#' minor number, give an error.\n#'\n#' If the current minor number differs from `version`'s minor number by\n#' one, give a warning.\n#'\n#' If the current subminor number differs from `version`'s subminor\n#' number, print a message.\n#'\n#' @param version The last version of ggplot2 where this function was good\n#' (in other words, the last version where it was not deprecated).\n#' @param msg The message to print.\n#' @keywords internal\n#' @export\ngg_dep <- function(version, msg) {\n v <- as.package_version(version)\n cv <- utils::packageVersion(\"ggplot2\")\n\n # If current major number is greater than last-good major number, or if\n # current minor number is more than 1 greater than last-good minor number,\n # give error.\n if (cv[[1,1]] > v[[1,1]] || cv[[1,2]] > v[[1,2]] + 1) {\n stop(msg, \" (Defunct; last used in version \", version, \")\",\n call. = FALSE)\n\n # If minor number differs by one, give warning\n } else if (cv[[1,2]] > v[[1,2]]) {\n warning(msg, \" (Deprecated; last used in version \", version, \")\",\n call. = FALSE)\n\n # If only subminor number is greater, give message\n } else if (cv[[1,3]] > v[[1,3]]) {\n message(msg, \" (Deprecated; last used in version \", version, \")\")\n }\n\n invisible()\n}\n\nhas_name <- function(x) {\n nms <- names(x)\n if (is.null(nms)) {\n return(rep(FALSE, length(x)))\n }\n\n !is.na(nms) & nms != \"\"\n}\n\n# Use chartr() for safety since toupper() fails to convert i to I in Turkish locale\nlower_ascii <- \"abcdefghijklmnopqrstuvwxyz\"\nupper_ascii <- \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\nto_lower_ascii <- function(x) chartr(upper_ascii, lower_ascii, x)\nto_upper_ascii <- function(x) chartr(lower_ascii, upper_ascii, x)\n\ntolower <- function(x) {\n stop('Please use `to_lower_ascii()`, which works fine in all locales.', call. = FALSE)\n}\n\ntoupper <- function(x) {\n stop('Please use `to_upper_ascii()`, which works fine in all locales.', call. = FALSE)\n}\n\n# Convert a snake_case string to camelCase\ncamelize <- function(x, first = FALSE) {\n x <- gsub(\"_(.)\", \"\\\\U\\\\1\", x, perl = TRUE)\n if (first) x <- firstUpper(x)\n x\n}\n\nsnakeize <- function(x) {\n x <- gsub(\"([A-Za-z])([A-Z])([a-z])\", \"\\\\1_\\\\2\\\\3\", x)\n x <- gsub(\".\", \"_\", x, fixed = TRUE)\n x <- gsub(\"([a-z])([A-Z])\", \"\\\\1_\\\\2\", x)\n to_lower_ascii(x)\n}\n\nfirstUpper <- function(s) {\n paste0(to_upper_ascii(substring(s, 1, 1)), substring(s, 2))\n}\n\nsnake_class <- function(x) {\n snakeize(class(x)[1])\n}\n#' Is a data.frame empty\n#'\n#' An empty data.frame is defined as either `NULL` or a data.frame with zero\n#' rows or columns\n#'\n#' @param df A data.frame or `NULL`\n#'\n#' @keywords internal\n#' @export\nempty <- function(df) {\n is.null(df) || nrow(df) == 0 || ncol(df) == 0\n}\n\nis.discrete <- function(x) {\n is.factor(x) || is.character(x) || is.logical(x)\n}\n\ncompact <- function(x) {\n null <- vapply(x, is.null, logical(1))\n x[!null]\n}\n\nis.formula <- function(x) inherits(x, \"formula\")\n\ndeparse2 <- function(x) {\n y <- deparse(x, backtick = TRUE)\n if (length(y) == 1) {\n y\n } else {\n paste0(y[[1]], \"...\")\n }\n}\n\nmessage_wrap <- function(...) {\n msg <- paste(..., collapse = \"\", sep = \"\")\n wrapped <- strwrap(msg, width = getOption(\"width\") - 2)\n message(paste0(wrapped, collapse = \"\\n\"))\n}\n\nwarning_wrap <- function(...) {\n msg <- paste(..., collapse = \"\", sep = \"\")\n wrapped <- strwrap(msg, width = getOption(\"width\") - 2)\n warning(paste0(wrapped, collapse = \"\\n\"), call. = FALSE)\n}\n\nvar_list <- function(x) {\n x <- encodeString(x, quote = \"`\")\n if (length(x) > 5) {\n x <- c(x[1:5], paste0(\"and \", length(x) - 5, \" more\"))\n }\n\n paste0(x, collapse = \", \")\n}\n\ndispatch_args <- function(f, ...) {\n args <- list(...)\n formals <- formals(f)\n formals[names(args)] <- args\n formals(f) <- formals\n f\n}\n\nis_missing_arg <- function(x) identical(x, quote(expr = ))\n# Get all arguments in a function as a list. Will fail if an ellipsis argument\n# named .ignore\n# @param ... passed on in case enclosing function uses ellipsis in argument list\nfind_args <- function(...) {\n env <- parent.frame()\n args <- names(formals(sys.function(sys.parent(1))))\n\n vals <- mget(args, envir = env)\n vals <- vals[!vapply(vals, is_missing_arg, logical(1))]\n\n modify_list(vals, list(..., `...` = NULL))\n}\n\n# Used in annotations to ensure printed even when no\n# global data\ndummy_data <- function() new_data_frame(list(x = NA), n = 1)\n\nwith_seed_null <- function(seed, code) {\n if (is.null(seed)) {\n code\n } else {\n withr::with_seed(seed, code)\n }\n}\n\nseq_asc <- function(to, from) {\n if (to > from) {\n integer()\n } else {\n to:from\n }\n}\n\n# Needed to trigger package loading\n#' @importFrom tibble tibble\nNULL\n\n# Check inputs with tibble but allow column vectors (see #2609 and #2374)\nas_gg_data_frame <- function(x) {\n x <- lapply(x, validate_column_vec)\n new_data_frame(tibble::as_tibble(x))\n}\nvalidate_column_vec <- function(x) {\n if (is_column_vec(x)) {\n dim(x) <- NULL\n }\n x\n}\nis_column_vec <- function(x) {\n dims <- dim(x)\n length(dims) == 2L && dims[[2]] == 1L\n}\n\n# Parse takes a vector of n lines and returns m expressions.\n# See https://github.com/tidyverse/ggplot2/issues/2864 for discussion.\n#\n# parse(text = c(\"alpha\", \"\", \"gamma\"))\n# #> expression(alpha, gamma)\n#\n# parse_safe(text = c(\"alpha\", \"\", \"gamma\"))\n# #> expression(alpha, NA, gamma)\n#\nparse_safe <- function(text) {\n stopifnot(is.character(text))\n out <- vector(\"expression\", length(text))\n for (i in seq_along(text)) {\n expr <- parse(text = text[[i]])\n out[[i]] <- if (length(expr) == 0) NA else expr[[1]]\n }\n out\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/utilities.r"},{"filename":"grid/R/layout.R","content":"# File src/library/grid/R/layout.R\n# Part of the R package, https://www.R-project.org\n#\n# Copyright (C) 1995-2016 The R Core Team\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# A copy of the GNU General Public License is available at\n# https://www.R-project.org/Licenses/\n\n\nis.layout <- function(l) {\n inherits(l, \"layout\")\n}\n\n# FIXME: The internal C code now does a lot of recycling of\n# unit values, units, and data. Can some/most/all of the\n# recycling stuff below be removed ?\nvalid.layout <- function(nrow, ncol, widths, heights, respect, just) {\n nrow <- as.integer(nrow)\n ncol <- as.integer(ncol)\n # make sure we're dealing with a unit object\n if (!is.logical(respect)) {\n respect <- as.matrix(respect)\n if (!is.matrix(respect) || any(dim(respect) != c(nrow, ncol)))\n stop(\"'respect' must be logical or an 'nrow' by 'ncol' matrix\")\n }\n if (is.matrix(respect)) {\n respect.mat <- matrix(as.integer(respect),\n dim(respect)[1L],\n dim(respect)[2L])\n respect <- 2\n }\n else respect.mat <- matrix(0L, nrow, ncol)\n\n valid.just <- valid.just(just)\n l <- list(nrow = nrow, ncol = ncol,\n widths = widths, heights = heights,\n respect = respect, valid.respect=as.integer(respect),\n respect.mat = respect.mat,\n just=just, valid.just=valid.just)\n class(l) <- \"layout\"\n l\n}\n\nlayout.torture <- function() {\n top.vp <- viewport(y=0, height=unit(1, \"npc\") - unit(1.5, \"lines\"),\n just=c(\"centre\", \"bottom\"))\n do.label <- function(label) {\n grid.rect(y=1, height=unit(1.5, \"lines\"),\n just=c(\"center\", \"top\"))\n grid.text(label,\n y=unit(1, \"npc\") - unit(1, \"lines\"),\n gp=gpar(font=2))\n }\n # 1 = all relative widths and heights\n grid.show.layout(grid.layout(3,2), vp=top.vp)\n do.label(\"All dimensions relative -- no respect\")\n # (1) with full respect\n grid.show.layout(grid.layout(3,2, respect=TRUE), vp=top.vp)\n do.label(\"All dimensions relative -- full respect\")\n # (1) with partial respect\n grid.show.layout(grid.layout(3,2,respect=matrix(c(1,0,0,0,0,0), 3L, 2L, TRUE)),\n vp=top.vp)\n do.label(\"All dimensions relative -- only top-left cell respected\")\n # (1) with slightly weirder partial respect\n grid.show.layout(grid.layout(3,2,respect=matrix(c(1,0,0,0,0,1), 3L, 2L, TRUE)),\n vp=top.vp)\n do.label(\"All relative -- top-left, bottom-right respected\")\n # 2 = combination of absolute and relative widths and heights\n grid.show.layout(grid.layout(2, 3,\n widths=unit(c(2,4,1), c(\"null\", \"cm\", \"null\")),\n heights=unit(c(6,4), c(\"cm\", \"null\"))),\n vp=top.vp)\n do.label(\"Absolute and relative -- no respect\")\n # (2) with full respect\n grid.show.layout(grid.layout(2, 3,\n widths=unit(c(2,4,1), c(\"null\", \"cm\", \"null\")),\n heights=unit(c(6,4), c(\"cm\", \"null\")), respect=TRUE),\n vp=top.vp)\n do.label(\"Absolute and relative -- full respect\")\n # (2) with partial respect\n grid.show.layout(grid.layout(2, 3,\n widths=unit(c(2,4,1), c(\"null\", \"cm\", \"null\")),\n heights=unit(c(6,4), c(\"cm\", \"null\")),\n respect=matrix(c(0,0,0,0,0,1), 2L, 3L, TRUE)),\n vp=top.vp)\n do.label(\"Absolute and relative -- bottom-right respected\")\n}\n\n# Return the region allocated by the layout of the current viewport\nlayoutRegion <- function(layout.pos.row=1, layout.pos.col=1) {\n region <- grid.Call(C_layoutRegion,\n # This conversion matches the vailidity check in\n # valid.viewport()\n if (is.null(layout.pos.row)) layout.pos.row\n else as.integer(rep(layout.pos.row, length.out=2)),\n if (is.null(layout.pos.col)) layout.pos.col\n else as.integer(rep(layout.pos.col, length.out=2)))\n list(left=unit(region[1L], \"npc\"),\n bottom=unit(region[2L], \"npc\"),\n width=unit(region[3L], \"npc\"),\n height=unit(region[4L], \"npc\"))\n}\n\n####################\n# Accessors\n####################\n\nlayout.nrow <- function(lay) {\n lay$nrow\n}\n\nlayout.ncol <- function(lay) {\n lay$ncol\n}\n\nlayout.widths <- function(lay) {\n lay$widths\n}\n\nlayout.heights <- function(lay) {\n lay$heights\n}\n\nlayout.respect <- function(lay) {\n switch(lay$respect + 1,\n FALSE,\n TRUE,\n lay$respect.mat)\n}\n\n####################\n# Public constructor function\n####################\ngrid.layout <- function (nrow = 1, ncol = 1,\n widths = unit(rep_len(1, ncol), \"null\"),\n heights = unit(rep_len(1, nrow), \"null\"),\n default.units = \"null\",\n respect = FALSE,\n just=\"centre\")\n{\n if (!is.unit(widths))\n widths <- unit(widths, default.units)\n if (!is.unit(heights))\n heights <- unit(heights, default.units)\n valid.layout(nrow, ncol, widths, heights, respect, just)\n}\n\n####################\n# Utility Functions\n####################\n\ndim.layout <- function(x) {\n c(x$nrow, x$ncol)\n}","normpath":"/Users/thomas/Dropbox/GitHub/grid/R/layout.R"},{"filename":"ggplot2/R/performance.R","content":"# Fast data.frame constructor and indexing\n# No checking, recycling etc. unless asked for\nnew_data_frame <- function(x = list(), n = NULL) {\n if (length(x) != 0 && is.null(names(x))) stop(\"Elements must be named\", call. = FALSE)\n lengths <- vapply(x, length, integer(1))\n if (is.null(n)) {\n n <- if (length(x) == 0) 0 else max(lengths)\n }\n for (i in seq_along(x)) {\n if (lengths[i] == n) next\n if (lengths[i] != 1) stop(\"Elements must equal the number of rows or 1\", call. = FALSE)\n x[[i]] <- rep(x[[i]], n)\n }\n\n class(x) <- \"data.frame\"\n\n attr(x, \"row.names\") <- .set_row_names(n)\n x\n}\n\ndata_frame <- function(...) {\n new_data_frame(list(...))\n}\n\ndata.frame <- function(...) {\n stop('Please use `data_frame()` or `new_data_frame()` instead of `data.frame()` for better performance. See the vignette \"ggplot2 internal programming guidelines\" for details.', call. = FALSE)\n}\n\nsplit_matrix <- function(x, col_names = colnames(x)) {\n force(col_names)\n x <- lapply(seq_len(ncol(x)), function(i) x[, i])\n if (!is.null(col_names)) names(x) <- col_names\n x\n}\n \nmat_2_df <- function(x, col_names = colnames(x)) {\n new_data_frame(split_matrix(x, col_names))\n}\n\ndf_col <- function(x, name) .subset2(x, name)\n\ndf_rows <- function(x, i) {\n new_data_frame(lapply(x, `[`, i = i))\n}\n\n# More performant modifyList without recursion\nmodify_list <- function(old, new) {\n for (i in names(new)) old[[i]] <- new[[i]]\n old\n}\nmodifyList <- function(...) {\n stop('Please use `modify_list()` instead of `modifyList()` for better performance. See the vignette \"ggplot2 internal programming guidelines\" for details.', call. = FALSE)\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/performance.R"},{"filename":"ggplot2/R/aes.r","content":"#' @include utilities.r compat-plyr.R\nNULL\n\n#' Construct aesthetic mappings\n#'\n#' Aesthetic mappings describe how variables in the data are mapped to visual\n#' properties (aesthetics) of geoms. Aesthetic mappings can be set in\n#' [ggplot2()] and in individual layers.\n#'\n#' This function also standardises aesthetic names by converting `color` to `colour`\n#' (also in substrings, e.g. `point_color` to `point_colour`) and translating old style\n#' R names to ggplot names (eg. `pch` to `shape`, `cex` to `size`).\n#'\n#' @section Quasiquotation:\n#'\n#' `aes()` is a [quoting function][rlang::quotation]. This means that\n#' its inputs are quoted to be evaluated in the context of the\n#' data. This makes it easy to work with variables from the data frame\n#' because you can name those directly. The flip side is that you have\n#' to use [quasiquotation][rlang::quasiquotation] to program with\n#' `aes()`. See a tidy evaluation tutorial such as the [dplyr\n#' programming vignette](http://dplyr.tidyverse.org/articles/programming.html)\n#' to learn more about these techniques.\n#'\n#' @param x,y,... List of name value pairs giving aesthetics to map to\n#' variables. The names for x and y aesthetics are typically omitted because\n#' they are so common; all other aesthetics must be named.\n#' @seealso [vars()] for another quoting function designed for\n#' faceting specifications.\n#' @return A list with class `uneval`. Components of the list are either\n#' quosures or constants.\n#' @export\n#' @examples\n#' aes(x = mpg, y = wt)\n#' aes(mpg, wt)\n#'\n#' # You can also map aesthetics to functions of variables\n#' aes(x = mpg ^ 2, y = wt / cyl)\n#'\n#' # Or to constants\n#' aes(x = 1, colour = \"smooth\")\n#'\n#' # Aesthetic names are automatically standardised\n#' aes(col = x)\n#' aes(fg = x)\n#' aes(color = x)\n#' aes(colour = x)\n#'\n#' # aes() is passed to either ggplot() or specific layer. Aesthetics supplied\n#' # to ggplot() are used as defaults for every layer.\n#' ggplot(mpg, aes(displ, hwy)) + geom_point()\n#' ggplot(mpg) + geom_point(aes(displ, hwy))\n#'\n#' # Tidy evaluation ----------------------------------------------------\n#' # aes() automatically quotes all its arguments, so you need to use tidy\n#' # evaluation to create wrappers around ggplot2 pipelines. The\n#' # simplest case occurs when your wrapper takes dots:\n#' scatter_by <- function(data, ...) {\n#' ggplot(data) + geom_point(aes(...))\n#' }\n#' scatter_by(mtcars, disp, drat)\n#'\n#' # If your wrapper has a more specific interface with named arguments,\n#' # you need \"enquote and unquote\":\n#' scatter_by <- function(data, x, y) {\n#' x <- enquo(x)\n#' y <- enquo(y)\n#'\n#' ggplot(data) + geom_point(aes(!!x, !!y))\n#' }\n#' scatter_by(mtcars, disp, drat)\n#'\n#' # Note that users of your wrapper can use their own functions in the\n#' # quoted expressions and all will resolve as it should!\n#' cut3 <- function(x) cut_number(x, 3)\n#' scatter_by(mtcars, cut3(disp), drat)\naes <- function(x, y, ...) {\n exprs <- rlang::enquos(x = x, y = y, ..., .ignore_empty = \"all\")\n aes <- new_aes(exprs, env = parent.frame())\n rename_aes(aes)\n}\n\n# Wrap symbolic objects in quosures but pull out constants out of\n# quosures for backward-compatibility\nnew_aesthetic <- function(x, env = globalenv()) {\n if (rlang::is_quosure(x)) {\n if (!rlang::quo_is_symbolic(x)) {\n x <- rlang::quo_get_expr(x)\n }\n return(x)\n }\n\n if (rlang::is_symbolic(x)) {\n x <- rlang::new_quosure(x, env = env)\n return(x)\n }\n\n x\n}\nnew_aes <- function(x, env = globalenv()) {\n stopifnot(is.list(x))\n x <- lapply(x, new_aesthetic, env = env)\n structure(x, class = \"uneval\")\n}\n\n#' @export\nprint.uneval <- function(x, ...) {\n cat(\"Aesthetic mapping: \\n\")\n\n if (length(x) == 0) {\n cat(\"<empty>\\n\")\n } else {\n values <- vapply(x, rlang::quo_label, character(1))\n bullets <- paste0(\"* \", format(paste0(\"`\", names(x), \"`\")), \" -> \", values, \"\\n\")\n\n cat(bullets, sep = \"\")\n }\n\n invisible(x)\n}\n\n#' @export\n\"[.uneval\" <- function(x, i, ...) {\n new_aes(NextMethod())\n}\n\n# If necessary coerce replacements to quosures for compatibility\n#' @export\n\"[[<-.uneval\" <- function(x, i, value) {\n new_aes(NextMethod())\n}\n#' @export\n\"$<-.uneval\" <- function(x, i, value) {\n # Can't use NextMethod() because of a bug in R 3.1\n x <- unclass(x)\n x[[i]] <- value\n new_aes(x)\n}\n#' @export\n\"[<-.uneval\" <- function(x, i, value) {\n new_aes(NextMethod())\n}\n\n#' Standardise aesthetic names\n#'\n#' This function standardises aesthetic names by converting `color` to `colour`\n#' (also in substrings, e.g. `point_color` to `point_colour`) and translating old style\n#' R names to ggplot names (eg. `pch` to `shape`, `cex` to `size`).\n#' @param x Character vector of aesthetics names, such as `c(\"colour\", \"size\", \"shape\")`.\n#' @return Character vector of standardised names.\n#' @keywords internal\n#' @export\nstandardise_aes_names <- function(x) {\n # convert US to UK spelling of colour\n x <- sub(\"color\", \"colour\", x, fixed = TRUE)\n\n # convert old-style aesthetics names to ggplot version\n revalue(x, ggplot_global$base_to_ggplot)\n}\n\n# x is a list of aesthetic mappings, as generated by aes()\nrename_aes <- function(x) {\n names(x) <- standardise_aes_names(names(x))\n duplicated_names <- names(x)[duplicated(names(x))]\n if (length(duplicated_names) > 0L) {\n duplicated_message <- paste0(unique(duplicated_names), collapse = \", \")\n warning(\n \"Duplicated aesthetics after name standardisation: \", duplicated_message, call. = FALSE\n )\n }\n x\n}\n\n# Look up the scale that should be used for a given aesthetic\naes_to_scale <- function(var) {\n var[var %in% c(\"x\", \"xmin\", \"xmax\", \"xend\", \"xintercept\")] <- \"x\"\n var[var %in% c(\"y\", \"ymin\", \"ymax\", \"yend\", \"yintercept\")] <- \"y\"\n\n var\n}\n\n# Figure out if an aesthetic is a position aesthetic or not\nis_position_aes <- function(vars) {\n aes_to_scale(vars) %in% c(\"x\", \"y\")\n}\n\n#' Define aesthetic mappings programmatically\n#'\n#' Aesthetic mappings describe how variables in the data are mapped to visual\n#' properties (aesthetics) of geoms. [aes()] uses non-standard\n#' evaluation to capture the variable names. `aes_` and `aes_string`\n#' require you to explicitly quote the inputs either with `\"\"` for\n#' `aes_string()`, or with `quote` or `~` for `aes_()`.\n#' (`aes_q` is an alias to `aes_`). This makes `aes_` and\n#' `aes_string` easy to program with.\n#'\n#' `aes_string` and `aes_` are particularly useful when writing\n#' functions that create plots because you can use strings or quoted\n#' names/calls to define the aesthetic mappings, rather than having to use\n#' [substitute()] to generate a call to `aes()`.\n#'\n#' I recommend using `aes_()`, because creating the equivalents of\n#' `aes(colour = \"my colour\")` or \\code{aes{x = `X$1`}}\n#' with `aes_string()` is quite clunky.\n#'\n#'\n#' @section Life cycle:\n#'\n#' All these functions are soft-deprecated. Please use tidy evaluation\n#' idioms instead (see the quasiquotation section in\n#' [aes()] documentation).\n#'\n#' @param x,y,... List of name value pairs. Elements must be either\n#' quoted calls, strings, one-sided formulas or constants.\n#' @seealso [aes()]\n#' @export\n#' @examples\n#' # Three ways of generating the same aesthetics\n#' aes(mpg, wt, col = cyl)\n#' aes_(quote(mpg), quote(wt), col = quote(cyl))\n#' aes_(~mpg, ~wt, col = ~cyl)\n#' aes_string(\"mpg\", \"wt\", col = \"cyl\")\n#'\n#' # You can't easily mimic these calls with aes_string\n#' aes(`$100`, colour = \"smooth\")\n#' aes_(~ `$100`, colour = \"smooth\")\n#' # Ok, you can, but it requires a _lot_ of quotes\n#' aes_string(\"`$100`\", colour = '\"smooth\"')\n#'\n#' # Convert strings to names with as.name\n#' var <- \"cyl\"\n#' aes(col = x)\n#' aes_(col = as.name(var))\naes_ <- function(x, y, ...) {\n mapping <- list(...)\n if (!missing(x)) mapping[\"x\"] <- list(x)\n if (!missing(y)) mapping[\"y\"] <- list(y)\n\n caller_env <- parent.frame()\n\n as_quosure_aes <- function(x) {\n if (is.formula(x) && length(x) == 2) {\n rlang::as_quosure(x)\n } else if (is.call(x) || is.name(x) || is.atomic(x)) {\n new_aesthetic(x, caller_env)\n } else {\n stop(\"Aesthetic must be a one-sided formula, call, name, or constant.\",\n call. = FALSE)\n }\n }\n mapping <- lapply(mapping, as_quosure_aes)\n structure(rename_aes(mapping), class = \"uneval\")\n}\n\n#' @rdname aes_\n#' @export\naes_string <- function(x, y, ...) {\n mapping <- list(...)\n if (!missing(x)) mapping[\"x\"] <- list(x)\n if (!missing(y)) mapping[\"y\"] <- list(y)\n\n caller_env <- parent.frame()\n mapping <- lapply(mapping, function(x) {\n if (is.character(x)) {\n x <- rlang::parse_expr(x)\n }\n new_aesthetic(x, env = caller_env)\n })\n\n structure(rename_aes(mapping), class = \"uneval\")\n}\n\n#' @export\n#' @rdname aes_\naes_q <- aes_\n\n#' Given a character vector, create a set of identity mappings\n#'\n#' @param vars vector of variable names\n#' @keywords internal\n#' @export\n#' @examples\n#' aes_all(names(mtcars))\n#' aes_all(c(\"x\", \"y\", \"col\", \"pch\"))\naes_all <- function(vars) {\n names(vars) <- vars\n vars <- rename_aes(vars)\n\n # Quosure the symbols in the empty environment because they can only\n # refer to the data mask\n structure(\n lapply(vars, function(x) rlang::new_quosure(as.name(x), emptyenv())),\n class = \"uneval\"\n )\n}\n\n#' Automatic aesthetic mapping\n#'\n#' @param data data.frame or names of variables\n#' @param ... aesthetics that need to be explicitly mapped.\n#' @keywords internal\n#' @export\naes_auto <- function(data = NULL, ...) {\n warning(\"aes_auto() is deprecated\", call. = FALSE)\n\n # detect names of data\n if (is.null(data)) {\n stop(\"aes_auto requires data.frame or names of data.frame.\")\n } else if (is.data.frame(data)) {\n vars <- names(data)\n } else {\n vars <- data\n }\n\n # automatically detected aes\n vars <- intersect(ggplot_global$all_aesthetics, vars)\n names(vars) <- vars\n aes <- lapply(vars, function(x) parse(text = x)[[1]])\n\n # explicitly defined aes\n if (length(match.call()) > 2) {\n args <- as.list(match.call()[-1])\n aes <- c(aes, args[names(args) != \"data\"])\n }\n\n structure(rename_aes(aes), class = \"uneval\")\n}\n\nmapped_aesthetics <- function(x) {\n if (is.null(x)) {\n return(NULL)\n }\n\n is_null <- vapply(x, is.null, logical(1))\n names(x)[!is_null]\n}","normpath":"/Users/thomas/Dropbox/GitHub/ggplot2/R/aes.r"}],"prof_output":"/var/folders/wq/20rfm4212kx8fdtc4q_bvfd00000gn/T//RtmpviEvuY/filec1906a969f71.prof","highlight":{"output":["^output\\$"],"gc":["^<GC>$"],"stacktrace":["^\\.\\.stacktraceo(n|ff)\\.\\.$"]},"split":"h"}},"evals":[],"jsHooks":[]}</script> <p>The use of an empty ggplot2 ensures that the profile is based on real-life use and includes complex gtable assembly. Profiles for old version are kept for reference and can be accessed at the <a href="https://github.com/r-lib/gtable/tree/master/vignettes/profilings">github repository</a>. Care should be taken in not comparing profiles across versions, as changes to code outside of gtable can have profound effect on the results. Thus, the intend of profiling is to identify bottlenecks in the implementation that are ripe for improvement, more then to quantify improvements to performance over time.</p> <div id="performance-focused-changes-across-versions" class="section level2"> <h2>Performance focused changes across versions</h2> <p>To keep track of changes focused on improving the performance of gtable they are summarised below:</p> <div id="v0.3.0" class="section level3"> <h3>v0.3.0</h3> <p>Profiling results from gtable v0.2.0 identified a range of areas that could be easily improved by fairly small code changes. These changes resulted in roughly 20% decrease in running time on the profiling code in general, while gtable related functions were between 50 and 80% decrease in running time specifically.</p> <ul> <li><strong><code>data.frame</code> construction and indexing.</strong> gtable now includes a minimal constructor that makes no input checking used for working with the layout data frame. Further, indexing into the layout data frame has been improved by either treating as a list internally or directly calling <code>.subset2</code></li> <li><strong>Input validation.</strong> <code>stopifnot()</code> was identified as a bottleneck and has removed in favor of a standard <code>if (...) stop()</code></li> <li><strong>Dimension querying.</strong> The use of <code>nrow()</code> and <code>ncol()</code> has internally been substituted for direct calls to <code>length()</code> of the <code>heights</code> and <code>widths</code> unit vectors</li> </ul> </div> </div> <!-- dynamically load mathjax for compatibility with self-contained --> <script> (function () { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"; document.getElementsByTagName("head")[0].appendChild(script); })(); </script> </body> </html>