{"version":3,"file":"ractive.js","sources":["../src/polyfills/requestAnimationFrame.js","../src/polyfills/Promise.js","../src/polyfills/performance.now.js","../src/polyfills/node.contains.js","../src/polyfills/array.find.js","../src/polyfills/Object.assign.js"],"sourcesContent":["/* istanbul ignore if */\nif (\n typeof window !== 'undefined' &&\n !(window.requestAnimationFrame && window.cancelAnimationFrame)\n) {\n let lastTime = 0;\n window.requestAnimationFrame = function (callback) {\n const currentTime = Date.now();\n const timeToNextCall = Math.max(0, 16 - (currentTime - lastTime));\n const id = window.setTimeout(() => {\n callback(currentTime + timeToNextCall);\n }, timeToNextCall);\n lastTime = currentTime + timeToNextCall;\n return id;\n };\n window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n}\n","import { base } from 'config/environment';\nimport { isFunction, isObjectType } from 'utils/is';\n\n/* istanbul ignore if */\nif (!base.Promise) {\n const PENDING = {};\n const FULFILLED = {};\n const REJECTED = {};\n\n const Promise = (base.Promise = function (callback) {\n const fulfilledHandlers = [];\n const rejectedHandlers = [];\n let state = PENDING;\n let result;\n let dispatchHandlers;\n\n const makeResolver = newState => {\n return function (value) {\n if (state !== PENDING) return;\n result = value;\n state = newState;\n dispatchHandlers = makeDispatcher(\n state === FULFILLED ? fulfilledHandlers : rejectedHandlers,\n result\n );\n wait(dispatchHandlers);\n };\n };\n\n const fulfill = makeResolver(FULFILLED);\n const reject = makeResolver(REJECTED);\n\n try {\n callback(fulfill, reject);\n } catch (err) {\n reject(err);\n }\n\n return {\n // `then()` returns a Promise - 2.2.7\n then(onFulfilled, onRejected) {\n const promise2 = new Promise((fulfill, reject) => {\n const processResolutionHandler = (handler, handlers, forward) => {\n if (isFunction(handler)) {\n handlers.push(p1result => {\n try {\n resolve(promise2, handler(p1result), fulfill, reject);\n } catch (err) {\n reject(err);\n }\n });\n } else {\n handlers.push(forward);\n }\n };\n\n processResolutionHandler(onFulfilled, fulfilledHandlers, fulfill);\n processResolutionHandler(onRejected, rejectedHandlers, reject);\n\n if (state !== PENDING) {\n wait(dispatchHandlers);\n }\n });\n return promise2;\n },\n catch(onRejected) {\n return this.then(null, onRejected);\n },\n finally(callback) {\n return this.then(\n v => {\n callback();\n return v;\n },\n e => {\n callback();\n throw e;\n }\n );\n }\n };\n });\n\n Promise.all = function (promises) {\n return new Promise((fulfill, reject) => {\n const result = [];\n let pending;\n let i;\n\n if (!promises.length) {\n fulfill(result);\n return;\n }\n\n const processPromise = (promise, i) => {\n if (promise && isFunction(promise.then)) {\n promise.then(value => {\n result[i] = value;\n --pending || fulfill(result);\n }, reject);\n } else {\n result[i] = promise;\n --pending || fulfill(result);\n }\n };\n\n pending = i = promises.length;\n\n while (i--) {\n processPromise(promises[i], i);\n }\n });\n };\n\n Promise.race = function (promises) {\n return new Promise((fulfill, reject) => {\n let pending = true;\n function ok(v) {\n if (!pending) return;\n pending = false;\n fulfill(v);\n }\n function fail(e) {\n if (!pending) return;\n pending = false;\n reject(e);\n }\n for (let i = 0; i < promises.length; i++) {\n if (promises[i] && isFunction(promises[i].then)) {\n promises[i].then(ok, fail);\n }\n }\n });\n };\n\n Promise.resolve = function (value) {\n if (value && isFunction(value.then)) return value;\n return new Promise(fulfill => {\n fulfill(value);\n });\n };\n\n Promise.reject = function (reason) {\n if (reason && isFunction(reason.then)) return reason;\n return new Promise((fulfill, reject) => {\n reject(reason);\n });\n };\n\n // TODO use MutationObservers or something to simulate setImmediate\n const wait = function (callback) {\n setTimeout(callback, 0);\n };\n\n const makeDispatcher = function (handlers, result) {\n return function () {\n for (let handler; (handler = handlers.shift()); ) {\n handler(result);\n }\n };\n };\n\n const resolve = function (promise, x, fulfil, reject) {\n let then;\n if (x === promise) {\n throw new TypeError(`A promise's fulfillment handler cannot return the same promise`);\n }\n if (x instanceof Promise) {\n x.then(fulfil, reject);\n } else if (x && (isObjectType(x) || isFunction(x))) {\n try {\n then = x.then;\n } catch (e) {\n reject(e);\n return;\n }\n if (isFunction(then)) {\n let called;\n\n const resolvePromise = function (y) {\n if (called) return;\n called = true;\n resolve(promise, y, fulfil, reject);\n };\n const rejectPromise = function (r) {\n if (called) return;\n called = true;\n reject(r);\n };\n\n try {\n then.call(x, resolvePromise, rejectPromise);\n } catch (e) {\n if (!called) {\n reject(e);\n called = true;\n return;\n }\n }\n } else {\n fulfil(x);\n }\n } else {\n fulfil(x);\n }\n };\n}\n","/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.performance && !window.performance.now) {\n window.performance = window.performance || {};\n\n const nowOffset = Date.now();\n\n window.performance.now = function () {\n return Date.now() - nowOffset;\n };\n}\n","// NOTE: Node doesn't exist in IE8. Nothing can be done.\n/* istanbul ignore if */\nif (\n typeof window !== 'undefined' &&\n window.Node &&\n window.Node.prototype &&\n !window.Node.prototype.contains\n) {\n Node.prototype.contains = function (node) {\n if (!node) throw new TypeError('node required');\n\n do {\n if (this === node) return true;\n } while ((node = node && node.parentNode));\n\n return false;\n };\n}\n","import { isFunction, isUndefined } from 'utils/is';\nimport { hasOwn, defineProperty } from 'utils/object';\n\n/* istanbul ignore if */\nif (!Array.prototype.find) {\n defineProperty(Array.prototype, 'find', {\n value(callback, thisArg) {\n if (this === null || isUndefined(this))\n throw new TypeError('Array.prototype.find called on null or undefined');\n\n if (!isFunction(callback)) throw new TypeError(`${callback} is not a function`);\n\n const array = Object(this);\n const arrayLength = array.length >>> 0;\n\n for (let index = 0; index < arrayLength; index++) {\n if (!hasOwn(array, index)) continue;\n if (!callback.call(thisArg, array[index], index, array)) continue;\n return array[index];\n }\n\n return undefined;\n },\n configurable: true,\n writable: true\n });\n}\n","/* istanbul ignore if */\nif (!Object.assign) {\n Object.assign = function (target, ...sources) {\n if (target == null) throw new TypeError('Cannot convert undefined or null to object');\n\n const to = Object(target);\n const sourcesLength = sources.length;\n\n for (let index = 0; index < sourcesLength; index++) {\n const nextSource = sources[index];\n for (const nextKey in nextSource) {\n if (!Object.prototype.hasOwnProperty.call(nextSource, nextKey)) continue;\n to[nextKey] = nextSource[nextKey];\n }\n }\n\n return to;\n };\n}\n"],"names":["const","let","resolve","Promise","this"],"mappings":"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AY,CAAC,EAAE,CAAC,CAAC;GAClB,CAAC;CACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}