-
Notifications
You must be signed in to change notification settings - Fork 61
/
Copy pathruntime.js.map
1 lines (1 loc) · 44.1 KB
/
runtime.js.map
1
{"version":3,"file":"runtime.js","sources":["utils/url.js","utils/tag.js","initial.js","console.js","utils/cookies.js","editors.js","runtime.js"],"sourcesContent":["/**\r\n * RxJS in action\r\n * Chapter #\r\n * @author Paul Daniels\r\n * @author Luis Atencio\r\n */\r\nexport function getUrlParams(url) {\r\n let match,\r\n pl = /\\+/g, // Regex for replacing addition symbol with a space\r\n search = /([^&=]+)=?([^&]*)/g,\r\n decode = function (s) { return decodeURIComponent(s.replace(pl, \" \")); },\r\n query = url.substring(1);\r\n\r\n const urlParams = {};\r\n while (match = search.exec(query))\r\n urlParams[decode(match[1])] = decode(match[2]);\r\n\r\n return urlParams;\r\n}","/**\r\n * RxJS in action\r\n * Chapter #\r\n * @author Paul Daniels\r\n * @author Luis Atencio\r\n */\r\nexport function buildTag(tagName, options, transform = x => x) {\r\n return (source) => {\r\n const attrs = [];\r\n for (let k in options) {\r\n options.hasOwnProperty(k) && attrs.push(`${k}=\"${options[k]}\"`);\r\n }\r\n\r\n return `<${tagName} ${attrs.join(' ')}>${transform(source)}</${tagName}>`;\r\n };\r\n}","/**\r\n * RxJS in action\r\n * Chapter #\r\n * @author Paul Daniels\r\n * @author Luis Atencio\r\n */\r\nexport const defaultHtml =\r\n `\r\n<!DOCTYPE html>\r\n<html>\r\n <head>\r\n <meta charset=\"utf-8\">\r\n <meta name=\"viewport\" content=\"width=device-width\">\r\n <title>RxJS in Action</title>\r\n </head>\r\n <body></body>\r\n</html>\r\n`.trim();","/**\r\n * RxJS in action\r\n * Chapter #\r\n * @author Paul Daniels\r\n * @author Luis Atencio\r\n */\r\nexport function consoleProxy(console = window.console) {\r\n if(console && console.log) {\r\n //Set up iframe for redirection\r\n let iframe = parent.document.getElementById('console');\r\n let consoleFrame = iframe.contentWindow || iframe.contentDocument;\r\n if (consoleFrame.document) consoleFrame = consoleFrame.document;\r\n let write = (frame => {\r\n return content => {\r\n frame.open();\r\n frame.write(content);\r\n frame.close();\r\n };\r\n })(consoleFrame);\r\n write(''); // clear contents on change\r\n\r\n window.console = {\r\n log: (val) => {\r\n let previous = consoleFrame.body.innerHTML || '';\r\n write(previous.trim() + \"<br />\" + val);\r\n },\r\n warn: (val) => {\r\n let previous = consoleFrame.body.innerHTML || '';\r\n write(previous.trim() + \"<br />\" + val);\r\n },\r\n error: (val) => {\r\n let previous = consoleFrame.body.innerHTML || '';\r\n write(previous.trim() + \"<br />\" + val);\r\n }\r\n };\r\n }\r\n}","/**\r\n * RxJS in action\r\n * Chapter #\r\n * @author Paul Daniels\r\n * @author Luis Atencio\r\n */\r\n\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nclass CookieManager {\r\n constructor() {\r\n this._changed = new Subject();\r\n }\r\n _notifyChanged(key) {\r\n this._changed.next(key);\r\n }\r\n setCookie(key, value, opts = {}) {\r\n const {path, expires} = opts;\r\n let cookie = [`${key}=${value}`];\r\n path && cookie.push(`path=${path}`);\r\n expires && cookie.push(`expires=${expires}`);\r\n document.cookie = cookie.join('; ');\r\n this._notifyChanged(key);\r\n }\r\n\r\n static removeCookie(key) {\r\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\r\n }\r\n\r\n getCookie(key) {\r\n return Observable.defer(() => {\r\n const cookies = document.cookie;\r\n const cookieStart = cookies.indexOf(key);\r\n\r\n if (cookieStart < 0)\r\n return Observable.empty();\r\n else {\r\n const valueStart = cookies.indexOf('=', cookieStart) + 1;\r\n let cookieEnd = cookies.indexOf(';', cookieStart);\r\n cookieEnd = cookieEnd < 0 ? cookies.length : cookieEnd;\r\n\r\n return Observable.of(cookies.substring(valueStart, cookieEnd));\r\n }\r\n });\r\n }\r\n\r\n watchCookie(key) {\r\n return this._changed.asObservable()\r\n .filter(x => key === x)\r\n .startWith(key)\r\n .flatMapTo(this.getCookie(key));\r\n }\r\n}\r\n\r\nexport const cookies = new CookieManager();","/**\r\n * RxJS in action\r\n * Chapter #\r\n * @author Paul Daniels\r\n * @author Luis Atencio\r\n */\r\n'use strict';\r\n\r\nimport {getUrlParams} from './utils/url';\r\nimport {buildTag} from \"./utils/tag\";\r\nimport {defaultHtml} from \"./initial\";\r\nimport {consoleProxy} from \"./console\";\r\nimport {cookies} from './utils/cookies';\r\nimport { Observable } from 'rxjs';\r\nimport $ from 'jquery';\r\nimport CodeMirror from 'codemirror';\r\n\r\ncookies.watchCookie('example')\r\n .subscribe(x => console.log(`Cookie is ${x}`));\r\n\r\ncookies.setCookie('example', '7.2');\r\n\r\ncookies.setCookie('example', '7.3');\r\n\r\ncookies.setCookie('example', '8.1');\r\n\r\nObservable.of('css', 'html', 'javascript')\r\n .flatMap(\r\n tag => Observable.fromEvent(document.getElementById('show-' + tag), 'click'),\r\n (tag, value) => ({tag, el: value.target}))\r\n .subscribe(({el, tag}) => {\r\n const {classList, id} = el;\r\n\r\n classList.toggle('btn-primary');\r\n classList.toggle('btn-default');\r\n classList.toggle('active');\r\n\r\n document.getElementById(tag + '-container').classList.toggle('hidden');\r\n });\r\n\r\n// Builds a new code editor on the page\r\nconst jsEditor = CodeMirror.fromTextArea(document.getElementById('javascript'), {\r\n mode: \"javascript\",\r\n theme: 'dracula',\r\n lineNumbers: true,\r\n readOnly: false,\r\n value: 'Test'\r\n});\r\n\r\nconst htmlEditor = CodeMirror.fromTextArea(document.getElementById('html'), {\r\n mode: 'htmlmixed',\r\n theme: 'dracula',\r\n lineNumbers: true,\r\n});\r\n\r\nhtmlEditor.setValue(defaultHtml);\r\n\r\nconst cssEditor = CodeMirror.fromTextArea(document.getElementById('css'), {\r\n mode: 'css',\r\n theme: 'dracula',\r\n lineNumbers: true\r\n});\r\n\r\nconst exampleSelector = document.getElementById('example-change');\r\n\r\n// Url params always take precedence over the cookies\r\nconst urlParams = getUrlParams(window.location.search);\r\n\r\nObservable.from(exampleSelector.getElementsByTagName('option'))\r\n .filter(({value}) => value === urlParams['example'])\r\n .take(1)\r\n .subscribe(x => x.selected = 'selected');\r\n\r\nconst startWithIfPresent =\r\n (url, key) =>\r\n source =>\r\n url[key] ? source.startWith(url[key]) : source;\r\n\r\nObservable.fromEvent(\r\n exampleSelector,\r\n 'change',\r\n (e) => e.target.value\r\n)\r\n .let(startWithIfPresent(urlParams, 'example'))\r\n .map((e) => e.split('.')) // Split the chapter and id\r\n .filter(value => value.length === 2) // Sanity check\r\n .flatMap(([chapter, id]) => {\r\n return $.getJSON(`/rest/api/example/${chapter}/${id}`);\r\n })\r\n .subscribe(({js, css, html}) => {\r\n js && jsEditor.setValue(js);\r\n css && cssEditor.setValue(css);\r\n html && htmlEditor.setValue(html);\r\n });\r\n\r\nconst onCodeChange = (tag) => () => {\r\n console.log(tag, '[UPDATE]: CODE CHANGE', Date.now());\r\n};\r\n\r\nconst html$ = Observable.fromEvent(htmlEditor.doc, 'change',\r\n (instance, change) => instance.getValue())\r\n .do(onCodeChange('html'))\r\n .startWith(defaultHtml)\r\n .debounceTime(1000);\r\n\r\n// Babel compiler options\r\nconst compile$ = Observable.of({\r\n presets: ['es2015'],\r\n // TODO Compile this separately and load independently\r\n plugins: [\r\n [\"transform-object-rest-spread\", {\"useBuiltIns\": true}]\r\n ]\r\n});\r\n\r\nconst js$ = Observable.fromEvent(jsEditor, 'change',\r\n (instance, change) => instance.getValue())\r\n .do(onCodeChange('js'))\r\n .startWith('console.log(\"Welcome to RxJS in Action Code!\")')\r\n .debounceTime(1000)\r\n .do(() => console.log('Compiling...'))\r\n .combineLatest(compile$, (code, opts) => {\r\n try {\r\n return Babel.transform(code, opts).code\r\n } catch (e) {\r\n console.warn('Problem compiling the code', e);\r\n //FIXME Probably should not be returning code that babel doesn't even know how to compile\r\n return code;\r\n }\r\n })\r\n .map(buildTag('script', {type: 'application/javascript'}, function (code) {\r\n //Naive way of preventing this from polluting the global namespace\r\n return `;(${consoleProxy.toString().trim()})();\r\n (function wrapper() {\r\n ${code}\\n\r\n })()\\n`;\r\n }));\r\n // .map(code =>\r\n // buildTag('script', {\r\n // type: 'application/javascript',\r\n // src: 'babel-polyfill/dist/polyfill.min.js'\r\n // })(' ') + '\\n' + code\r\n // );\r\n\r\nconst css$ = Observable.fromEvent(cssEditor, 'change',\r\n (instance, change) => instance.getValue())\r\n .do(onCodeChange('css'))\r\n .startWith('')\r\n .debounceTime(1000)\r\n .map(buildTag('style'));\r\n\r\nconst update$ = js$.combineLatest(html$, css$,\r\n (javascript, html, css) => ({html, javascript, css}));\r\n\r\nexport const runtime$ = update$\r\n .debounceTime(1000)\r\n .do(onCodeChange('combined'))\r\n .map(contents => {\r\n const {javascript, html, css} = contents;\r\n let builder = [];\r\n\r\n try {\r\n const endOfHead = html.indexOf('</head>');\r\n const endOfBody = html.indexOf('</body>');\r\n\r\n const beforeCss = html.substring(0, endOfHead);\r\n const afterCss = html.substring(endOfHead, endOfBody);\r\n const afterJs = html.substring(endOfBody);\r\n\r\n builder.push(beforeCss);\r\n builder.push(css);\r\n builder.push(afterCss);\r\n\r\n builder.push(javascript);\r\n builder.push(afterJs);\r\n } catch (e) {\r\n console.log('Could not render content! ', e);\r\n }\r\n\r\n return builder.join('\\n');\r\n });\r\n","/**\r\n * RxJS in action\r\n * Chapter #\r\n * @author Paul Daniels\r\n * @author Luis Atencio\r\n */\r\n'use strict';\r\n\r\nimport {runtime$} from './editors';\r\nimport $ from 'jquery';\r\n\r\n// Get the contents of the iframe\r\nconst doc = $('#output').contents();\r\n\r\nruntime$.subscribe(\r\n content => {\r\n // Rewrites the contents of the iframe\r\n // Prevents carry over from previous examples\r\n doc[0].open();\r\n doc[0].write(content);\r\n doc[0].close();\r\n },\r\n err => {\r\n console.warn(\"Something went wrong! Please refresh the page.\", err)\r\n });\r\n"],"names":["getUrlParams","url","match","pl","decode","s","decodeURIComponent","replace","query","substring","urlParams","search","exec","buildTag","tagName","options","transform","x","source","attrs","k","hasOwnProperty","push","join","defaultHtml","trim","consoleProxy","console","window","log","iframe","parent","document","getElementById","consoleFrame","contentWindow","contentDocument","write","open","content","close","val","previous","body","innerHTML","CookieManager","_changed","Subject","key","next","value","opts","path","expires","cookie","_notifyChanged","Observable","defer","cookies","cookieStart","indexOf","empty","valueStart","cookieEnd","length","of","asObservable","filter","startWith","flatMapTo","getCookie","watchCookie","subscribe","setCookie","flatMap","fromEvent","tag","el","target","classList","toggle","jsEditor","CodeMirror","fromTextArea","htmlEditor","setValue","cssEditor","exampleSelector","location","from","getElementsByTagName","take","selected","startWithIfPresent","e","let","map","split","chapter","id","$","getJSON","js","css","html","onCodeChange","Date","now","html$","doc","instance","change","getValue","do","debounceTime","compile$","js$","combineLatest","code","Babel","warn","type","toString","css$","update$","javascript","runtime$","contents","builder","endOfHead","endOfBody","beforeCss","afterCss","afterJs","err"],"mappings":"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","preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIkQ6L1NXRGV2L1J4SlNJbkFjdGlvbi9hcHAvanMvdXRpbHMvdXJsLmpzIiwiRDovU1dEZXYvUnhKU0luQWN0aW9uL2FwcC9qcy91dGlscy90YWcuanMiLCJEOi9TV0Rldi9SeEpTSW5BY3Rpb24vYXBwL2pzL2luaXRpYWwuanMiLCJEOi9TV0Rldi9SeEpTSW5BY3Rpb24vYXBwL2pzL2NvbnNvbGUuanMiLCJEOi9TV0Rldi9SeEpTSW5BY3Rpb24vYXBwL2pzL3V0aWxzL2Nvb2tpZXMuanMiLCJEOi9TV0Rldi9SeEpTSW5BY3Rpb24vYXBwL2pzL2VkaXRvcnMuanMiLCJEOi9TV0Rldi9SeEpTSW5BY3Rpb24vYXBwL2pzL3J1bnRpbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqICBSeEpTIGluIGFjdGlvblxyXG4gKiAgQ2hhcHRlciAjXHJcbiAqICBAYXV0aG9yIFBhdWwgRGFuaWVsc1xyXG4gKiAgQGF1dGhvciBMdWlzIEF0ZW5jaW9cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxQYXJhbXModXJsKSB7XHJcbiAgbGV0IG1hdGNoLFxyXG4gICAgcGwgICAgID0gL1xcKy9nLCAgLy8gUmVnZXggZm9yIHJlcGxhY2luZyBhZGRpdGlvbiBzeW1ib2wgd2l0aCBhIHNwYWNlXHJcbiAgICBzZWFyY2ggPSAvKFteJj1dKyk9PyhbXiZdKikvZyxcclxuICAgIGRlY29kZSA9IGZ1bmN0aW9uIChzKSB7IHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocy5yZXBsYWNlKHBsLCBcIiBcIikpOyB9LFxyXG4gICAgcXVlcnkgID0gdXJsLnN1YnN0cmluZygxKTtcclxuXHJcbiAgY29uc3QgdXJsUGFyYW1zID0ge307XHJcbiAgd2hpbGUgKG1hdGNoID0gc2VhcmNoLmV4ZWMocXVlcnkpKVxyXG4gICAgdXJsUGFyYW1zW2RlY29kZShtYXRjaFsxXSldID0gZGVjb2RlKG1hdGNoWzJdKTtcclxuXHJcbiAgcmV0dXJuIHVybFBhcmFtcztcclxufSIsIi8qKlxyXG4gKiAgUnhKUyBpbiBhY3Rpb25cclxuICogIENoYXB0ZXIgI1xyXG4gKiAgQGF1dGhvciBQYXVsIERhbmllbHNcclxuICogIEBhdXRob3IgTHVpcyBBdGVuY2lvXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUYWcodGFnTmFtZSwgb3B0aW9ucywgdHJhbnNmb3JtID0geCA9PiB4KSB7XHJcbiAgcmV0dXJuIChzb3VyY2UpID0+IHtcclxuICAgIGNvbnN0IGF0dHJzID0gW107XHJcbiAgICBmb3IgKGxldCBrIGluIG9wdGlvbnMpIHtcclxuICAgICAgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrKSAmJiBhdHRycy5wdXNoKGAke2t9PVwiJHtvcHRpb25zW2tdfVwiYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGA8JHt0YWdOYW1lfSAke2F0dHJzLmpvaW4oJyAnKX0+JHt0cmFuc2Zvcm0oc291cmNlKX08LyR7dGFnTmFtZX0+YDtcclxuICB9O1xyXG59IiwiLyoqXHJcbiAqICBSeEpTIGluIGFjdGlvblxyXG4gKiAgQ2hhcHRlciAjXHJcbiAqICBAYXV0aG9yIFBhdWwgRGFuaWVsc1xyXG4gKiAgQGF1dGhvciBMdWlzIEF0ZW5jaW9cclxuICovXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0SHRtbCA9XHJcbiAgYFxyXG48IURPQ1RZUEUgaHRtbD5cclxuPGh0bWw+XHJcbiAgPGhlYWQ+XHJcbiAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cclxuICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGhcIj5cclxuICAgIDx0aXRsZT5SeEpTIGluIEFjdGlvbjwvdGl0bGU+XHJcbiAgPC9oZWFkPlxyXG4gIDxib2R5PjwvYm9keT5cclxuPC9odG1sPlxyXG5gLnRyaW0oKTsiLCIvKipcclxuICogIFJ4SlMgaW4gYWN0aW9uXHJcbiAqICBDaGFwdGVyICNcclxuICogIEBhdXRob3IgUGF1bCBEYW5pZWxzXHJcbiAqICBAYXV0aG9yIEx1aXMgQXRlbmNpb1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGVQcm94eShjb25zb2xlID0gd2luZG93LmNvbnNvbGUpIHtcclxuICBpZihjb25zb2xlICYmIGNvbnNvbGUubG9nKSB7XHJcbiAgICAvL1NldCB1cCBpZnJhbWUgZm9yIHJlZGlyZWN0aW9uXHJcbiAgICBsZXQgaWZyYW1lID0gcGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7XHJcbiAgICBsZXQgY29uc29sZUZyYW1lID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNvbnRlbnREb2N1bWVudDtcclxuICAgIGlmIChjb25zb2xlRnJhbWUuZG9jdW1lbnQpIGNvbnNvbGVGcmFtZSA9IGNvbnNvbGVGcmFtZS5kb2N1bWVudDtcclxuICAgIGxldCB3cml0ZSA9IChmcmFtZSA9PiB7XHJcbiAgICAgIHJldHVybiBjb250ZW50ID0+IHtcclxuICAgICAgICBmcmFtZS5vcGVuKCk7XHJcbiAgICAgICAgZnJhbWUud3JpdGUoY29udGVudCk7XHJcbiAgICAgICAgZnJhbWUuY2xvc2UoKTtcclxuICAgICAgfTtcclxuICAgIH0pKGNvbnNvbGVGcmFtZSk7XHJcbiAgICB3cml0ZSgnJyk7IC8vIGNsZWFyIGNvbnRlbnRzIG9uIGNoYW5nZVxyXG5cclxuICAgIHdpbmRvdy5jb25zb2xlID0ge1xyXG4gICAgICBsb2c6ICh2YWwpID0+IHtcclxuICAgICAgICBsZXQgcHJldmlvdXMgPSBjb25zb2xlRnJhbWUuYm9keS5pbm5lckhUTUwgfHwgJyc7XHJcbiAgICAgICAgd3JpdGUocHJldmlvdXMudHJpbSgpICsgXCI8YnIgLz5cIiArIHZhbCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHdhcm46ICh2YWwpID0+IHtcclxuICAgICAgICBsZXQgcHJldmlvdXMgPSBjb25zb2xlRnJhbWUuYm9keS5pbm5lckhUTUwgfHwgJyc7XHJcbiAgICAgICAgd3JpdGUocHJldmlvdXMudHJpbSgpICsgXCI8YnIgLz5cIiArIHZhbCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAodmFsKSA9PiB7XHJcbiAgICAgICAgbGV0IHByZXZpb3VzID0gY29uc29sZUZyYW1lLmJvZHkuaW5uZXJIVE1MIHx8ICcnO1xyXG4gICAgICAgIHdyaXRlKHByZXZpb3VzLnRyaW0oKSArIFwiPGJyIC8+XCIgKyB2YWwpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxufSIsIi8qKlxyXG4gKiAgUnhKUyBpbiBhY3Rpb25cclxuICogIENoYXB0ZXIgI1xyXG4gKiAgQGF1dGhvciBQYXVsIERhbmllbHNcclxuICogIEBhdXRob3IgTHVpcyBBdGVuY2lvXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuY2xhc3MgQ29va2llTWFuYWdlciB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl9jaGFuZ2VkID0gbmV3IFN1YmplY3QoKTtcclxuICB9XHJcbiAgX25vdGlmeUNoYW5nZWQoa2V5KSB7XHJcbiAgICB0aGlzLl9jaGFuZ2VkLm5leHQoa2V5KTtcclxuICB9XHJcbiAgc2V0Q29va2llKGtleSwgdmFsdWUsIG9wdHMgPSB7fSkge1xyXG4gICAgY29uc3Qge3BhdGgsIGV4cGlyZXN9ID0gb3B0cztcclxuICAgIGxldCBjb29raWUgPSBbYCR7a2V5fT0ke3ZhbHVlfWBdO1xyXG4gICAgcGF0aCAmJiBjb29raWUucHVzaChgcGF0aD0ke3BhdGh9YCk7XHJcbiAgICBleHBpcmVzICYmIGNvb2tpZS5wdXNoKGBleHBpcmVzPSR7ZXhwaXJlc31gKTtcclxuICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlZChrZXkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlbW92ZUNvb2tpZShrZXkpIHtcclxuICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke2tleX09OyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDEgR01UO2A7XHJcbiAgfVxyXG5cclxuICBnZXRDb29raWUoa2V5KSB7XHJcbiAgICByZXR1cm4gT2JzZXJ2YWJsZS5kZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWU7XHJcbiAgICAgIGNvbnN0IGNvb2tpZVN0YXJ0ID0gY29va2llcy5pbmRleE9mKGtleSk7XHJcblxyXG4gICAgICBpZiAoY29va2llU3RhcnQgPCAwKVxyXG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmVtcHR5KCk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlU3RhcnQgPSBjb29raWVzLmluZGV4T2YoJz0nLCBjb29raWVTdGFydCkgKyAxO1xyXG4gICAgICAgIGxldCBjb29raWVFbmQgPSBjb29raWVzLmluZGV4T2YoJzsnLCBjb29raWVTdGFydCk7XHJcbiAgICAgICAgY29va2llRW5kID0gY29va2llRW5kIDwgMCA/IGNvb2tpZXMubGVuZ3RoIDogY29va2llRW5kO1xyXG5cclxuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihjb29raWVzLnN1YnN0cmluZyh2YWx1ZVN0YXJ0LCBjb29raWVFbmQpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB3YXRjaENvb2tpZShrZXkpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpXHJcbiAgICAgIC5maWx0ZXIoeCA9PiBrZXkgPT09IHgpXHJcbiAgICAgIC5zdGFydFdpdGgoa2V5KVxyXG4gICAgICAuZmxhdE1hcFRvKHRoaXMuZ2V0Q29va2llKGtleSkpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNvb2tpZXMgPSBuZXcgQ29va2llTWFuYWdlcigpOyIsIi8qKlxyXG4gKiAgUnhKUyBpbiBhY3Rpb25cclxuICogIENoYXB0ZXIgI1xyXG4gKiAgQGF1dGhvciBQYXVsIERhbmllbHNcclxuICogIEBhdXRob3IgTHVpcyBBdGVuY2lvXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5pbXBvcnQge2dldFVybFBhcmFtc30gZnJvbSAnLi91dGlscy91cmwnO1xyXG5pbXBvcnQge2J1aWxkVGFnfSBmcm9tIFwiLi91dGlscy90YWdcIjtcclxuaW1wb3J0IHtkZWZhdWx0SHRtbH0gZnJvbSBcIi4vaW5pdGlhbFwiO1xyXG5pbXBvcnQge2NvbnNvbGVQcm94eX0gZnJvbSBcIi4vY29uc29sZVwiO1xyXG5pbXBvcnQge2Nvb2tpZXN9IGZyb20gJy4vdXRpbHMvY29va2llcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IENvZGVNaXJyb3IgZnJvbSAnY29kZW1pcnJvcic7XHJcblxyXG5jb29raWVzLndhdGNoQ29va2llKCdleGFtcGxlJylcclxuICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coYENvb2tpZSBpcyAke3h9YCkpO1xyXG5cclxuY29va2llcy5zZXRDb29raWUoJ2V4YW1wbGUnLCAnNy4yJyk7XHJcblxyXG5jb29raWVzLnNldENvb2tpZSgnZXhhbXBsZScsICc3LjMnKTtcclxuXHJcbmNvb2tpZXMuc2V0Q29va2llKCdleGFtcGxlJywgJzguMScpO1xyXG5cclxuT2JzZXJ2YWJsZS5vZignY3NzJywgJ2h0bWwnLCAnamF2YXNjcmlwdCcpXHJcbiAgLmZsYXRNYXAoXHJcbiAgICB0YWcgPT4gT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3ctJyArIHRhZyksICdjbGljaycpLFxyXG4gICAgKHRhZywgdmFsdWUpID0+ICh7dGFnLCBlbDogdmFsdWUudGFyZ2V0fSkpXHJcbiAgLnN1YnNjcmliZSgoe2VsLCB0YWd9KSA9PiB7XHJcbiAgICBjb25zdCB7Y2xhc3NMaXN0LCBpZH0gPSBlbDtcclxuXHJcbiAgICBjbGFzc0xpc3QudG9nZ2xlKCdidG4tcHJpbWFyeScpO1xyXG4gICAgY2xhc3NMaXN0LnRvZ2dsZSgnYnRuLWRlZmF1bHQnKTtcclxuICAgIGNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpO1xyXG5cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhZyArICctY29udGFpbmVyJykuY2xhc3NMaXN0LnRvZ2dsZSgnaGlkZGVuJyk7XHJcbiAgfSk7XHJcblxyXG4vLyBCdWlsZHMgYSBuZXcgY29kZSBlZGl0b3Igb24gdGhlIHBhZ2VcclxuY29uc3QganNFZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnamF2YXNjcmlwdCcpLCB7XHJcbiAgbW9kZTogXCJqYXZhc2NyaXB0XCIsXHJcbiAgdGhlbWU6ICdkcmFjdWxhJyxcclxuICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICByZWFkT25seTogZmFsc2UsXHJcbiAgdmFsdWU6ICdUZXN0J1xyXG59KTtcclxuXHJcbmNvbnN0IGh0bWxFZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHRtbCcpLCB7XHJcbiAgbW9kZTogJ2h0bWxtaXhlZCcsXHJcbiAgdGhlbWU6ICdkcmFjdWxhJyxcclxuICBsaW5lTnVtYmVyczogdHJ1ZSxcclxufSk7XHJcblxyXG5odG1sRWRpdG9yLnNldFZhbHVlKGRlZmF1bHRIdG1sKTtcclxuXHJcbmNvbnN0IGNzc0VkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjc3MnKSwge1xyXG4gIG1vZGU6ICdjc3MnLFxyXG4gIHRoZW1lOiAnZHJhY3VsYScsXHJcbiAgbGluZU51bWJlcnM6IHRydWVcclxufSk7XHJcblxyXG5jb25zdCBleGFtcGxlU2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZS1jaGFuZ2UnKTtcclxuXHJcbi8vIFVybCBwYXJhbXMgYWx3YXlzIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZSBjb29raWVzXHJcbmNvbnN0IHVybFBhcmFtcyA9IGdldFVybFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuXHJcbk9ic2VydmFibGUuZnJvbShleGFtcGxlU2VsZWN0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29wdGlvbicpKVxyXG4gIC5maWx0ZXIoKHt2YWx1ZX0pID0+IHZhbHVlID09PSB1cmxQYXJhbXNbJ2V4YW1wbGUnXSlcclxuICAudGFrZSgxKVxyXG4gIC5zdWJzY3JpYmUoeCA9PiB4LnNlbGVjdGVkID0gJ3NlbGVjdGVkJyk7XHJcblxyXG5jb25zdCBzdGFydFdpdGhJZlByZXNlbnQgPVxyXG4gICh1cmwsIGtleSkgPT5cclxuICAgIHNvdXJjZSA9PlxyXG4gICAgICB1cmxba2V5XSA/IHNvdXJjZS5zdGFydFdpdGgodXJsW2tleV0pIDogc291cmNlO1xyXG5cclxuT2JzZXJ2YWJsZS5mcm9tRXZlbnQoXHJcbiAgZXhhbXBsZVNlbGVjdG9yLFxyXG4gICdjaGFuZ2UnLFxyXG4gIChlKSA9PiBlLnRhcmdldC52YWx1ZVxyXG4pXHJcbiAgLmxldChzdGFydFdpdGhJZlByZXNlbnQodXJsUGFyYW1zLCAnZXhhbXBsZScpKVxyXG4gIC5tYXAoKGUpID0+IGUuc3BsaXQoJy4nKSkgLy8gU3BsaXQgdGhlIGNoYXB0ZXIgYW5kIGlkXHJcbiAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5sZW5ndGggPT09IDIpIC8vIFNhbml0eSBjaGVja1xyXG4gIC5mbGF0TWFwKChbY2hhcHRlciwgaWRdKSA9PiB7XHJcbiAgICByZXR1cm4gJC5nZXRKU09OKGAvcmVzdC9hcGkvZXhhbXBsZS8ke2NoYXB0ZXJ9LyR7aWR9YCk7XHJcbiAgfSlcclxuICAuc3Vic2NyaWJlKCh7anMsIGNzcywgaHRtbH0pID0+IHtcclxuICAgIGpzICYmIGpzRWRpdG9yLnNldFZhbHVlKGpzKTtcclxuICAgIGNzcyAmJiBjc3NFZGl0b3Iuc2V0VmFsdWUoY3NzKTtcclxuICAgIGh0bWwgJiYgaHRtbEVkaXRvci5zZXRWYWx1ZShodG1sKTtcclxuICB9KTtcclxuXHJcbmNvbnN0IG9uQ29kZUNoYW5nZSA9ICh0YWcpID0+ICgpID0+IHtcclxuICBjb25zb2xlLmxvZyh0YWcsICdbVVBEQVRFXTogQ09ERSBDSEFOR0UnLCBEYXRlLm5vdygpKTtcclxufTtcclxuXHJcbmNvbnN0IGh0bWwkID0gT2JzZXJ2YWJsZS5mcm9tRXZlbnQoaHRtbEVkaXRvci5kb2MsICdjaGFuZ2UnLFxyXG4gIChpbnN0YW5jZSwgY2hhbmdlKSA9PiBpbnN0YW5jZS5nZXRWYWx1ZSgpKVxyXG4gIC5kbyhvbkNvZGVDaGFuZ2UoJ2h0bWwnKSlcclxuICAuc3RhcnRXaXRoKGRlZmF1bHRIdG1sKVxyXG4gIC5kZWJvdW5jZVRpbWUoMTAwMCk7XHJcblxyXG4vLyBCYWJlbCBjb21waWxlciBvcHRpb25zXHJcbmNvbnN0IGNvbXBpbGUkID0gT2JzZXJ2YWJsZS5vZih7XHJcbiAgcHJlc2V0czogWydlczIwMTUnXSxcclxuICAvLyBUT0RPIENvbXBpbGUgdGhpcyBzZXBhcmF0ZWx5IGFuZCBsb2FkIGluZGVwZW5kZW50bHlcclxuICBwbHVnaW5zOiBbXHJcbiAgICBbXCJ0cmFuc2Zvcm0tb2JqZWN0LXJlc3Qtc3ByZWFkXCIsIHtcInVzZUJ1aWx0SW5zXCI6IHRydWV9XVxyXG4gIF1cclxufSk7XHJcblxyXG5jb25zdCBqcyQgPSBPYnNlcnZhYmxlLmZyb21FdmVudChqc0VkaXRvciwgJ2NoYW5nZScsXHJcbiAgKGluc3RhbmNlLCBjaGFuZ2UpID0+IGluc3RhbmNlLmdldFZhbHVlKCkpXHJcbiAgLmRvKG9uQ29kZUNoYW5nZSgnanMnKSlcclxuICAuc3RhcnRXaXRoKCdjb25zb2xlLmxvZyhcIldlbGNvbWUgdG8gUnhKUyBpbiBBY3Rpb24gQ29kZSFcIiknKVxyXG4gIC5kZWJvdW5jZVRpbWUoMTAwMClcclxuICAuZG8oKCkgPT4gY29uc29sZS5sb2coJ0NvbXBpbGluZy4uLicpKVxyXG4gIC5jb21iaW5lTGF0ZXN0KGNvbXBpbGUkLCAoY29kZSwgb3B0cykgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIEJhYmVsLnRyYW5zZm9ybShjb2RlLCBvcHRzKS5jb2RlXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignUHJvYmxlbSBjb21waWxpbmcgdGhlIGNvZGUnLCBlKTtcclxuICAgICAgLy9GSVhNRSBQcm9iYWJseSBzaG91bGQgbm90IGJlIHJldHVybmluZyBjb2RlIHRoYXQgYmFiZWwgZG9lc24ndCBldmVuIGtub3cgaG93IHRvIGNvbXBpbGVcclxuICAgICAgcmV0dXJuIGNvZGU7XHJcbiAgICB9XHJcbiAgfSlcclxuICAubWFwKGJ1aWxkVGFnKCdzY3JpcHQnLCB7dHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnfSwgZnVuY3Rpb24gKGNvZGUpIHtcclxuICAgIC8vTmFpdmUgd2F5IG9mIHByZXZlbnRpbmcgdGhpcyBmcm9tIHBvbGx1dGluZyB0aGUgZ2xvYmFsIG5hbWVzcGFjZVxyXG4gICAgcmV0dXJuIGA7KCR7Y29uc29sZVByb3h5LnRvU3RyaW5nKCkudHJpbSgpfSkoKTtcclxuICAgICAgKGZ1bmN0aW9uIHdyYXBwZXIoKSB7XHJcbiAgICAgICAgICAgICR7Y29kZX1cXG5cclxuICAgICAgfSkoKVxcbmA7XHJcbiAgfSkpO1xyXG4gIC8vIC5tYXAoY29kZSA9PlxyXG4gIC8vICAgYnVpbGRUYWcoJ3NjcmlwdCcsIHtcclxuICAvLyAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxyXG4gIC8vICAgICBzcmM6ICdiYWJlbC1wb2x5ZmlsbC9kaXN0L3BvbHlmaWxsLm1pbi5qcydcclxuICAvLyAgIH0pKCcgJykgKyAnXFxuJyArIGNvZGVcclxuICAvLyApO1xyXG5cclxuY29uc3QgY3NzJCA9IE9ic2VydmFibGUuZnJvbUV2ZW50KGNzc0VkaXRvciwgJ2NoYW5nZScsXHJcbiAgKGluc3RhbmNlLCBjaGFuZ2UpID0+IGluc3RhbmNlLmdldFZhbHVlKCkpXHJcbiAgLmRvKG9uQ29kZUNoYW5nZSgnY3NzJykpXHJcbiAgLnN0YXJ0V2l0aCgnJylcclxuICAuZGVib3VuY2VUaW1lKDEwMDApXHJcbiAgLm1hcChidWlsZFRhZygnc3R5bGUnKSk7XHJcblxyXG5jb25zdCB1cGRhdGUkID0ganMkLmNvbWJpbmVMYXRlc3QoaHRtbCQsIGNzcyQsXHJcbiAgKGphdmFzY3JpcHQsIGh0bWwsIGNzcykgPT4gKHtodG1sLCBqYXZhc2NyaXB0LCBjc3N9KSk7XHJcblxyXG5leHBvcnQgY29uc3QgcnVudGltZSQgPSB1cGRhdGUkXHJcbiAgLmRlYm91bmNlVGltZSgxMDAwKVxyXG4gIC5kbyhvbkNvZGVDaGFuZ2UoJ2NvbWJpbmVkJykpXHJcbiAgLm1hcChjb250ZW50cyA9PiB7XHJcbiAgICBjb25zdCB7amF2YXNjcmlwdCwgaHRtbCwgY3NzfSA9IGNvbnRlbnRzO1xyXG4gICAgbGV0IGJ1aWxkZXIgPSBbXTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBlbmRPZkhlYWQgPSBodG1sLmluZGV4T2YoJzwvaGVhZD4nKTtcclxuICAgICAgY29uc3QgZW5kT2ZCb2R5ID0gaHRtbC5pbmRleE9mKCc8L2JvZHk+Jyk7XHJcblxyXG4gICAgICBjb25zdCBiZWZvcmVDc3MgPSBodG1sLnN1YnN0cmluZygwLCBlbmRPZkhlYWQpO1xyXG4gICAgICBjb25zdCBhZnRlckNzcyA9IGh0bWwuc3Vic3RyaW5nKGVuZE9mSGVhZCwgZW5kT2ZCb2R5KTtcclxuICAgICAgY29uc3QgYWZ0ZXJKcyA9IGh0bWwuc3Vic3RyaW5nKGVuZE9mQm9keSk7XHJcblxyXG4gICAgICBidWlsZGVyLnB1c2goYmVmb3JlQ3NzKTtcclxuICAgICAgYnVpbGRlci5wdXNoKGNzcyk7XHJcbiAgICAgIGJ1aWxkZXIucHVzaChhZnRlckNzcyk7XHJcblxyXG4gICAgICBidWlsZGVyLnB1c2goamF2YXNjcmlwdCk7XHJcbiAgICAgIGJ1aWxkZXIucHVzaChhZnRlckpzKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0NvdWxkIG5vdCByZW5kZXIgY29udGVudCEgJywgZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJ1aWxkZXIuam9pbignXFxuJyk7XHJcbiAgfSk7XHJcbiIsIi8qKlxyXG4gKiAgUnhKUyBpbiBhY3Rpb25cclxuICogIENoYXB0ZXIgI1xyXG4gKiAgQGF1dGhvciBQYXVsIERhbmllbHNcclxuICogIEBhdXRob3IgTHVpcyBBdGVuY2lvXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5pbXBvcnQge3J1bnRpbWUkfSBmcm9tICcuL2VkaXRvcnMnO1xyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5cclxuLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgaWZyYW1lXHJcbmNvbnN0IGRvYyA9ICQoJyNvdXRwdXQnKS5jb250ZW50cygpO1xyXG5cclxucnVudGltZSQuc3Vic2NyaWJlKFxyXG4gIGNvbnRlbnQgPT4ge1xyXG4gICAgLy8gUmV3cml0ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBpZnJhbWVcclxuICAgIC8vIFByZXZlbnRzIGNhcnJ5IG92ZXIgZnJvbSBwcmV2aW91cyBleGFtcGxlc1xyXG4gICAgZG9jWzBdLm9wZW4oKTtcclxuICAgIGRvY1swXS53cml0ZShjb250ZW50KTtcclxuICAgIGRvY1swXS5jbG9zZSgpO1xyXG4gIH0sXHJcbiAgZXJyID0+IHtcclxuICAgIGNvbnNvbGUud2FybihcIlNvbWV0aGluZyB3ZW50IHdyb25nISBQbGVhc2UgcmVmcmVzaCB0aGUgcGFnZS5cIiwgZXJyKVxyXG4gIH0pO1xyXG4iXSwibmFtZXMiOlsiZ2V0VXJsUGFyYW1zIiwidXJsIiwibWF0Y2giLCJwbCIsImRlY29kZSIsInMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwicXVlcnkiLCJzdWJzdHJpbmciLCJ1cmxQYXJhbXMiLCJzZWFyY2giLCJleGVjIiwiYnVpbGRUYWciLCJ0YWdOYW1lIiwib3B0aW9ucyIsInRyYW5zZm9ybSIsIngiLCJzb3VyY2UiLCJhdHRycyIsImsiLCJoYXNPd25Qcm9wZXJ0eSIsInB1c2giLCJqb2luIiwiZGVmYXVsdEh0bWwiLCJ0cmltIiwiY29uc29sZVByb3h5IiwiY29uc29sZSIsIndpbmRvdyIsImxvZyIsImlmcmFtZSIsInBhcmVudCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJjb25zb2xlRnJhbWUiLCJjb250ZW50V2luZG93IiwiY29udGVudERvY3VtZW50Iiwid3JpdGUiLCJvcGVuIiwiY29udGVudCIsImNsb3NlIiwidmFsIiwicHJldmlvdXMiLCJib2R5IiwiaW5uZXJIVE1MIiwiQ29va2llTWFuYWdlciIsIl9jaGFuZ2VkIiwiU3ViamVjdCIsImtleSIsIm5leHQiLCJ2YWx1ZSIsIm9wdHMiLCJwYXRoIiwiZXhwaXJlcyIsImNvb2tpZSIsIl9ub3RpZnlDaGFuZ2VkIiwiT2JzZXJ2YWJsZSIsImRlZmVyIiwiY29va2llcyIsImNvb2tpZVN0YXJ0IiwiaW5kZXhPZiIsImVtcHR5IiwidmFsdWVTdGFydCIsImNvb2tpZUVuZCIsImxlbmd0aCIsIm9mIiwiYXNPYnNlcnZhYmxlIiwiZmlsdGVyIiwic3RhcnRXaXRoIiwiZmxhdE1hcFRvIiwiZ2V0Q29va2llIiwid2F0Y2hDb29raWUiLCJzdWJzY3JpYmUiLCJzZXRDb29raWUiLCJmbGF0TWFwIiwiZnJvbUV2ZW50IiwidGFnIiwiZWwiLCJ0YXJnZXQiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJqc0VkaXRvciIsIkNvZGVNaXJyb3IiLCJmcm9tVGV4dEFyZWEiLCJodG1sRWRpdG9yIiwic2V0VmFsdWUiLCJjc3NFZGl0b3IiLCJleGFtcGxlU2VsZWN0b3IiLCJsb2NhdGlvbiIsImZyb20iLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRha2UiLCJzZWxlY3RlZCIsInN0YXJ0V2l0aElmUHJlc2VudCIsImUiLCJsZXQiLCJtYXAiLCJzcGxpdCIsImNoYXB0ZXIiLCJpZCIsIiQiLCJnZXRKU09OIiwianMiLCJjc3MiLCJodG1sIiwib25Db2RlQ2hhbmdlIiwiRGF0ZSIsIm5vdyIsImh0bWwkIiwiZG9jIiwiaW5zdGFuY2UiLCJjaGFuZ2UiLCJnZXRWYWx1ZSIsImRvIiwiZGVib3VuY2VUaW1lIiwiY29tcGlsZSQiLCJqcyQiLCJjb21iaW5lTGF0ZXN0IiwiY29kZSIsIkJhYmVsIiwid2FybiIsInR5cGUiLCJ0b1N0cmluZyIsImNzcyQiLCJ1cGRhdGUkIiwiamF2YXNjcmlwdCIsInJ1bnRpbWUkIiwiY29udGVudHMiLCJidWlsZGVyIiwiZW5kT2ZIZWFkIiwiZW5kT2ZCb2R5IiwiYmVmb3JlQ3NzIiwiYWZ0ZXJDc3MiLCJhZnRlckpzIiwiZXJyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7Ozs7O0FBTUEsQUFBTyxTQUFTQSxZQUFULENBQXNCQyxHQUF0QixFQUEyQjtNQUM1QkMsY0FBSjtNQUNFQyxLQUFTLEtBRFg7O1dBRVcsb0JBRlg7TUFHRUMsU0FBUyxTQUFUQSxNQUFTLENBQVVDLENBQVYsRUFBYTtXQUFTQyxtQkFBbUJELEVBQUVFLE9BQUYsQ0FBVUosRUFBVixFQUFjLEdBQWQsQ0FBbkIsQ0FBUDtHQUgxQjtNQUlFSyxRQUFTUCxJQUFJUSxTQUFKLENBQWMsQ0FBZCxDQUpYOztNQU1NQyxZQUFZLEVBQWxCO1NBQ09SLFFBQVFTLE9BQU9DLElBQVAsQ0FBWUosS0FBWixDQUFmO2NBQ1lKLE9BQU9GLE1BQU0sQ0FBTixDQUFQLENBQVYsSUFBOEJFLE9BQU9GLE1BQU0sQ0FBTixDQUFQLENBQTlCO0dBRUYsT0FBT1EsU0FBUDs7O0FDakJGOzs7Ozs7QUFNQSxBQUFPLFNBQVNHLFFBQVQsQ0FBa0JDLE9BQWxCLEVBQTJCQyxPQUEzQixFQUF3RDtNQUFwQkMsU0FBb0IsdUVBQVI7V0FBS0MsQ0FBTDtHQUFROztTQUN0RCxVQUFDQyxNQUFELEVBQVk7UUFDWEMsUUFBUSxFQUFkO1NBQ0ssSUFBSUMsQ0FBVCxJQUFjTCxPQUFkLEVBQXVCO2NBQ2JNLGNBQVIsQ0FBdUJELENBQXZC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"}