{"version":3,"sources":["webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/msgdown/src/msgdown.js","webpack:///./node_modules/parse-asn1/asn1.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/parseqs/index.js","webpack:///./node_modules/parseuri/index.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/particles.js/particles.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/process/browser.js"],"names":["ZERO_BUF","defaultEncoding","sync","Buffer","subtle","global","crypto","toBrowser","checks","checkNative","algo","process","browser","Promise","resolve","importKey","deriveBits","undefined","alloc","prom","browserPbkdf2","then","catch","password","salt","iterations","length","name","key","hash","res","from","resolvePromise","promise","callback","out","nextTick","e","module","exports","keylen","digest","toLowerCase","checkParameters","Error","isBuffer","resp","asn1","aesid","fixProc","ciphers","compat","parseKeys","buffer","passphrase","subtype","ndata","stripped","type","tag","data","certificate","decode","tbsCertificate","subjectPublicKeyInfo","PublicKey","algorithm","join","RSAPublicKey","subjectPublicKey","subjectPrivateKey","params","pub_key","DSAparam","EncryptedPrivateKey","decrypt","PrivateKey","RSAPrivateKey","curve","privateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","value","kde","kdeparams","iters","parseInt","toString","cipher","iv","cipherText","split","pbkdf2Sync","createDecipheriv","push","update","final","concat","signature","defaultTokens","bold","delimiter","italic","underline","strike","code","sup","sub","openTag","closeTag","encloseTag","text","parseToken","stopDelimiter","index","content","tokens","Object","assign","html","consumeChar","consumeAll","textRemaining","consumeToken","token","substr","tokenContent","charCurrent","define","this","seq","obj","int","use","AlgorithmIdentifier","bitstr","objid","null_","optional","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","explicit","ECParameters","choice","namedCurve","findProc","startRegex","fullRegex","evp","okey","decrypted","match","suite","replace","cipherKey","slice","match2","encode","str","i","hasOwnProperty","encodeURIComponent","qs","qry","pairs","l","pair","decodeURIComponent","re","parts","src","b","indexOf","substring","m","exec","uri","source","host","authority","ipv6uri","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","any","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","def","TBSCertificate","implicit","X509Certificate","pJS","tag_id","canvas_el","document","querySelector","canvas","el","w","offsetWidth","h","offsetHeight","particles","number","density","enable","value_area","color","shape","stroke","width","polygon","nb_sides","image","height","opacity","random","anim","speed","opacity_min","size","size_min","line_linked","distance","move","direction","straight","out_mode","bounce","attract","rotateX","rotateY","array","interactivity","detect_on","events","onhover","mode","onclick","resize","modes","grab","bubble","duration","repulse","particles_nb","remove","mouse","retina_detect","fn","interact","vendors","tmp","deepExtend","size_value","size_anim_speed","move_speed","line_linked_distance","line_linked_width","mode_grab_distance","mode_bubble_distance","mode_bubble_size","mode_repulse_distance","retinaInit","window","devicePixelRatio","pxratio","retina","canvasInit","ctx","getContext","canvasSize","addEventListener","particlesEmpty","particlesCreate","particlesDraw","densityAutoParticles","canvasPaint","fillRect","canvasClear","clearRect","particle","position","radius","Math","size_status","vs","x","y","checkOverlap","Array","color_selected","floor","rgb","hexToRgb","r","g","s","hsl","opacity_status","vo","velbase","vx","vy","vx_i","vy_i","shape_type","shape_selected","sh","img","ratio","img_type","source_svg","createSvgImg","pushing","loaded","prototype","draw","p","radius_bubble","opacity_bubble","color_value","fillStyle","beginPath","arc","PI","rect","drawShape","drawImage","img_obj","closePath","strokeStyle","lineWidth","fill","particlesUpdate","ms","new_pos","x_left","x_right","y_top","y_bottom","isInArray","grabParticle","bubbleParticle","repulseParticle","j","p2","linkParticles","attractParticles","bounceParticles","particlesRefresh","cancelRequestAnimFrame","checkAnimFrame","drawAnimFrame","count_svg","start","p1","dx","dy","dist","sqrt","opacity_line","color_line","color_rgb_line","moveTo","lineTo","ax","ay","dist_p","pushParticles","nb","pos","pos_x","pos_y","removeParticles","splice","dx_mouse","dy_mouse","dist_mouse","init","status","dif","bubble_clicking","click_pos_x","click_pos_y","time_spent","Date","getTime","click_time","bubble_duration_end","bubble_param","particles_param","p_obj_bubble","p_obj","id","value_tmp","normVec","repulseRadius","velocity","repulseFactor","clamp","pow","repulse_finish","repulse_count","repulse_clicking","d","force","f","atan2","cos","sin","eventsListeners","clientX","clientY","offsetX","offsetY","setTimeout","area","nb_particles","missing_particles","abs","svgXml","rgbHex","coloredSvgXml","svg","Blob","DOMURL","URL","webkitURL","url","createObjectURL","Image","revokeObjectURL","destroypJS","cancelAnimationFrame","pJSDom","c","startX","startY","sideLength","sideCountNumerator","sideCountDenominator","sideCount","decimalSides","interiorAngleDegrees","interiorAngle","save","translate","rotate","restore","exportImg","open","toDataURL","loadImg","img_error","xhr","XMLHttpRequest","onreadystatechange","readyState","currentTarget","response","checkBeforeDraw","console","log","send","requestAnimFrame","check","hex","shorthandRegex","result","min","max","destination","property","constructor","arguments","callee","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","webkitCancelRequestAnimationFrame","mozCancelRequestAnimationFrame","oCancelRequestAnimationFrame","msCancelRequestAnimationFrame","clearTimeout","particlesJS","pJS_tag","getElementById","pJS_canvas_class","exist_canvas","getElementsByClassName","removeChild","createElement","className","style","appendChild","load","path_config_json","JSON","parse","checkBuffer","buf","TypeError","MAX_ALLOC","arg1","arg2","arg3","args","len","call","apply","version","pVersionMajor","pbkdf2","md5","RIPEMD160","sha","ZEROS","sizes","sha1","sha224","sha256","sha384","sha512","rmd160","ripemd160","Hmac","alg","saltLen","getDigest","blocksize","ipad","allocUnsafe","opad","ipad1","copy","ipad2","shaFunc","rmd160Func","hmac","DK","block1","destPos","hLen","ceil","writeUInt32BE","T","run","U","k","isBrowser","navigator","timeoutDuration","longerTimeoutBrowsers","userAgent","microtaskDebounce","called","taskDebounce","scheduled","supportsMicroTasks","debounce","isFunction","functionToCheck","getType","getStyleComputedProperty","element","nodeType","ownerDocument","defaultView","css","getComputedStyle","getParentNode","nodeName","parentNode","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","test","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","getWindowSizes","classCallCheck","instance","Constructor","createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_extends","getClientRect","offsets","getBoundingClientRect","clientWidth","clientHeight","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","sort","a","filteredAreas","filter","_ref2","computedPlacement","variation","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","marginBottom","marginRight","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","findIndex","prop","cur","runModifiers","modifiers","ends","modifiersToRun","forEach","warn","enabled","isDestroyed","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","getWindow","attachToScrollParents","event","scrollParents","isBody","passive","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","setAttributes","setAttribute","applyStyle","arrowElement","applyStyleOnLoad","modifierOptions","getRoundedOffsets","shouldRound","_data$offsets","round","noRound","v","referenceWidth","popperWidth","isVertical","isVariation","sameWidthParity","bothOddWidth","horizontalToInteger","verticalToInteger","isFirefox","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","prefixedProperty","invertTop","invertLeft","arrow","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","_data$offsets$arrow","sideCapitalized","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","getOppositeVariation","placements","validPlacements","clockwise","counter","reverse","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","keepTogether","toValue","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","shift","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","onLoad","Defaults","Popper","_this","bind","jquery","Utils","PopperUtils","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","marker","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","Item","noop","title","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask"],"mappings":"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","file":"js/chunk-vendors~9c5b28f6.4f75b7af.js","sourcesContent":["var checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n 'sha': 'SHA-1',\n 'sha-1': 'SHA-1',\n 'sha1': 'SHA-1',\n 'sha256': 'SHA-256',\n 'sha-256': 'SHA-256',\n 'sha384': 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n 'sha512': 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n process.nextTick(function () {\n callback(null, out)\n })\n }, function (e) {\n process.nextTick(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n return process.nextTick(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n }\n\n checkParameters(password, salt, iterations, keylen)\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","const defaultTokens = {\n bold: { delimiter: '*', tag: 'strong' },\n italic: { delimiter: '/', tag: 'em' },\n underline: { delimiter: '_', tag: 'u' },\n strike: { delimiter: '~', tag: 'del' },\n code: { delimiter: '`', tag: 'code' },\n sup: { delimiter: '^', tag: 'sup' },\n sub: { delimiter: '¡', tag: 'sub' }\n}\n\nconst openTag = tag => `<${tag}>`\nconst closeTag = tag => ``\nconst encloseTag = (text, tag) => `${openTag(tag)}${text}${closeTag(tag)}`\nconst parseToken = (text, stopDelimiter) => {\n let index = 0\n let content = ''\n while (index < text.length && text[index] !== stopDelimiter) {\n content += text[index]\n index++\n }\n if (index === text.length) {\n return ''\n } else {\n return content\n }\n}\n\nmodule.exports = (text, tokens = defaultTokens) => {\n tokens = Object.assign({}, defaultTokens, tokens)\n let html = ''\n let index = 0\n\n const consumeChar = () => {\n html += text[index]\n index++\n }\n const consumeAll = (textRemaining, delimiter) => {\n html += delimiter + textRemaining\n index += textRemaining.length\n }\n const consumeToken = token => {\n index++\n if (text[index] === ' ') {\n html += token.delimiter\n consumeChar()\n } else {\n const textRemaining = text.substr(index)\n const tokenContent = parseToken(textRemaining, token.delimiter)\n if (tokenContent.length === 0) {\n consumeAll(textRemaining, token.delimiter)\n } else {\n html += encloseTag(tokenContent, token.tag)\n index += tokenContent.length + 1\n }\n }\n }\n\n while (index < text.length) {\n const charCurrent = text[index]\n if (charCurrent === tokens.bold.delimiter) {\n consumeToken(tokens.bold)\n } else if (charCurrent === tokens.italic.delimiter) {\n consumeToken(tokens.italic)\n } else if (charCurrent === tokens.underline.delimiter) {\n consumeToken(tokens.underline)\n } else if (charCurrent === tokens.strike.delimiter) {\n consumeToken(tokens.strike)\n } else if (charCurrent === tokens.code.delimiter) {\n consumeToken(tokens.code)\n } else if (charCurrent === tokens.sup.delimiter) {\n consumeToken(tokens.sup)\n } else if (charCurrent === tokens.sub.delimiter) {\n consumeToken(tokens.sub)\n } else {\n consumeChar()\n }\n }\n\n return html\n}\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = new Buffer(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","/**\r\n * Compiles a querystring\r\n * Returns string representation of the object\r\n *\r\n * @param {Object}\r\n * @api private\r\n */\r\n\r\nexports.encode = function (obj) {\r\n var str = '';\r\n\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i)) {\r\n if (str.length) str += '&';\r\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\r\n }\r\n }\r\n\r\n return str;\r\n};\r\n\r\n/**\r\n * Parses a simple querystring into an object\r\n *\r\n * @param {String} qs\r\n * @api private\r\n */\r\n\r\nexports.decode = function(qs){\r\n var qry = {};\r\n var pairs = qs.split('&');\r\n for (var i = 0, l = pairs.length; i < l; i++) {\r\n var pair = pairs[i].split('=');\r\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\r\n }\r\n return qry;\r\n};\r\n","/**\r\n * Parses an URI\r\n *\r\n * @author Steven Levithan (MIT license)\r\n * @api private\r\n */\r\n\r\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\r\n\r\nvar parts = [\r\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\r\n];\r\n\r\nmodule.exports = function parseuri(str) {\r\n var src = str,\r\n b = str.indexOf('['),\r\n e = str.indexOf(']');\r\n\r\n if (b != -1 && e != -1) {\r\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\r\n }\r\n\r\n var m = re.exec(str || ''),\r\n uri = {},\r\n i = 14;\r\n\r\n while (i--) {\r\n uri[parts[i]] = m[i] || '';\r\n }\r\n\r\n if (b != -1 && e != -1) {\r\n uri.source = src;\r\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\r\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\r\n uri.ipv6uri = true;\r\n }\r\n\r\n return uri;\r\n};\r\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","/* -----------------------------------------------\n/* Author : Vincent Garreau - vincentgarreau.com\n/* MIT license: http://opensource.org/licenses/MIT\n/* Demo / Generator : vincentgarreau.com/particles.js\n/* GitHub : github.com/VincentGarreau/particles.js\n/* How to use? : Check the GitHub README\n/* v2.0.0\n/* ----------------------------------------------- */\n\nvar pJS = function(tag_id, params){\n\n var canvas_el = document.querySelector('#'+tag_id+' > .particles-js-canvas-el');\n\n /* particles.js variables with default values */\n this.pJS = {\n canvas: {\n el: canvas_el,\n w: canvas_el.offsetWidth,\n h: canvas_el.offsetHeight\n },\n particles: {\n number: {\n value: 400,\n density: {\n enable: true,\n value_area: 800\n }\n },\n color: {\n value: '#fff'\n },\n shape: {\n type: 'circle',\n stroke: {\n width: 0,\n color: '#ff0000'\n },\n polygon: {\n nb_sides: 5\n },\n image: {\n src: '',\n width: 100,\n height: 100\n }\n },\n opacity: {\n value: 1,\n random: false,\n anim: {\n enable: false,\n speed: 2,\n opacity_min: 0,\n sync: false\n }\n },\n size: {\n value: 20,\n random: false,\n anim: {\n enable: false,\n speed: 20,\n size_min: 0,\n sync: false\n }\n },\n line_linked: {\n enable: true,\n distance: 100,\n color: '#fff',\n opacity: 1,\n width: 1\n },\n move: {\n enable: true,\n speed: 2,\n direction: 'none',\n random: false,\n straight: false,\n out_mode: 'out',\n bounce: false,\n attract: {\n enable: false,\n rotateX: 3000,\n rotateY: 3000\n }\n },\n array: []\n },\n interactivity: {\n detect_on: 'canvas',\n events: {\n onhover: {\n enable: true,\n mode: 'grab'\n },\n onclick: {\n enable: true,\n mode: 'push'\n },\n resize: true\n },\n modes: {\n grab:{\n distance: 100,\n line_linked:{\n opacity: 1\n }\n },\n bubble:{\n distance: 200,\n size: 80,\n duration: 0.4\n },\n repulse:{\n distance: 200,\n duration: 0.4\n },\n push:{\n particles_nb: 4\n },\n remove:{\n particles_nb: 2\n }\n },\n mouse:{}\n },\n retina_detect: false,\n fn: {\n interact: {},\n modes: {},\n vendors:{}\n },\n tmp: {}\n };\n\n var pJS = this.pJS;\n\n /* params settings */\n if(params){\n Object.deepExtend(pJS, params);\n }\n\n pJS.tmp.obj = {\n size_value: pJS.particles.size.value,\n size_anim_speed: pJS.particles.size.anim.speed,\n move_speed: pJS.particles.move.speed,\n line_linked_distance: pJS.particles.line_linked.distance,\n line_linked_width: pJS.particles.line_linked.width,\n mode_grab_distance: pJS.interactivity.modes.grab.distance,\n mode_bubble_distance: pJS.interactivity.modes.bubble.distance,\n mode_bubble_size: pJS.interactivity.modes.bubble.size,\n mode_repulse_distance: pJS.interactivity.modes.repulse.distance\n };\n\n\n pJS.fn.retinaInit = function(){\n\n if(pJS.retina_detect && window.devicePixelRatio > 1){\n pJS.canvas.pxratio = window.devicePixelRatio; \n pJS.tmp.retina = true;\n } \n else{\n pJS.canvas.pxratio = 1;\n pJS.tmp.retina = false;\n }\n\n pJS.canvas.w = pJS.canvas.el.offsetWidth * pJS.canvas.pxratio;\n pJS.canvas.h = pJS.canvas.el.offsetHeight * pJS.canvas.pxratio;\n\n pJS.particles.size.value = pJS.tmp.obj.size_value * pJS.canvas.pxratio;\n pJS.particles.size.anim.speed = pJS.tmp.obj.size_anim_speed * pJS.canvas.pxratio;\n pJS.particles.move.speed = pJS.tmp.obj.move_speed * pJS.canvas.pxratio;\n pJS.particles.line_linked.distance = pJS.tmp.obj.line_linked_distance * pJS.canvas.pxratio;\n pJS.interactivity.modes.grab.distance = pJS.tmp.obj.mode_grab_distance * pJS.canvas.pxratio;\n pJS.interactivity.modes.bubble.distance = pJS.tmp.obj.mode_bubble_distance * pJS.canvas.pxratio;\n pJS.particles.line_linked.width = pJS.tmp.obj.line_linked_width * pJS.canvas.pxratio;\n pJS.interactivity.modes.bubble.size = pJS.tmp.obj.mode_bubble_size * pJS.canvas.pxratio;\n pJS.interactivity.modes.repulse.distance = pJS.tmp.obj.mode_repulse_distance * pJS.canvas.pxratio;\n\n };\n\n\n\n /* ---------- pJS functions - canvas ------------ */\n\n pJS.fn.canvasInit = function(){\n pJS.canvas.ctx = pJS.canvas.el.getContext('2d');\n };\n\n pJS.fn.canvasSize = function(){\n\n pJS.canvas.el.width = pJS.canvas.w;\n pJS.canvas.el.height = pJS.canvas.h;\n\n if(pJS && pJS.interactivity.events.resize){\n\n window.addEventListener('resize', function(){\n\n pJS.canvas.w = pJS.canvas.el.offsetWidth;\n pJS.canvas.h = pJS.canvas.el.offsetHeight;\n\n /* resize canvas */\n if(pJS.tmp.retina){\n pJS.canvas.w *= pJS.canvas.pxratio;\n pJS.canvas.h *= pJS.canvas.pxratio;\n }\n\n pJS.canvas.el.width = pJS.canvas.w;\n pJS.canvas.el.height = pJS.canvas.h;\n\n /* repaint canvas on anim disabled */\n if(!pJS.particles.move.enable){\n pJS.fn.particlesEmpty();\n pJS.fn.particlesCreate();\n pJS.fn.particlesDraw();\n pJS.fn.vendors.densityAutoParticles();\n }\n\n /* density particles enabled */\n pJS.fn.vendors.densityAutoParticles();\n\n });\n\n }\n\n };\n\n\n pJS.fn.canvasPaint = function(){\n pJS.canvas.ctx.fillRect(0, 0, pJS.canvas.w, pJS.canvas.h);\n };\n\n pJS.fn.canvasClear = function(){\n pJS.canvas.ctx.clearRect(0, 0, pJS.canvas.w, pJS.canvas.h);\n };\n\n\n /* --------- pJS functions - particles ----------- */\n\n pJS.fn.particle = function(color, opacity, position){\n\n /* size */\n this.radius = (pJS.particles.size.random ? Math.random() : 1) * pJS.particles.size.value;\n if(pJS.particles.size.anim.enable){\n this.size_status = false;\n this.vs = pJS.particles.size.anim.speed / 100;\n if(!pJS.particles.size.anim.sync){\n this.vs = this.vs * Math.random();\n }\n }\n\n /* position */\n this.x = position ? position.x : Math.random() * pJS.canvas.w;\n this.y = position ? position.y : Math.random() * pJS.canvas.h;\n\n /* check position - into the canvas */\n if(this.x > pJS.canvas.w - this.radius*2) this.x = this.x - this.radius;\n else if(this.x < this.radius*2) this.x = this.x + this.radius;\n if(this.y > pJS.canvas.h - this.radius*2) this.y = this.y - this.radius;\n else if(this.y < this.radius*2) this.y = this.y + this.radius;\n\n /* check position - avoid overlap */\n if(pJS.particles.move.bounce){\n pJS.fn.vendors.checkOverlap(this, position);\n }\n\n /* color */\n this.color = {};\n if(typeof(color.value) == 'object'){\n\n if(color.value instanceof Array){\n var color_selected = color.value[Math.floor(Math.random() * pJS.particles.color.value.length)];\n this.color.rgb = hexToRgb(color_selected);\n }else{\n if(color.value.r != undefined && color.value.g != undefined && color.value.b != undefined){\n this.color.rgb = {\n r: color.value.r,\n g: color.value.g,\n b: color.value.b\n }\n }\n if(color.value.h != undefined && color.value.s != undefined && color.value.l != undefined){\n this.color.hsl = {\n h: color.value.h,\n s: color.value.s,\n l: color.value.l\n }\n }\n }\n\n }\n else if(color.value == 'random'){\n this.color.rgb = {\n r: (Math.floor(Math.random() * (255 - 0 + 1)) + 0),\n g: (Math.floor(Math.random() * (255 - 0 + 1)) + 0),\n b: (Math.floor(Math.random() * (255 - 0 + 1)) + 0)\n }\n }\n else if(typeof(color.value) == 'string'){\n this.color = color;\n this.color.rgb = hexToRgb(this.color.value);\n }\n\n /* opacity */\n this.opacity = (pJS.particles.opacity.random ? Math.random() : 1) * pJS.particles.opacity.value;\n if(pJS.particles.opacity.anim.enable){\n this.opacity_status = false;\n this.vo = pJS.particles.opacity.anim.speed / 100;\n if(!pJS.particles.opacity.anim.sync){\n this.vo = this.vo * Math.random();\n }\n }\n\n /* animation - velocity for speed */\n var velbase = {}\n switch(pJS.particles.move.direction){\n case 'top':\n velbase = { x:0, y:-1 };\n break;\n case 'top-right':\n velbase = { x:0.5, y:-0.5 };\n break;\n case 'right':\n velbase = { x:1, y:-0 };\n break;\n case 'bottom-right':\n velbase = { x:0.5, y:0.5 };\n break;\n case 'bottom':\n velbase = { x:0, y:1 };\n break;\n case 'bottom-left':\n velbase = { x:-0.5, y:1 };\n break;\n case 'left':\n velbase = { x:-1, y:0 };\n break;\n case 'top-left':\n velbase = { x:-0.5, y:-0.5 };\n break;\n default:\n velbase = { x:0, y:0 };\n break;\n }\n\n if(pJS.particles.move.straight){\n this.vx = velbase.x;\n this.vy = velbase.y;\n if(pJS.particles.move.random){\n this.vx = this.vx * (Math.random());\n this.vy = this.vy * (Math.random());\n }\n }else{\n this.vx = velbase.x + Math.random()-0.5;\n this.vy = velbase.y + Math.random()-0.5;\n }\n\n // var theta = 2.0 * Math.PI * Math.random();\n // this.vx = Math.cos(theta);\n // this.vy = Math.sin(theta);\n\n this.vx_i = this.vx;\n this.vy_i = this.vy;\n\n \n\n /* if shape is image */\n\n var shape_type = pJS.particles.shape.type;\n if(typeof(shape_type) == 'object'){\n if(shape_type instanceof Array){\n var shape_selected = shape_type[Math.floor(Math.random() * shape_type.length)];\n this.shape = shape_selected;\n }\n }else{\n this.shape = shape_type;\n }\n\n if(this.shape == 'image'){\n var sh = pJS.particles.shape;\n this.img = {\n src: sh.image.src,\n ratio: sh.image.width / sh.image.height\n }\n if(!this.img.ratio) this.img.ratio = 1;\n if(pJS.tmp.img_type == 'svg' && pJS.tmp.source_svg != undefined){\n pJS.fn.vendors.createSvgImg(this);\n if(pJS.tmp.pushing){\n this.img.loaded = false;\n }\n }\n }\n\n \n\n };\n\n\n pJS.fn.particle.prototype.draw = function() {\n\n var p = this;\n\n if(p.radius_bubble != undefined){\n var radius = p.radius_bubble; \n }else{\n var radius = p.radius;\n }\n\n if(p.opacity_bubble != undefined){\n var opacity = p.opacity_bubble;\n }else{\n var opacity = p.opacity;\n }\n\n if(p.color.rgb){\n var color_value = 'rgba('+p.color.rgb.r+','+p.color.rgb.g+','+p.color.rgb.b+','+opacity+')';\n }else{\n var color_value = 'hsla('+p.color.hsl.h+','+p.color.hsl.s+'%,'+p.color.hsl.l+'%,'+opacity+')';\n }\n\n pJS.canvas.ctx.fillStyle = color_value;\n pJS.canvas.ctx.beginPath();\n\n switch(p.shape){\n\n case 'circle':\n pJS.canvas.ctx.arc(p.x, p.y, radius, 0, Math.PI * 2, false);\n break;\n\n case 'edge':\n pJS.canvas.ctx.rect(p.x-radius, p.y-radius, radius*2, radius*2);\n break;\n\n case 'triangle':\n pJS.fn.vendors.drawShape(pJS.canvas.ctx, p.x-radius, p.y+radius / 1.66, radius*2, 3, 2);\n break;\n\n case 'polygon':\n pJS.fn.vendors.drawShape(\n pJS.canvas.ctx,\n p.x - radius / (pJS.particles.shape.polygon.nb_sides/3.5), // startX\n p.y - radius / (2.66/3.5), // startY\n radius*2.66 / (pJS.particles.shape.polygon.nb_sides/3), // sideLength\n pJS.particles.shape.polygon.nb_sides, // sideCountNumerator\n 1 // sideCountDenominator\n );\n break;\n\n case 'star':\n pJS.fn.vendors.drawShape(\n pJS.canvas.ctx,\n p.x - radius*2 / (pJS.particles.shape.polygon.nb_sides/4), // startX\n p.y - radius / (2*2.66/3.5), // startY\n radius*2*2.66 / (pJS.particles.shape.polygon.nb_sides/3), // sideLength\n pJS.particles.shape.polygon.nb_sides, // sideCountNumerator\n 2 // sideCountDenominator\n );\n break;\n\n case 'image':\n\n function draw(){\n pJS.canvas.ctx.drawImage(\n img_obj,\n p.x-radius,\n p.y-radius,\n radius*2,\n radius*2 / p.img.ratio\n );\n }\n\n if(pJS.tmp.img_type == 'svg'){\n var img_obj = p.img.obj;\n }else{\n var img_obj = pJS.tmp.img_obj;\n }\n\n if(img_obj){\n draw();\n }\n\n break;\n\n }\n\n pJS.canvas.ctx.closePath();\n\n if(pJS.particles.shape.stroke.width > 0){\n pJS.canvas.ctx.strokeStyle = pJS.particles.shape.stroke.color;\n pJS.canvas.ctx.lineWidth = pJS.particles.shape.stroke.width;\n pJS.canvas.ctx.stroke();\n }\n \n pJS.canvas.ctx.fill();\n \n };\n\n\n pJS.fn.particlesCreate = function(){\n for(var i = 0; i < pJS.particles.number.value; i++) {\n pJS.particles.array.push(new pJS.fn.particle(pJS.particles.color, pJS.particles.opacity.value));\n }\n };\n\n pJS.fn.particlesUpdate = function(){\n\n for(var i = 0; i < pJS.particles.array.length; i++){\n\n /* the particle */\n var p = pJS.particles.array[i];\n\n // var d = ( dx = pJS.interactivity.mouse.click_pos_x - p.x ) * dx + ( dy = pJS.interactivity.mouse.click_pos_y - p.y ) * dy;\n // var f = -BANG_SIZE / d;\n // if ( d < BANG_SIZE ) {\n // var t = Math.atan2( dy, dx );\n // p.vx = f * Math.cos(t);\n // p.vy = f * Math.sin(t);\n // }\n\n /* move the particle */\n if(pJS.particles.move.enable){\n var ms = pJS.particles.move.speed/2;\n p.x += p.vx * ms;\n p.y += p.vy * ms;\n }\n\n /* change opacity status */\n if(pJS.particles.opacity.anim.enable) {\n if(p.opacity_status == true) {\n if(p.opacity >= pJS.particles.opacity.value) p.opacity_status = false;\n p.opacity += p.vo;\n }else {\n if(p.opacity <= pJS.particles.opacity.anim.opacity_min) p.opacity_status = true;\n p.opacity -= p.vo;\n }\n if(p.opacity < 0) p.opacity = 0;\n }\n\n /* change size */\n if(pJS.particles.size.anim.enable){\n if(p.size_status == true){\n if(p.radius >= pJS.particles.size.value) p.size_status = false;\n p.radius += p.vs;\n }else{\n if(p.radius <= pJS.particles.size.anim.size_min) p.size_status = true;\n p.radius -= p.vs;\n }\n if(p.radius < 0) p.radius = 0;\n }\n\n /* change particle position if it is out of canvas */\n if(pJS.particles.move.out_mode == 'bounce'){\n var new_pos = {\n x_left: p.radius,\n x_right: pJS.canvas.w,\n y_top: p.radius,\n y_bottom: pJS.canvas.h\n }\n }else{\n var new_pos = {\n x_left: -p.radius,\n x_right: pJS.canvas.w + p.radius,\n y_top: -p.radius,\n y_bottom: pJS.canvas.h + p.radius\n }\n }\n\n if(p.x - p.radius > pJS.canvas.w){\n p.x = new_pos.x_left;\n p.y = Math.random() * pJS.canvas.h;\n }\n else if(p.x + p.radius < 0){\n p.x = new_pos.x_right;\n p.y = Math.random() * pJS.canvas.h;\n }\n if(p.y - p.radius > pJS.canvas.h){\n p.y = new_pos.y_top;\n p.x = Math.random() * pJS.canvas.w;\n }\n else if(p.y + p.radius < 0){\n p.y = new_pos.y_bottom;\n p.x = Math.random() * pJS.canvas.w;\n }\n\n /* out of canvas modes */\n switch(pJS.particles.move.out_mode){\n case 'bounce':\n if (p.x + p.radius > pJS.canvas.w) p.vx = -p.vx;\n else if (p.x - p.radius < 0) p.vx = -p.vx;\n if (p.y + p.radius > pJS.canvas.h) p.vy = -p.vy;\n else if (p.y - p.radius < 0) p.vy = -p.vy;\n break;\n }\n\n /* events */\n if(isInArray('grab', pJS.interactivity.events.onhover.mode)){\n pJS.fn.modes.grabParticle(p);\n }\n\n if(isInArray('bubble', pJS.interactivity.events.onhover.mode) || isInArray('bubble', pJS.interactivity.events.onclick.mode)){\n pJS.fn.modes.bubbleParticle(p);\n }\n\n if(isInArray('repulse', pJS.interactivity.events.onhover.mode) || isInArray('repulse', pJS.interactivity.events.onclick.mode)){\n pJS.fn.modes.repulseParticle(p);\n }\n\n /* interaction auto between particles */\n if(pJS.particles.line_linked.enable || pJS.particles.move.attract.enable){\n for(var j = i + 1; j < pJS.particles.array.length; j++){\n var p2 = pJS.particles.array[j];\n\n /* link particles */\n if(pJS.particles.line_linked.enable){\n pJS.fn.interact.linkParticles(p,p2);\n }\n\n /* attract particles */\n if(pJS.particles.move.attract.enable){\n pJS.fn.interact.attractParticles(p,p2);\n }\n\n /* bounce particles */\n if(pJS.particles.move.bounce){\n pJS.fn.interact.bounceParticles(p,p2);\n }\n\n }\n }\n\n\n }\n\n };\n\n pJS.fn.particlesDraw = function(){\n\n /* clear canvas */\n pJS.canvas.ctx.clearRect(0, 0, pJS.canvas.w, pJS.canvas.h);\n\n /* update each particles param */\n pJS.fn.particlesUpdate();\n\n /* draw each particle */\n for(var i = 0; i < pJS.particles.array.length; i++){\n var p = pJS.particles.array[i];\n p.draw();\n }\n\n };\n\n pJS.fn.particlesEmpty = function(){\n pJS.particles.array = [];\n };\n\n pJS.fn.particlesRefresh = function(){\n\n /* init all */\n cancelRequestAnimFrame(pJS.fn.checkAnimFrame);\n cancelRequestAnimFrame(pJS.fn.drawAnimFrame);\n pJS.tmp.source_svg = undefined;\n pJS.tmp.img_obj = undefined;\n pJS.tmp.count_svg = 0;\n pJS.fn.particlesEmpty();\n pJS.fn.canvasClear();\n \n /* restart */\n pJS.fn.vendors.start();\n\n };\n\n\n /* ---------- pJS functions - particles interaction ------------ */\n\n pJS.fn.interact.linkParticles = function(p1, p2){\n\n var dx = p1.x - p2.x,\n dy = p1.y - p2.y,\n dist = Math.sqrt(dx*dx + dy*dy);\n\n /* draw a line between p1 and p2 if the distance between them is under the config distance */\n if(dist <= pJS.particles.line_linked.distance){\n\n var opacity_line = pJS.particles.line_linked.opacity - (dist / (1/pJS.particles.line_linked.opacity)) / pJS.particles.line_linked.distance;\n\n if(opacity_line > 0){ \n \n /* style */\n var color_line = pJS.particles.line_linked.color_rgb_line;\n pJS.canvas.ctx.strokeStyle = 'rgba('+color_line.r+','+color_line.g+','+color_line.b+','+opacity_line+')';\n pJS.canvas.ctx.lineWidth = pJS.particles.line_linked.width;\n //pJS.canvas.ctx.lineCap = 'round'; /* performance issue */\n \n /* path */\n pJS.canvas.ctx.beginPath();\n pJS.canvas.ctx.moveTo(p1.x, p1.y);\n pJS.canvas.ctx.lineTo(p2.x, p2.y);\n pJS.canvas.ctx.stroke();\n pJS.canvas.ctx.closePath();\n\n }\n\n }\n\n };\n\n\n pJS.fn.interact.attractParticles = function(p1, p2){\n\n /* condensed particles */\n var dx = p1.x - p2.x,\n dy = p1.y - p2.y,\n dist = Math.sqrt(dx*dx + dy*dy);\n\n if(dist <= pJS.particles.line_linked.distance){\n\n var ax = dx/(pJS.particles.move.attract.rotateX*1000),\n ay = dy/(pJS.particles.move.attract.rotateY*1000);\n\n p1.vx -= ax;\n p1.vy -= ay;\n\n p2.vx += ax;\n p2.vy += ay;\n\n }\n \n\n }\n\n\n pJS.fn.interact.bounceParticles = function(p1, p2){\n\n var dx = p1.x - p2.x,\n dy = p1.y - p2.y,\n dist = Math.sqrt(dx*dx + dy*dy),\n dist_p = p1.radius+p2.radius;\n\n if(dist <= dist_p){\n p1.vx = -p1.vx;\n p1.vy = -p1.vy;\n\n p2.vx = -p2.vx;\n p2.vy = -p2.vy;\n }\n\n }\n\n\n /* ---------- pJS functions - modes events ------------ */\n\n pJS.fn.modes.pushParticles = function(nb, pos){\n\n pJS.tmp.pushing = true;\n\n for(var i = 0; i < nb; i++){\n pJS.particles.array.push(\n new pJS.fn.particle(\n pJS.particles.color,\n pJS.particles.opacity.value,\n {\n 'x': pos ? pos.pos_x : Math.random() * pJS.canvas.w,\n 'y': pos ? pos.pos_y : Math.random() * pJS.canvas.h\n }\n )\n )\n if(i == nb-1){\n if(!pJS.particles.move.enable){\n pJS.fn.particlesDraw();\n }\n pJS.tmp.pushing = false;\n }\n }\n\n };\n\n\n pJS.fn.modes.removeParticles = function(nb){\n\n pJS.particles.array.splice(0, nb);\n if(!pJS.particles.move.enable){\n pJS.fn.particlesDraw();\n }\n\n };\n\n\n pJS.fn.modes.bubbleParticle = function(p){\n\n /* on hover event */\n if(pJS.interactivity.events.onhover.enable && isInArray('bubble', pJS.interactivity.events.onhover.mode)){\n\n var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,\n dy_mouse = p.y - pJS.interactivity.mouse.pos_y,\n dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse),\n ratio = 1 - dist_mouse / pJS.interactivity.modes.bubble.distance;\n\n function init(){\n p.opacity_bubble = p.opacity;\n p.radius_bubble = p.radius;\n }\n\n /* mousemove - check ratio */\n if(dist_mouse <= pJS.interactivity.modes.bubble.distance){\n\n if(ratio >= 0 && pJS.interactivity.status == 'mousemove'){\n \n /* size */\n if(pJS.interactivity.modes.bubble.size != pJS.particles.size.value){\n\n if(pJS.interactivity.modes.bubble.size > pJS.particles.size.value){\n var size = p.radius + (pJS.interactivity.modes.bubble.size*ratio);\n if(size >= 0){\n p.radius_bubble = size;\n }\n }else{\n var dif = p.radius - pJS.interactivity.modes.bubble.size,\n size = p.radius - (dif*ratio);\n if(size > 0){\n p.radius_bubble = size;\n }else{\n p.radius_bubble = 0;\n }\n }\n\n }\n\n /* opacity */\n if(pJS.interactivity.modes.bubble.opacity != pJS.particles.opacity.value){\n\n if(pJS.interactivity.modes.bubble.opacity > pJS.particles.opacity.value){\n var opacity = pJS.interactivity.modes.bubble.opacity*ratio;\n if(opacity > p.opacity && opacity <= pJS.interactivity.modes.bubble.opacity){\n p.opacity_bubble = opacity;\n }\n }else{\n var opacity = p.opacity - (pJS.particles.opacity.value-pJS.interactivity.modes.bubble.opacity)*ratio;\n if(opacity < p.opacity && opacity >= pJS.interactivity.modes.bubble.opacity){\n p.opacity_bubble = opacity;\n }\n }\n\n }\n\n }\n\n }else{\n init();\n }\n\n\n /* mouseleave */\n if(pJS.interactivity.status == 'mouseleave'){\n init();\n }\n \n }\n\n /* on click event */\n else if(pJS.interactivity.events.onclick.enable && isInArray('bubble', pJS.interactivity.events.onclick.mode)){\n\n\n if(pJS.tmp.bubble_clicking){\n var dx_mouse = p.x - pJS.interactivity.mouse.click_pos_x,\n dy_mouse = p.y - pJS.interactivity.mouse.click_pos_y,\n dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse),\n time_spent = (new Date().getTime() - pJS.interactivity.mouse.click_time)/1000;\n\n if(time_spent > pJS.interactivity.modes.bubble.duration){\n pJS.tmp.bubble_duration_end = true;\n }\n\n if(time_spent > pJS.interactivity.modes.bubble.duration*2){\n pJS.tmp.bubble_clicking = false;\n pJS.tmp.bubble_duration_end = false;\n }\n }\n\n\n function process(bubble_param, particles_param, p_obj_bubble, p_obj, id){\n\n if(bubble_param != particles_param){\n\n if(!pJS.tmp.bubble_duration_end){\n if(dist_mouse <= pJS.interactivity.modes.bubble.distance){\n if(p_obj_bubble != undefined) var obj = p_obj_bubble;\n else var obj = p_obj;\n if(obj != bubble_param){\n var value = p_obj - (time_spent * (p_obj - bubble_param) / pJS.interactivity.modes.bubble.duration);\n if(id == 'size') p.radius_bubble = value;\n if(id == 'opacity') p.opacity_bubble = value;\n }\n }else{\n if(id == 'size') p.radius_bubble = undefined;\n if(id == 'opacity') p.opacity_bubble = undefined;\n }\n }else{\n if(p_obj_bubble != undefined){\n var value_tmp = p_obj - (time_spent * (p_obj - bubble_param) / pJS.interactivity.modes.bubble.duration),\n dif = bubble_param - value_tmp;\n value = bubble_param + dif;\n if(id == 'size') p.radius_bubble = value;\n if(id == 'opacity') p.opacity_bubble = value;\n }\n }\n\n }\n\n }\n\n if(pJS.tmp.bubble_clicking){\n /* size */\n process(pJS.interactivity.modes.bubble.size, pJS.particles.size.value, p.radius_bubble, p.radius, 'size');\n /* opacity */\n process(pJS.interactivity.modes.bubble.opacity, pJS.particles.opacity.value, p.opacity_bubble, p.opacity, 'opacity');\n }\n\n }\n\n };\n\n\n pJS.fn.modes.repulseParticle = function(p){\n\n if(pJS.interactivity.events.onhover.enable && isInArray('repulse', pJS.interactivity.events.onhover.mode) && pJS.interactivity.status == 'mousemove') {\n\n var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,\n dy_mouse = p.y - pJS.interactivity.mouse.pos_y,\n dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse);\n\n var normVec = {x: dx_mouse/dist_mouse, y: dy_mouse/dist_mouse},\n repulseRadius = pJS.interactivity.modes.repulse.distance,\n velocity = 100,\n repulseFactor = clamp((1/repulseRadius)*(-1*Math.pow(dist_mouse/repulseRadius,2)+1)*repulseRadius*velocity, 0, 50);\n \n var pos = {\n x: p.x + normVec.x * repulseFactor,\n y: p.y + normVec.y * repulseFactor\n }\n\n if(pJS.particles.move.out_mode == 'bounce'){\n if(pos.x - p.radius > 0 && pos.x + p.radius < pJS.canvas.w) p.x = pos.x;\n if(pos.y - p.radius > 0 && pos.y + p.radius < pJS.canvas.h) p.y = pos.y;\n }else{\n p.x = pos.x;\n p.y = pos.y;\n }\n \n }\n\n\n else if(pJS.interactivity.events.onclick.enable && isInArray('repulse', pJS.interactivity.events.onclick.mode)) {\n\n if(!pJS.tmp.repulse_finish){\n pJS.tmp.repulse_count++;\n if(pJS.tmp.repulse_count == pJS.particles.array.length){\n pJS.tmp.repulse_finish = true;\n }\n }\n\n if(pJS.tmp.repulse_clicking){\n\n var repulseRadius = Math.pow(pJS.interactivity.modes.repulse.distance/6, 3);\n\n var dx = pJS.interactivity.mouse.click_pos_x - p.x,\n dy = pJS.interactivity.mouse.click_pos_y - p.y,\n d = dx*dx + dy*dy;\n\n var force = -repulseRadius / d * 1;\n\n function process(){\n\n var f = Math.atan2(dy,dx);\n p.vx = force * Math.cos(f);\n p.vy = force * Math.sin(f);\n\n if(pJS.particles.move.out_mode == 'bounce'){\n var pos = {\n x: p.x + p.vx,\n y: p.y + p.vy\n }\n if (pos.x + p.radius > pJS.canvas.w) p.vx = -p.vx;\n else if (pos.x - p.radius < 0) p.vx = -p.vx;\n if (pos.y + p.radius > pJS.canvas.h) p.vy = -p.vy;\n else if (pos.y - p.radius < 0) p.vy = -p.vy;\n }\n\n }\n\n // default\n if(d <= repulseRadius){\n process();\n }\n\n // bang - slow motion mode\n // if(!pJS.tmp.repulse_finish){\n // if(d <= repulseRadius){\n // process();\n // }\n // }else{\n // process();\n // }\n \n\n }else{\n\n if(pJS.tmp.repulse_clicking == false){\n\n p.vx = p.vx_i;\n p.vy = p.vy_i;\n \n }\n\n }\n\n }\n\n }\n\n\n pJS.fn.modes.grabParticle = function(p){\n\n if(pJS.interactivity.events.onhover.enable && pJS.interactivity.status == 'mousemove'){\n\n var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,\n dy_mouse = p.y - pJS.interactivity.mouse.pos_y,\n dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse);\n\n /* draw a line between the cursor and the particle if the distance between them is under the config distance */\n if(dist_mouse <= pJS.interactivity.modes.grab.distance){\n\n var opacity_line = pJS.interactivity.modes.grab.line_linked.opacity - (dist_mouse / (1/pJS.interactivity.modes.grab.line_linked.opacity)) / pJS.interactivity.modes.grab.distance;\n\n if(opacity_line > 0){\n\n /* style */\n var color_line = pJS.particles.line_linked.color_rgb_line;\n pJS.canvas.ctx.strokeStyle = 'rgba('+color_line.r+','+color_line.g+','+color_line.b+','+opacity_line+')';\n pJS.canvas.ctx.lineWidth = pJS.particles.line_linked.width;\n //pJS.canvas.ctx.lineCap = 'round'; /* performance issue */\n \n /* path */\n pJS.canvas.ctx.beginPath();\n pJS.canvas.ctx.moveTo(p.x, p.y);\n pJS.canvas.ctx.lineTo(pJS.interactivity.mouse.pos_x, pJS.interactivity.mouse.pos_y);\n pJS.canvas.ctx.stroke();\n pJS.canvas.ctx.closePath();\n\n }\n\n }\n\n }\n\n };\n\n\n\n /* ---------- pJS functions - vendors ------------ */\n\n pJS.fn.vendors.eventsListeners = function(){\n\n /* events target element */\n if(pJS.interactivity.detect_on == 'window'){\n pJS.interactivity.el = window;\n }else{\n pJS.interactivity.el = pJS.canvas.el;\n }\n\n\n /* detect mouse pos - on hover / click event */\n if(pJS.interactivity.events.onhover.enable || pJS.interactivity.events.onclick.enable){\n\n /* el on mousemove */\n pJS.interactivity.el.addEventListener('mousemove', function(e){\n\n if(pJS.interactivity.el == window){\n var pos_x = e.clientX,\n pos_y = e.clientY;\n }\n else{\n var pos_x = e.offsetX || e.clientX,\n pos_y = e.offsetY || e.clientY;\n }\n\n pJS.interactivity.mouse.pos_x = pos_x;\n pJS.interactivity.mouse.pos_y = pos_y;\n\n if(pJS.tmp.retina){\n pJS.interactivity.mouse.pos_x *= pJS.canvas.pxratio;\n pJS.interactivity.mouse.pos_y *= pJS.canvas.pxratio;\n }\n\n pJS.interactivity.status = 'mousemove';\n\n });\n\n /* el on onmouseleave */\n pJS.interactivity.el.addEventListener('mouseleave', function(e){\n\n pJS.interactivity.mouse.pos_x = null;\n pJS.interactivity.mouse.pos_y = null;\n pJS.interactivity.status = 'mouseleave';\n\n });\n\n }\n\n /* on click event */\n if(pJS.interactivity.events.onclick.enable){\n\n pJS.interactivity.el.addEventListener('click', function(){\n\n pJS.interactivity.mouse.click_pos_x = pJS.interactivity.mouse.pos_x;\n pJS.interactivity.mouse.click_pos_y = pJS.interactivity.mouse.pos_y;\n pJS.interactivity.mouse.click_time = new Date().getTime();\n\n if(pJS.interactivity.events.onclick.enable){\n\n switch(pJS.interactivity.events.onclick.mode){\n\n case 'push':\n if(pJS.particles.move.enable){\n pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb, pJS.interactivity.mouse);\n }else{\n if(pJS.interactivity.modes.push.particles_nb == 1){\n pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb, pJS.interactivity.mouse);\n }\n else if(pJS.interactivity.modes.push.particles_nb > 1){\n pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb);\n }\n }\n break;\n\n case 'remove':\n pJS.fn.modes.removeParticles(pJS.interactivity.modes.remove.particles_nb);\n break;\n\n case 'bubble':\n pJS.tmp.bubble_clicking = true;\n break;\n\n case 'repulse':\n pJS.tmp.repulse_clicking = true;\n pJS.tmp.repulse_count = 0;\n pJS.tmp.repulse_finish = false;\n setTimeout(function(){\n pJS.tmp.repulse_clicking = false;\n }, pJS.interactivity.modes.repulse.duration*1000)\n break;\n\n }\n\n }\n\n });\n \n }\n\n\n };\n\n pJS.fn.vendors.densityAutoParticles = function(){\n\n if(pJS.particles.number.density.enable){\n\n /* calc area */\n var area = pJS.canvas.el.width * pJS.canvas.el.height / 1000;\n if(pJS.tmp.retina){\n area = area/(pJS.canvas.pxratio*2);\n }\n\n /* calc number of particles based on density area */\n var nb_particles = area * pJS.particles.number.value / pJS.particles.number.density.value_area;\n\n /* add or remove X particles */\n var missing_particles = pJS.particles.array.length - nb_particles;\n if(missing_particles < 0) pJS.fn.modes.pushParticles(Math.abs(missing_particles));\n else pJS.fn.modes.removeParticles(missing_particles);\n\n }\n\n };\n\n\n pJS.fn.vendors.checkOverlap = function(p1, position){\n for(var i = 0; i < pJS.particles.array.length; i++){\n var p2 = pJS.particles.array[i];\n\n var dx = p1.x - p2.x,\n dy = p1.y - p2.y,\n dist = Math.sqrt(dx*dx + dy*dy);\n\n if(dist <= p1.radius + p2.radius){\n p1.x = position ? position.x : Math.random() * pJS.canvas.w;\n p1.y = position ? position.y : Math.random() * pJS.canvas.h;\n pJS.fn.vendors.checkOverlap(p1);\n }\n }\n };\n\n\n pJS.fn.vendors.createSvgImg = function(p){\n\n /* set color to svg element */\n var svgXml = pJS.tmp.source_svg,\n rgbHex = /#([0-9A-F]{3,6})/gi,\n coloredSvgXml = svgXml.replace(rgbHex, function (m, r, g, b) {\n if(p.color.rgb){\n var color_value = 'rgba('+p.color.rgb.r+','+p.color.rgb.g+','+p.color.rgb.b+','+p.opacity+')';\n }else{\n var color_value = 'hsla('+p.color.hsl.h+','+p.color.hsl.s+'%,'+p.color.hsl.l+'%,'+p.opacity+')';\n }\n return color_value;\n });\n\n /* prepare to create img with colored svg */\n var svg = new Blob([coloredSvgXml], {type: 'image/svg+xml;charset=utf-8'}),\n DOMURL = window.URL || window.webkitURL || window,\n url = DOMURL.createObjectURL(svg);\n\n /* create particle img obj */\n var img = new Image();\n img.addEventListener('load', function(){\n p.img.obj = img;\n p.img.loaded = true;\n DOMURL.revokeObjectURL(url);\n pJS.tmp.count_svg++;\n });\n img.src = url;\n\n };\n\n\n pJS.fn.vendors.destroypJS = function(){\n cancelAnimationFrame(pJS.fn.drawAnimFrame);\n canvas_el.remove();\n pJSDom = null;\n };\n\n\n pJS.fn.vendors.drawShape = function(c, startX, startY, sideLength, sideCountNumerator, sideCountDenominator){\n\n // By Programming Thomas - https://programmingthomas.wordpress.com/2013/04/03/n-sided-shapes/\n var sideCount = sideCountNumerator * sideCountDenominator;\n var decimalSides = sideCountNumerator / sideCountDenominator;\n var interiorAngleDegrees = (180 * (decimalSides - 2)) / decimalSides;\n var interiorAngle = Math.PI - Math.PI * interiorAngleDegrees / 180; // convert to radians\n c.save();\n c.beginPath();\n c.translate(startX, startY);\n c.moveTo(0,0);\n for (var i = 0; i < sideCount; i++) {\n c.lineTo(sideLength,0);\n c.translate(sideLength,0);\n c.rotate(interiorAngle);\n }\n //c.stroke();\n c.fill();\n c.restore();\n\n };\n\n pJS.fn.vendors.exportImg = function(){\n window.open(pJS.canvas.el.toDataURL('image/png'), '_blank');\n };\n\n\n pJS.fn.vendors.loadImg = function(type){\n\n pJS.tmp.img_error = undefined;\n\n if(pJS.particles.shape.image.src != ''){\n\n if(type == 'svg'){\n\n var xhr = new XMLHttpRequest();\n xhr.open('GET', pJS.particles.shape.image.src);\n xhr.onreadystatechange = function (data) {\n if(xhr.readyState == 4){\n if(xhr.status == 200){\n pJS.tmp.source_svg = data.currentTarget.response;\n pJS.fn.vendors.checkBeforeDraw();\n }else{\n console.log('Error pJS - Image not found');\n pJS.tmp.img_error = true;\n }\n }\n }\n xhr.send();\n\n }else{\n\n var img = new Image();\n img.addEventListener('load', function(){\n pJS.tmp.img_obj = img;\n pJS.fn.vendors.checkBeforeDraw();\n });\n img.src = pJS.particles.shape.image.src;\n\n }\n\n }else{\n console.log('Error pJS - No image.src');\n pJS.tmp.img_error = true;\n }\n\n };\n\n\n pJS.fn.vendors.draw = function(){\n\n if(pJS.particles.shape.type == 'image'){\n\n if(pJS.tmp.img_type == 'svg'){\n\n if(pJS.tmp.count_svg >= pJS.particles.number.value){\n pJS.fn.particlesDraw();\n if(!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);\n else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);\n }else{\n //console.log('still loading...');\n if(!pJS.tmp.img_error) pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);\n }\n\n }else{\n\n if(pJS.tmp.img_obj != undefined){\n pJS.fn.particlesDraw();\n if(!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);\n else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);\n }else{\n if(!pJS.tmp.img_error) pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);\n }\n\n }\n\n }else{\n pJS.fn.particlesDraw();\n if(!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);\n else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);\n }\n\n };\n\n\n pJS.fn.vendors.checkBeforeDraw = function(){\n\n // if shape is image\n if(pJS.particles.shape.type == 'image'){\n\n if(pJS.tmp.img_type == 'svg' && pJS.tmp.source_svg == undefined){\n pJS.tmp.checkAnimFrame = requestAnimFrame(check);\n }else{\n //console.log('images loaded! cancel check');\n cancelRequestAnimFrame(pJS.tmp.checkAnimFrame);\n if(!pJS.tmp.img_error){\n pJS.fn.vendors.init();\n pJS.fn.vendors.draw();\n }\n \n }\n\n }else{\n pJS.fn.vendors.init();\n pJS.fn.vendors.draw();\n }\n\n };\n\n\n pJS.fn.vendors.init = function(){\n\n /* init canvas + particles */\n pJS.fn.retinaInit();\n pJS.fn.canvasInit();\n pJS.fn.canvasSize();\n pJS.fn.canvasPaint();\n pJS.fn.particlesCreate();\n pJS.fn.vendors.densityAutoParticles();\n\n /* particles.line_linked - convert hex colors to rgb */\n pJS.particles.line_linked.color_rgb_line = hexToRgb(pJS.particles.line_linked.color);\n\n };\n\n\n pJS.fn.vendors.start = function(){\n\n if(isInArray('image', pJS.particles.shape.type)){\n pJS.tmp.img_type = pJS.particles.shape.image.src.substr(pJS.particles.shape.image.src.length - 3);\n pJS.fn.vendors.loadImg(pJS.tmp.img_type);\n }else{\n pJS.fn.vendors.checkBeforeDraw();\n }\n\n };\n\n\n\n\n /* ---------- pJS - start ------------ */\n\n\n pJS.fn.vendors.eventsListeners();\n\n pJS.fn.vendors.start();\n \n\n\n};\n\n/* ---------- global functions - vendors ------------ */\n\nObject.deepExtend = function(destination, source) {\n for (var property in source) {\n if (source[property] && source[property].constructor &&\n source[property].constructor === Object) {\n destination[property] = destination[property] || {};\n arguments.callee(destination[property], source[property]);\n } else {\n destination[property] = source[property];\n }\n }\n return destination;\n};\n\nwindow.requestAnimFrame = (function(){\n return window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(callback){\n window.setTimeout(callback, 1000 / 60);\n };\n})();\n\nwindow.cancelRequestAnimFrame = ( function() {\n return window.cancelAnimationFrame ||\n window.webkitCancelRequestAnimationFrame ||\n window.mozCancelRequestAnimationFrame ||\n window.oCancelRequestAnimationFrame ||\n window.msCancelRequestAnimationFrame ||\n clearTimeout\n} )();\n\nfunction hexToRgb(hex){\n // By Tim Down - http://stackoverflow.com/a/5624139/3493650\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, function(m, r, g, b) {\n return r + r + g + g + b + b;\n });\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n};\n\nfunction clamp(number, min, max) {\n return Math.min(Math.max(number, min), max);\n};\n\nfunction isInArray(value, array) {\n return array.indexOf(value) > -1;\n}\n\n\n/* ---------- particles.js functions - start ------------ */\n\nwindow.pJSDom = [];\n\nwindow.particlesJS = function(tag_id, params){\n\n //console.log(params);\n\n /* no string id? so it's object params, and set the id with default id */\n if(typeof(tag_id) != 'string'){\n params = tag_id;\n tag_id = 'particles-js';\n }\n\n /* no id? set the id to default id */\n if(!tag_id){\n tag_id = 'particles-js';\n }\n\n /* pJS elements */\n var pJS_tag = document.getElementById(tag_id),\n pJS_canvas_class = 'particles-js-canvas-el',\n exist_canvas = pJS_tag.getElementsByClassName(pJS_canvas_class);\n\n /* remove canvas if exists into the pJS target tag */\n if(exist_canvas.length){\n while(exist_canvas.length > 0){\n pJS_tag.removeChild(exist_canvas[0]);\n }\n }\n\n /* create canvas element */\n var canvas_el = document.createElement('canvas');\n canvas_el.className = pJS_canvas_class;\n\n /* set size canvas */\n canvas_el.style.width = \"100%\";\n canvas_el.style.height = \"100%\";\n\n /* append canvas */\n var canvas = document.getElementById(tag_id).appendChild(canvas_el);\n\n /* launch particle.js */\n if(canvas != null){\n pJSDom.push(new pJS(tag_id, params));\n }\n\n};\n\nwindow.particlesJS.load = function(tag_id, path_config_json, callback){\n\n /* load json config */\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path_config_json);\n xhr.onreadystatechange = function (data) {\n if(xhr.readyState == 4){\n if(xhr.status == 200){\n var params = JSON.parse(data.currentTarget.response);\n window.particlesJS(tag_id, params);\n if(callback) callback();\n }else{\n console.log('Error pJS - XMLHttpRequest status: '+xhr.status);\n console.log('Error pJS - File config not found');\n }\n }\n };\n xhr.send();\n\n};","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nfunction checkBuffer (buf, name) {\n if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {\n throw new TypeError(name + ' must be a buffer or string')\n }\n}\n\nmodule.exports = function (password, salt, iterations, keylen) {\n checkBuffer(password, 'Password')\n checkBuffer(salt, 'Salt')\n\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","var defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(password, salt, iterations, keylen)\n\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n"],"sourceRoot":""}