{"version":3,"sources":["share.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","$","loadjweixin","cb","loadingjweixin","getScript","setconfig","loadingconfig","_url","window","location","href","getJSON","encodeURIComponent","data","wx","config","debug","appId","AppId","timestamp","Timestamp","nonceStr","NonceStr","signature","Signature","jsApiList","error","res","alert","JSON","stringify","isset","setsharedata","ready","updateAppMessageShareData","callbackdata","updateTimelineShareData","console","info","opt","navigator","userAgent","toLowerCase","match","jQuery","QR8bitByte","this","mode","QRMode","MODE_8BIT_BYTE","parsedData","length","byteArray","code","charCodeAt","push","Array","concat","apply","unshift","QRCodeModel","typeNumber","errorCorrectLevel","moduleCount","dataCache","dataList","QRPolynomial","num","shift","undefined","Error","offset","QRRSBlock","totalCount","dataCount","QRBitBuffer","buffer","_getAndroid","android","sAgent","test","aMat","toString","parseFloat","_getTypeNumber","sText","nCorrectLevel","nType","_getUTF8Length","len","QRCodeLimitLength","nLimit","QRErrorCorrectLevel","L","M","Q","H","replacedText","encodeURI","replace","QRCode","getLength","write","put","addData","newData","isDark","row","col","getModuleCount","make","makeImpl","getBestMaskPattern","maskPattern","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","minLostPoint","pattern","lostPoint","QRUtil","getLostPoint","createMovieClip","target_mc","instance_name","depth","qr_mc","createEmptyMovieClip","y","x","beginFill","moveTo","lineTo","endFill","pos","getPatternPosition","j","bits","getBCHTypeNumber","mod","Math","floor","getBCHTypeInfo","inc","bitIndex","byteIndex","dark","getMask","PAD0","PAD1","rsBlocks","getRSBlocks","getLengthInBits","totalDataCount","putBit","createBytes","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","max","rsPoly","getErrorCorrectPolynomial","modPoly","modIndex","totalCodeCount","index","MODE_NUMBER","MODE_ALPHA_NUM","MODE_KANJI","QRMaskPattern","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","PATTERN_POSITION_TABLE","G15","G18","G15_MASK","getBCHDigit","digit","errorCorrectLength","a","multiply","QRMath","gexp","type","qrCode","sameCount","count","darkCount","abs","glog","LOG_TABLE","EXP_TABLE","e","ratio","RS_BLOCK_TABLE","rsBlock","getRsBlockTable","list","bufIndex","bit","svgDrawer","Drawing","el","htOption","_el","_htOption","draw","oQRCode","makeSVG","tag","attrs","document","createElementNS","k","setAttribute","nCount","width","height","clear","svg","viewBox","String","fill","colorLight","setAttributeNS","appendChild","colorDark","id","child","hasChildNodes","removeChild","lastChild","documentElement","tagName","CanvasRenderingContext2D","nWidth","nHeight","aHTML","innerHTML","join","elTable","childNodes","nLeftMarginTable","offsetWidth","nTopMarginTable","offsetHeight","style","margin","_onMakeImage","_elImage","src","_elCanvas","toDataURL","display","_safeSetDataURI","fSuccess","fFail","self","_fFail","_fSuccess","_bSupportDataURI","createElement","fOnError","onabort","onerror","onload","_android","factor","devicePixelRatio","drawImage","image","sx","sy","sw","sh","dx","dy","dw","dh","nodeName","arguments","_bIsPainted","_oContext","getContext","alt","nRoundedWidth","round","nRoundedHeight","bIsDark","nLeft","nTop","strokeStyle","lineWidth","fillStyle","fillRect","strokeRect","ceil","makeImage","isPainted","clearRect","nNumber","vOption","correctLevel","text","getElementById","useSVG","_oQRCode","_oDrawing","makeCode","title","CorrectLevel","web","option","extend","def","_init","set","box","html","dom","empty","remove","attr","createHref","append","unbind","click","ShowWeixinQrcode","weixinshare","t","link","imgUrl","desc","wxurl","wxhtml","qrcode","qrwidth","hide","show","css","margin-top","margin-left","head","getElementsByTagName","styleSheet","cssText","createTextNode","domid","position","logoh","top","logosrc","logo","left","emshare2020"],"mappings":"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I,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,GAAI,EAAG,IAAK,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,MAAO,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,GAAI,EAAG,IAAK,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,KAAM,EAAG,IAAK,GAAI,EAAG,IAAK,KAAM,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,EAAG,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,GAAI,IAAK,MAAO,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,GAAI,IAAK,MAAO,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAK,IAAK,EAAG,IAAK,MAAO,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAK,MAAO,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,GAAI,IAAK,MAAO,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,EAAG,IAAK,IAAK,GAAI,IAAK,MAAO,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,IAAK,IAAK,EAAG,IAAK,MAAO,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,GAAI,GAAI,KAAMxI,EAAUoF,YAAc,SAAU/F,EA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","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 5);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n; (function ($) {\r\n var callbackdata = {};\r\n var loadingjweixin = false, loadingconfig = false,isset=false;;\r\n module.exports = function (opt) {\r\n //判断不是微信浏览器,不执行后续动作以减少请求\r\n var ua = navigator.userAgent.toLowerCase();\r\n if (ua.match(/MicroMessenger/i) != \"micromessenger\") {\r\n return;\r\n }\r\n callbackdata = opt;\r\n //判断是否已加载过微信的jdk\r\n if (window.wx) {\r\n //判断是否初次设置\r\n if (isset) {\r\n setsharedata();\r\n }\r\n else {\r\n setconfig(function () {\r\n setsharedata();\r\n });\r\n }\r\n }\r\n else {\r\n loadjweixin(function () {\r\n setconfig(function () {\r\n setsharedata();\r\n });\r\n });\r\n };\r\n }\r\n function loadjweixin(cb) {\r\n if (loadingjweixin)\r\n return;\r\n loadingjweixin = true;\r\n $.getScript(\"https://res2.wx.qq.com/open/js/jweixin-1.4.0.js\", function () {\r\n cb();\r\n })\r\n }\r\n function setconfig(cb) {\r\n if (loadingconfig)\r\n return;\r\n loadingconfig = true;\r\n var _url = window.location.href;\r\n $.getJSON((_url[4] == 's' ? \"https\" : \"http\") + \"://hy.eastmoney.com/emwx2019/GetJsSdkUiPackage?s=\" + encodeURIComponent(_url) + \"&cb=?\", function (data) {\r\n wx.config({\r\n debug: false,\r\n appId: data.AppId,\r\n timestamp: data.Timestamp,\r\n nonceStr: data.NonceStr,\r\n signature: data.Signature,\r\n jsApiList: [\r\n 'updateAppMessageShareData',\r\n 'updateTimelineShareData'\r\n ]\r\n });\r\n wx.error(function (res) {\r\n alert(JSON.stringify(res));\r\n });\r\n isset=true;\r\n cb();\r\n });\r\n }\r\n function setsharedata() {\r\n wx.ready(function () {\r\n wx.updateAppMessageShareData(callbackdata);\r\n wx.updateTimelineShareData(callbackdata);\r\n });\r\n console && console.info(callbackdata);\r\n }\r\n})(jQuery);\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = \".emshare2020_buttonbox {\\r\\n height: 24px;\\r\\n line-height: 24px;\\r\\n display: block;\\r\\n overflow: hidden;\\r\\n clear: both;\\r\\n }\\r\\n .emshare2020_buttonbox a,\\r\\n .emshare2020_buttonbox span {\\r\\n background-image: url(data:image/gif;base64,R0lGODlhWgAkAPf/APe7afnJzG3EZfrbqu5kbPOWnOcoNJnWlHDFafWsr/jCeLq5uVO5Svrejf/79Nvb2/ndhfXFMvWjNEy3QmpnZ/SdJvzi5PfMS/75+US0O/bKRfvnqvjWbvn9+fvknlVTU+9zevjTZOYdKfjUae9rc12+VP734vb89f739ggGBugyPfnMjr3luv/+/kCyNnjIcZ3YmFi8UP3v2qHZnPnZeafco+Hz4P3m6JHTjPrglPbHOv7y8vzsvPzvxvvor2bBXvvf4fnJh+pETeYcJ/Seo7vjt5fVkuxRWvXCKepUBQRsyeUXIw2RuswGADapyf7rbA9NuP2wKgir+v3SAuMlKBTU/tYPAAmHs/z8++ETDhyTugODsfxpEAF30fCaC+1xLkl31BmawfCNj+r1+f3FAQiS5vCHUOQkC+teEwR0zd8CAC2ZuQRawvazkO00CwKF1vu5ATw8PCqdxWWSo/dWAgF/r6/W6PajFfb6/Pzuuvvp5ehKT3m53f6uAUS21PrZx3fJ4/7ylmu41/OYaAGZ3t80Lv3jRdHo8fbLzZnb7I/U5vdeQYqn29N/BW2Q0l651YnF2iSF0leGzhaMt/e1SPzn2fjEp/3y5/hPKVqtzVew5/SjeOIcHylvxIXO4vnTlNDc8frLb6anp0unyPnMtP7bJ+Hp9utsbfzAXcjNzShbvfzcHZrF5rvg7MDk7fXDLfrY0+laXz+xNfZHAoCt6vbGNt7v9fL4+oFXF/vpsITNfvnafoGf2KC34mqc5d3h4Rl7zujv7/vlpDKh4/rTvobU/BqKrP39/fShpvrVooSCgpLR9vB3fvi8wPnN0PWnPepHUfSgLf/++/zwy/fQWWG/WRwZGfX19cLnv9fv1dlfXbGvrwFWnfaxtXbIb62rq/e1XI3RiPOPlWFfX/zozfaqQ/vfuPbIPf3q0e747f746P3z9PfOVPnIyvjXc+clMPi7vysnJ/nGgPB7gsfoxP/9+fzruefm5rfis+YgK/3+/f78/C9YlT6xNP///////yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgxRTAzMEIyNTFGNUU1MTE5NTJEQTg5RjQxREQ1QjczIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkVERjYyQ0UxRkM4MjExRTU5RDJGREZBNTAzQzYxRjcxIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkVERjYyQ0UwRkM4MjExRTU5RDJGREZBNTAzQzYxRjcxIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODRFMDMwQjI1MUY1RTUxMTk1MkRBODlGNDFERDVCNzMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODFFMDMwQjI1MUY1RTUxMTk1MkRBODlGNDFERDVCNzMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVk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);\\r\\n background-repeat: no-repeat;\\r\\n width: 18px;\\r\\n height: 18px;\\r\\n padding: 0;\\r\\n margin: 3px 0 0;\\r\\n display: block;\\r\\n float: left;\\r\\n margin-left: 4px;\\r\\n cursor: pointer;\\r\\n }\\r\\n .emshare2020_buttonbox em {\\r\\n float: left;\\r\\n font-style: normal;\\r\\n font-family: \\\"\\\\5B8B\\\\4F53\\\";\\r\\n font-size: 12px;\\r\\n }\\r\\n .emshare2020_buttonbox .emshare2020_icon_guba {\\r\\n background-position: 0 0;\\r\\n margin-left: 0;\\r\\n }\\r\\n .emshare2020_buttonbox .emshare2020_icon_weixin {\\r\\n background-position: -36px -19px;\\r\\n }\\r\\n .emshare2020_buttonbox .emshare2020_icon_weibo {\\r\\n background-position: 0 -20px;\\r\\n }\\r\\n .emshare2020_buttonbox .emshare2020_icon_qzone {\\r\\n background-position: -56px -20px;\\r\\n }\\r\\n .emshare2020_weixin_popup {\\r\\n position: fixed;\\r\\n left: 50%;\\r\\n top: 50%;\\r\\n width: 240px;\\r\\n height: 300px;\\r\\n z-index: 11001;\\r\\n font-size: 12px;\\r\\n padding: 10px 13px 10px 10px;\\r\\n background: #ffffff;\\r\\n border-width: 1px;\\r\\n border-style: solid;\\r\\n border-color: #d8d8d8;\\r\\n border-image: initial;\\r\\n margin-top: -160px;\\r\\n margin-left: -130px;\\r\\n }\\r\\n .emshare2020_weixin_popup .emshare2020_weixin_popup_head {\\r\\n font-size: 12px;\\r\\n font-weight: bold;\\r\\n text-align: left;\\r\\n line-height: 16px;\\r\\n height: 16px;\\r\\n position: relative;\\r\\n color: #000000;\\r\\n }\\r\\n .emshare2020_weixin_popup .emshare2020_weixin_popup_head .emshare2020_weixin_popup_close {\\r\\n width: 16px;\\r\\n height: 16px;\\r\\n position: absolute;\\r\\n right: 0px;\\r\\n top: 0px;\\r\\n color: #999999;\\r\\n font-size: 16px;\\r\\n text-decoration: none;\\r\\n }\\r\\n .emshare2020_weixin_popup #emshare2020_weixin_popup_main {\\r\\n min-height: 150px;\\r\\n padding: 15px 18px;\\r\\n }\\r\\n .emshare2020_weixin_popup .emshare2020_weixin_popup_foot {\\r\\n font-size: 12px;\\r\\n text-align: left;\\r\\n line-height: 22px;\\r\\n color: #666666;\\r\\n }\\r\\n \"\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\r\\n 分享到:\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\"\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\r\\n
\\r\\n 分享到微信朋友圈\\r\\n ×\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n 打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。\\r\\n
\\r\\n
\"\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n/**\r\n * @fileoverview\r\n * - Using the 'QRCode for Javascript library'\r\n * - Fixed dataset of 'QRCode for Javascript library' for support full-spec.\r\n * - this library has no dependencies.\r\n * \r\n * @author davidshimjs\r\n * @see http://www.d-project.com/\r\n * @see http://jeromeetienne.github.com/jquery-qrcode/\r\n */\r\nvar QRCode;\r\n\r\n//---------------------------------------------------------------------\r\n// QRCode for JavaScript\r\n//\r\n// Copyright (c) 2009 Kazuhiko Arase\r\n//\r\n// URL: http://www.d-project.com/\r\n//\r\n// Licensed under the MIT license:\r\n// http://www.opensource.org/licenses/mit-license.php\r\n//\r\n// The word \"QR Code\" is registered trademark of \r\n// DENSO WAVE INCORPORATED\r\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\r\n//\r\n//---------------------------------------------------------------------\r\nfunction QR8bitByte(data) {\r\n this.mode = QRMode.MODE_8BIT_BYTE;\r\n this.data = data;\r\n this.parsedData = [];\r\n\r\n // Added to support UTF-8 Characters\r\n for (var i = 0, l = this.data.length; i < l; i++) {\r\n var byteArray = [];\r\n var code = this.data.charCodeAt(i);\r\n\r\n if (code > 0x10000) {\r\n byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);\r\n byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);\r\n byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);\r\n byteArray[3] = 0x80 | (code & 0x3F);\r\n } else if (code > 0x800) {\r\n byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);\r\n byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);\r\n byteArray[2] = 0x80 | (code & 0x3F);\r\n } else if (code > 0x80) {\r\n byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);\r\n byteArray[1] = 0x80 | (code & 0x3F);\r\n } else {\r\n byteArray[0] = code;\r\n }\r\n\r\n this.parsedData.push(byteArray);\r\n }\r\n\r\n this.parsedData = Array.prototype.concat.apply([], this.parsedData);\r\n\r\n if (this.parsedData.length != this.data.length) {\r\n this.parsedData.unshift(191);\r\n this.parsedData.unshift(187);\r\n this.parsedData.unshift(239);\r\n }\r\n}\r\n\r\nQR8bitByte.prototype = {\r\n getLength: function (buffer) {\r\n return this.parsedData.length;\r\n },\r\n write: function (buffer) {\r\n for (var i = 0, l = this.parsedData.length; i < l; i++) {\r\n buffer.put(this.parsedData[i], 8);\r\n }\r\n }\r\n};\r\n\r\nfunction QRCodeModel(typeNumber, errorCorrectLevel) {\r\n this.typeNumber = typeNumber;\r\n this.errorCorrectLevel = errorCorrectLevel;\r\n this.modules = null;\r\n this.moduleCount = 0;\r\n this.dataCache = null;\r\n this.dataList = [];\r\n}\r\n\r\nQRCodeModel.prototype = {\r\n addData: function (data) { var newData = new QR8bitByte(data); this.dataList.push(newData); this.dataCache = null; }, isDark: function (row, col) {\r\n if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) { throw new Error(row + \",\" + col); }\r\n return this.modules[row][col];\r\n }, getModuleCount: function () { return this.moduleCount; }, make: function () { this.makeImpl(false, this.getBestMaskPattern()); }, makeImpl: function (test, maskPattern) {\r\n this.moduleCount = this.typeNumber * 4 + 17; this.modules = new Array(this.moduleCount); for (var row = 0; row < this.moduleCount; row++) { this.modules[row] = new Array(this.moduleCount); for (var col = 0; col < this.moduleCount; col++) { this.modules[row][col] = null; } }\r\n this.setupPositionProbePattern(0, 0); this.setupPositionProbePattern(this.moduleCount - 7, 0); this.setupPositionProbePattern(0, this.moduleCount - 7); this.setupPositionAdjustPattern(); this.setupTimingPattern(); this.setupTypeInfo(test, maskPattern); if (this.typeNumber >= 7) { this.setupTypeNumber(test); }\r\n if (this.dataCache == null) { this.dataCache = QRCodeModel.createData(this.typeNumber, this.errorCorrectLevel, this.dataList); }\r\n this.mapData(this.dataCache, maskPattern);\r\n }, setupPositionProbePattern: function (row, col) { for (var r = -1; r <= 7; r++) { if (row + r <= -1 || this.moduleCount <= row + r) continue; for (var c = -1; c <= 7; c++) { if (col + c <= -1 || this.moduleCount <= col + c) continue; if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r == 6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) { this.modules[row + r][col + c] = true; } else { this.modules[row + r][col + c] = false; } } } }, getBestMaskPattern: function () {\r\n var minLostPoint = 0; var pattern = 0; for (var i = 0; i < 8; i++) { this.makeImpl(true, i); var lostPoint = QRUtil.getLostPoint(this); if (i == 0 || minLostPoint > lostPoint) { minLostPoint = lostPoint; pattern = i; } }\r\n return pattern;\r\n }, createMovieClip: function (target_mc, instance_name, depth) {\r\n var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); var cs = 1; this.make(); for (var row = 0; row < this.modules.length; row++) { var y = row * cs; for (var col = 0; col < this.modules[row].length; col++) { var x = col * cs; var dark = this.modules[row][col]; if (dark) { qr_mc.beginFill(0, 100); qr_mc.moveTo(x, y); qr_mc.lineTo(x + cs, y); qr_mc.lineTo(x + cs, y + cs); qr_mc.lineTo(x, y + cs); qr_mc.endFill(); } } }\r\n return qr_mc;\r\n }, setupTimingPattern: function () {\r\n for (var r = 8; r < this.moduleCount - 8; r++) {\r\n if (this.modules[r][6] != null) { continue; }\r\n this.modules[r][6] = (r % 2 == 0);\r\n }\r\n for (var c = 8; c < this.moduleCount - 8; c++) {\r\n if (this.modules[6][c] != null) { continue; }\r\n this.modules[6][c] = (c % 2 == 0);\r\n }\r\n }, setupPositionAdjustPattern: function () {\r\n var pos = QRUtil.getPatternPosition(this.typeNumber); for (var i = 0; i < pos.length; i++) {\r\n for (var j = 0; j < pos.length; j++) {\r\n var row = pos[i]; var col = pos[j]; if (this.modules[row][col] != null) { continue; }\r\n for (var r = -2; r <= 2; r++) { for (var c = -2; c <= 2; c++) { if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) { this.modules[row + r][col + c] = true; } else { this.modules[row + r][col + c] = false; } } }\r\n }\r\n }\r\n }, setupTypeNumber: function (test) {\r\n var bits = QRUtil.getBCHTypeNumber(this.typeNumber); for (var i = 0; i < 18; i++) { var mod = (!test && ((bits >> i) & 1) == 1); this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod; }\r\n for (var i = 0; i < 18; i++) { var mod = (!test && ((bits >> i) & 1) == 1); this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; }\r\n }, setupTypeInfo: function (test, maskPattern) {\r\n var data = (this.errorCorrectLevel << 3) | maskPattern; var bits = QRUtil.getBCHTypeInfo(data); for (var i = 0; i < 15; i++) { var mod = (!test && ((bits >> i) & 1) == 1); if (i < 6) { this.modules[i][8] = mod; } else if (i < 8) { this.modules[i + 1][8] = mod; } else { this.modules[this.moduleCount - 15 + i][8] = mod; } }\r\n for (var i = 0; i < 15; i++) { var mod = (!test && ((bits >> i) & 1) == 1); if (i < 8) { this.modules[8][this.moduleCount - i - 1] = mod; } else if (i < 9) { this.modules[8][15 - i - 1 + 1] = mod; } else { this.modules[8][15 - i - 1] = mod; } }\r\n this.modules[this.moduleCount - 8][8] = (!test);\r\n }, mapData: function (data, maskPattern) {\r\n var inc = -1; var row = this.moduleCount - 1; var bitIndex = 7; var byteIndex = 0; for (var col = this.moduleCount - 1; col > 0; col -= 2) {\r\n if (col == 6) col--; while (true) {\r\n for (var c = 0; c < 2; c++) {\r\n if (this.modules[row][col - c] == null) {\r\n var dark = false; if (byteIndex < data.length) { dark = (((data[byteIndex] >>> bitIndex) & 1) == 1); }\r\n var mask = QRUtil.getMask(maskPattern, row, col - c); if (mask) { dark = !dark; }\r\n this.modules[row][col - c] = dark; bitIndex--; if (bitIndex == -1) { byteIndex++; bitIndex = 7; }\r\n }\r\n }\r\n row += inc; if (row < 0 || this.moduleCount <= row) { row -= inc; inc = -inc; break; }\r\n }\r\n }\r\n }\r\n}; QRCodeModel.PAD0 = 0xEC; QRCodeModel.PAD1 = 0x11; QRCodeModel.createData = function (typeNumber, errorCorrectLevel, dataList) {\r\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); var buffer = new QRBitBuffer(); for (var i = 0; i < dataList.length; i++) { var data = dataList[i]; buffer.put(data.mode, 4); buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); data.write(buffer); }\r\n var totalDataCount = 0; for (var i = 0; i < rsBlocks.length; i++) { totalDataCount += rsBlocks[i].dataCount; }\r\n if (buffer.getLengthInBits() > totalDataCount * 8) {\r\n throw new Error(\"code length overflow. (\"\r\n + buffer.getLengthInBits()\r\n + \">\"\r\n + totalDataCount * 8\r\n + \")\");\r\n }\r\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { buffer.put(0, 4); }\r\n while (buffer.getLengthInBits() % 8 != 0) { buffer.putBit(false); }\r\n while (true) {\r\n if (buffer.getLengthInBits() >= totalDataCount * 8) { break; }\r\n buffer.put(QRCodeModel.PAD0, 8); if (buffer.getLengthInBits() >= totalDataCount * 8) { break; }\r\n buffer.put(QRCodeModel.PAD1, 8);\r\n }\r\n return QRCodeModel.createBytes(buffer, rsBlocks);\r\n}; QRCodeModel.createBytes = function (buffer, rsBlocks) {\r\n var offset = 0; var maxDcCount = 0; var maxEcCount = 0; var dcdata = new Array(rsBlocks.length); var ecdata = new Array(rsBlocks.length); for (var r = 0; r < rsBlocks.length; r++) {\r\n var dcCount = rsBlocks[r].dataCount; var ecCount = rsBlocks[r].totalCount - dcCount; maxDcCount = Math.max(maxDcCount, dcCount); maxEcCount = Math.max(maxEcCount, ecCount); dcdata[r] = new Array(dcCount); for (var i = 0; i < dcdata[r].length; i++) { dcdata[r][i] = 0xff & buffer.buffer[i + offset]; }\r\n offset += dcCount; var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1); var modPoly = rawPoly.mod(rsPoly); ecdata[r] = new Array(rsPoly.getLength() - 1); for (var i = 0; i < ecdata[r].length; i++) { var modIndex = i + modPoly.getLength() - ecdata[r].length; ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0; }\r\n }\r\n var totalCodeCount = 0; for (var i = 0; i < rsBlocks.length; i++) { totalCodeCount += rsBlocks[i].totalCount; }\r\n var data = new Array(totalCodeCount); var index = 0; for (var i = 0; i < maxDcCount; i++) { for (var r = 0; r < rsBlocks.length; r++) { if (i < dcdata[r].length) { data[index++] = dcdata[r][i]; } } }\r\n for (var i = 0; i < maxEcCount; i++) { for (var r = 0; r < rsBlocks.length; r++) { if (i < ecdata[r].length) { data[index++] = ecdata[r][i]; } } }\r\n return data;\r\n}; var QRMode = { MODE_NUMBER: 1 << 0, MODE_ALPHA_NUM: 1 << 1, MODE_8BIT_BYTE: 1 << 2, MODE_KANJI: 1 << 3 }; var QRErrorCorrectLevel = { L: 1, M: 0, Q: 3, H: 2 }; var QRMaskPattern = { PATTERN000: 0, PATTERN001: 1, PATTERN010: 2, PATTERN011: 3, PATTERN100: 4, PATTERN101: 5, PATTERN110: 6, PATTERN111: 7 }; var QRUtil = {\r\n PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]], G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0), G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0), G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1), getBCHTypeInfo: function (data) {\r\n var d = data << 10; while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15))); }\r\n return ((data << 10) | d) ^ QRUtil.G15_MASK;\r\n }, getBCHTypeNumber: function (data) {\r\n var d = data << 12; while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18))); }\r\n return (data << 12) | d;\r\n }, getBCHDigit: function (data) {\r\n var digit = 0; while (data != 0) { digit++; data >>>= 1; }\r\n return digit;\r\n }, getPatternPosition: function (typeNumber) { return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; }, getMask: function (maskPattern, i, j) { switch (maskPattern) { case QRMaskPattern.PATTERN000: return (i + j) % 2 == 0; case QRMaskPattern.PATTERN001: return i % 2 == 0; case QRMaskPattern.PATTERN010: return j % 3 == 0; case QRMaskPattern.PATTERN011: return (i + j) % 3 == 0; case QRMaskPattern.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0; case QRMaskPattern.PATTERN101: return (i * j) % 2 + (i * j) % 3 == 0; case QRMaskPattern.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 == 0; case QRMaskPattern.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 == 0; default: throw new Error(\"bad maskPattern:\" + maskPattern); } }, getErrorCorrectPolynomial: function (errorCorrectLength) {\r\n var a = new QRPolynomial([1], 0); for (var i = 0; i < errorCorrectLength; i++) { a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0)); }\r\n return a;\r\n }, getLengthInBits: function (mode, type) { if (1 <= type && type < 10) { switch (mode) { case QRMode.MODE_NUMBER: return 10; case QRMode.MODE_ALPHA_NUM: return 9; case QRMode.MODE_8BIT_BYTE: return 8; case QRMode.MODE_KANJI: return 8; default: throw new Error(\"mode:\" + mode); } } else if (type < 27) { switch (mode) { case QRMode.MODE_NUMBER: return 12; case QRMode.MODE_ALPHA_NUM: return 11; case QRMode.MODE_8BIT_BYTE: return 16; case QRMode.MODE_KANJI: return 10; default: throw new Error(\"mode:\" + mode); } } else if (type < 41) { switch (mode) { case QRMode.MODE_NUMBER: return 14; case QRMode.MODE_ALPHA_NUM: return 13; case QRMode.MODE_8BIT_BYTE: return 16; case QRMode.MODE_KANJI: return 12; default: throw new Error(\"mode:\" + mode); } } else { throw new Error(\"type:\" + type); } }, getLostPoint: function (qrCode) {\r\n var moduleCount = qrCode.getModuleCount(); var lostPoint = 0; for (var row = 0; row < moduleCount; row++) {\r\n for (var col = 0; col < moduleCount; col++) {\r\n var sameCount = 0; var dark = qrCode.isDark(row, col); for (var r = -1; r <= 1; r++) {\r\n if (row + r < 0 || moduleCount <= row + r) { continue; }\r\n for (var c = -1; c <= 1; c++) {\r\n if (col + c < 0 || moduleCount <= col + c) { continue; }\r\n if (r == 0 && c == 0) { continue; }\r\n if (dark == qrCode.isDark(row + r, col + c)) { sameCount++; }\r\n }\r\n }\r\n if (sameCount > 5) { lostPoint += (3 + sameCount - 5); }\r\n }\r\n }\r\n for (var row = 0; row < moduleCount - 1; row++) { for (var col = 0; col < moduleCount - 1; col++) { var count = 0; if (qrCode.isDark(row, col)) count++; if (qrCode.isDark(row + 1, col)) count++; if (qrCode.isDark(row, col + 1)) count++; if (qrCode.isDark(row + 1, col + 1)) count++; if (count == 0 || count == 4) { lostPoint += 3; } } }\r\n for (var row = 0; row < moduleCount; row++) { for (var col = 0; col < moduleCount - 6; col++) { if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) { lostPoint += 40; } } }\r\n for (var col = 0; col < moduleCount; col++) { for (var row = 0; row < moduleCount - 6; row++) { if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) { lostPoint += 40; } } }\r\n var darkCount = 0; for (var col = 0; col < moduleCount; col++) { for (var row = 0; row < moduleCount; row++) { if (qrCode.isDark(row, col)) { darkCount++; } } }\r\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; lostPoint += ratio * 10; return lostPoint;\r\n }\r\n}; var QRMath = {\r\n glog: function (n) {\r\n if (n < 1) { throw new Error(\"glog(\" + n + \")\"); }\r\n return QRMath.LOG_TABLE[n];\r\n }, gexp: function (n) {\r\n while (n < 0) { n += 255; }\r\n while (n >= 256) { n -= 255; }\r\n return QRMath.EXP_TABLE[n];\r\n }, EXP_TABLE: new Array(256), LOG_TABLE: new Array(256)\r\n}; for (var i = 0; i < 8; i++) { QRMath.EXP_TABLE[i] = 1 << i; }\r\nfor (var i = 8; i < 256; i++) { QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]; }\r\nfor (var i = 0; i < 255; i++) { QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i; }\r\nfunction QRPolynomial(num, shift) {\r\n if (num.length == undefined) { throw new Error(num.length + \"/\" + shift); }\r\n var offset = 0; while (offset < num.length && num[offset] == 0) { offset++; }\r\n this.num = new Array(num.length - offset + shift); for (var i = 0; i < num.length - offset; i++) { this.num[i] = num[i + offset]; }\r\n}\r\nQRPolynomial.prototype = {\r\n get: function (index) { return this.num[index]; }, getLength: function () { return this.num.length; }, multiply: function (e) {\r\n var num = new Array(this.getLength() + e.getLength() - 1); for (var i = 0; i < this.getLength(); i++) { for (var j = 0; j < e.getLength(); j++) { num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j))); } }\r\n return new QRPolynomial(num, 0);\r\n }, mod: function (e) {\r\n if (this.getLength() - e.getLength() < 0) { return this; }\r\n var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0)); var num = new Array(this.getLength()); for (var i = 0; i < this.getLength(); i++) { num[i] = this.get(i); }\r\n for (var i = 0; i < e.getLength(); i++) { num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio); }\r\n return new QRPolynomial(num, 0).mod(e);\r\n }\r\n}; function QRRSBlock(totalCount, dataCount) { this.totalCount = totalCount; this.dataCount = dataCount; }\r\nQRRSBlock.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]]; QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {\r\n var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); if (rsBlock == undefined) { throw new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel); }\r\n var length = rsBlock.length / 3; var list = []; for (var i = 0; i < length; i++) { var count = rsBlock[i * 3 + 0]; var totalCount = rsBlock[i * 3 + 1]; var dataCount = rsBlock[i * 3 + 2]; for (var j = 0; j < count; j++) { list.push(new QRRSBlock(totalCount, dataCount)); } }\r\n return list;\r\n}; QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) { switch (errorCorrectLevel) { case QRErrorCorrectLevel.L: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; case QRErrorCorrectLevel.M: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; case QRErrorCorrectLevel.Q: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; case QRErrorCorrectLevel.H: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; default: return undefined; } }; function QRBitBuffer() { this.buffer = []; this.length = 0; }\r\nQRBitBuffer.prototype = {\r\n get: function (index) { var bufIndex = Math.floor(index / 8); return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1; }, put: function (num, length) { for (var i = 0; i < length; i++) { this.putBit(((num >>> (length - i - 1)) & 1) == 1); } }, getLengthInBits: function () { return this.length; }, putBit: function (bit) {\r\n var bufIndex = Math.floor(this.length / 8); if (this.buffer.length <= bufIndex) { this.buffer.push(0); }\r\n if (bit) { this.buffer[bufIndex] |= (0x80 >>> (this.length % 8)); }\r\n this.length++;\r\n }\r\n}; var QRCodeLimitLength = [[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155], [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220], [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310], [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403], [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511], [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625], [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742], [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898], [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051], [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]];\r\n\r\nfunction _isSupportCanvas() {\r\n return typeof CanvasRenderingContext2D != \"undefined\";\r\n}\r\n\r\n// android 2.x doesn't support Data-URI spec\r\nfunction _getAndroid() {\r\n var android = false;\r\n var sAgent = navigator.userAgent;\r\n\r\n if (/android/i.test(sAgent)) { // android\r\n android = true;\r\n var aMat = sAgent.toString().match(/android ([0-9]\\.[0-9])/i);\r\n\r\n if (aMat && aMat[1]) {\r\n android = parseFloat(aMat[1]);\r\n }\r\n }\r\n\r\n return android;\r\n}\r\n\r\nvar svgDrawer = (function () {\r\n\r\n var Drawing = function (el, htOption) {\r\n this._el = el;\r\n this._htOption = htOption;\r\n };\r\n\r\n Drawing.prototype.draw = function (oQRCode) {\r\n var _htOption = this._htOption;\r\n var _el = this._el;\r\n var nCount = oQRCode.getModuleCount();\r\n var nWidth = Math.floor(_htOption.width / nCount);\r\n var nHeight = Math.floor(_htOption.height / nCount);\r\n\r\n this.clear();\r\n\r\n function makeSVG(tag, attrs) {\r\n var el = document.createElementNS('http://www.w3.org/2000/svg', tag);\r\n for (var k in attrs)\r\n if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);\r\n return el;\r\n }\r\n\r\n var svg = makeSVG(\"svg\", { 'viewBox': '0 0 ' + String(nCount) + \" \" + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight });\r\n svg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\r\n _el.appendChild(svg);\r\n\r\n svg.appendChild(makeSVG(\"rect\", { \"fill\": _htOption.colorLight, \"width\": \"100%\", \"height\": \"100%\" }));\r\n svg.appendChild(makeSVG(\"rect\", { \"fill\": _htOption.colorDark, \"width\": \"1\", \"height\": \"1\", \"id\": \"template\" }));\r\n\r\n for (var row = 0; row < nCount; row++) {\r\n for (var col = 0; col < nCount; col++) {\r\n if (oQRCode.isDark(row, col)) {\r\n var child = makeSVG(\"use\", { \"x\": String(col), \"y\": String(row) });\r\n child.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", \"#template\")\r\n svg.appendChild(child);\r\n }\r\n }\r\n }\r\n };\r\n Drawing.prototype.clear = function () {\r\n while (this._el.hasChildNodes())\r\n this._el.removeChild(this._el.lastChild);\r\n };\r\n return Drawing;\r\n})();\r\n\r\nvar useSVG = document.documentElement.tagName.toLowerCase() === \"svg\";\r\n\r\n// Drawing in DOM by using Table tag\r\nvar Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {\r\n var Drawing = function (el, htOption) {\r\n this._el = el;\r\n this._htOption = htOption;\r\n };\r\n\r\n /**\r\n * Draw the QRCode\r\n * \r\n * @param {QRCode} oQRCode\r\n */\r\n Drawing.prototype.draw = function (oQRCode) {\r\n var _htOption = this._htOption;\r\n var _el = this._el;\r\n var nCount = oQRCode.getModuleCount();\r\n var nWidth = Math.floor(_htOption.width / nCount);\r\n var nHeight = Math.floor(_htOption.height / nCount);\r\n var aHTML = [''];\r\n\r\n for (var row = 0; row < nCount; row++) {\r\n aHTML.push('');\r\n\r\n for (var col = 0; col < nCount; col++) {\r\n aHTML.push('');\r\n }\r\n\r\n aHTML.push('');\r\n }\r\n\r\n aHTML.push('
');\r\n _el.innerHTML = aHTML.join('');\r\n\r\n // Fix the margin values as real size.\r\n var elTable = _el.childNodes[0];\r\n var nLeftMarginTable = (_htOption.width - (elTable.offsetWidth||(nCount*nWidth))) / 2;\r\n var nTopMarginTable = (_htOption.height - (elTable.offsetHeight||(nCount*nHeight))) / 2;\r\n\r\n if (nLeftMarginTable > 0 && nTopMarginTable > 0) {\r\n elTable.style.margin = nTopMarginTable + \"px \" + nLeftMarginTable + \"px\";\r\n }\r\n };\r\n\r\n /**\r\n * Clear the QRCode\r\n */\r\n Drawing.prototype.clear = function () {\r\n this._el.innerHTML = '';\r\n };\r\n\r\n return Drawing;\r\n})() : (function () { // Drawing in Canvas\r\n function _onMakeImage() {\r\n this._elImage.src = this._elCanvas.toDataURL(\"image/png\");\r\n this._elImage.style.display = \"block\";\r\n this._elCanvas.style.display = \"none\";\r\n }\r\n\r\n // Android 2.1 bug workaround\r\n // http://code.google.com/p/android/issues/detail?id=5141\r\n if (this._android && this._android <= 2.1) {\r\n var factor = 1 / window.devicePixelRatio;\r\n var drawImage = CanvasRenderingContext2D.prototype.drawImage;\r\n CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {\r\n if ((\"nodeName\" in image) && /img/i.test(image.nodeName)) {\r\n for (var i = arguments.length - 1; i >= 1; i--) {\r\n arguments[i] = arguments[i] * factor;\r\n }\r\n } else if (typeof dw == \"undefined\") {\r\n arguments[1] *= factor;\r\n arguments[2] *= factor;\r\n arguments[3] *= factor;\r\n arguments[4] *= factor;\r\n }\r\n\r\n drawImage.apply(this, arguments);\r\n };\r\n }\r\n\r\n /**\r\n * Check whether the user's browser supports Data URI or not\r\n * \r\n * @private\r\n * @param {Function} fSuccess Occurs if it supports Data URI\r\n * @param {Function} fFail Occurs if it doesn't support Data URI\r\n */\r\n function _safeSetDataURI(fSuccess, fFail) {\r\n var self = this;\r\n self._fFail = fFail;\r\n self._fSuccess = fSuccess;\r\n\r\n // Check it just once\r\n if (self._bSupportDataURI === null) {\r\n var el = document.createElement(\"img\");\r\n var fOnError = function () {\r\n self._bSupportDataURI = false;\r\n\r\n if (self._fFail) {\r\n self._fFail.call(self);\r\n }\r\n };\r\n var fOnSuccess = function () {\r\n self._bSupportDataURI = true;\r\n\r\n if (self._fSuccess) {\r\n self._fSuccess.call(self);\r\n }\r\n };\r\n\r\n el.onabort = fOnError;\r\n el.onerror = fOnError;\r\n el.onload = fOnSuccess;\r\n el.src = \"data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\"; // the Image contains 1px data.\r\n return;\r\n } else if (self._bSupportDataURI === true && self._fSuccess) {\r\n self._fSuccess.call(self);\r\n } else if (self._bSupportDataURI === false && self._fFail) {\r\n self._fFail.call(self);\r\n }\r\n };\r\n\r\n /**\r\n * Drawing QRCode by using canvas\r\n * \r\n * @constructor\r\n * @param {HTMLElement} el\r\n * @param {Object} htOption QRCode Options \r\n */\r\n var Drawing = function (el, htOption) {\r\n this._bIsPainted = false;\r\n this._android = _getAndroid();\r\n\r\n this._htOption = htOption;\r\n this._elCanvas = document.createElement(\"canvas\");\r\n this._elCanvas.width = htOption.width;\r\n this._elCanvas.height = htOption.height;\r\n el.appendChild(this._elCanvas);\r\n this._el = el;\r\n this._oContext = this._elCanvas.getContext(\"2d\");\r\n this._bIsPainted = false;\r\n this._elImage = document.createElement(\"img\");\r\n this._elImage.alt = \"Scan me!\";\r\n this._elImage.style.display = \"none\";\r\n this._el.appendChild(this._elImage);\r\n this._bSupportDataURI = null;\r\n };\r\n\r\n /**\r\n * Draw the QRCode\r\n * \r\n * @param {QRCode} oQRCode \r\n */\r\n Drawing.prototype.draw = function (oQRCode) {\r\n var _elImage = this._elImage;\r\n var _oContext = this._oContext;\r\n var _htOption = this._htOption;\r\n\r\n var nCount = oQRCode.getModuleCount();\r\n var nWidth = _htOption.width / nCount;\r\n var nHeight = _htOption.height / nCount;\r\n var nRoundedWidth = Math.round(nWidth);\r\n var nRoundedHeight = Math.round(nHeight);\r\n\r\n _elImage.style.display = \"none\";\r\n this.clear();\r\n\r\n for (var row = 0; row < nCount; row++) {\r\n for (var col = 0; col < nCount; col++) {\r\n var bIsDark = oQRCode.isDark(row, col);\r\n var nLeft = col * nWidth;\r\n var nTop = row * nHeight;\r\n _oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\r\n _oContext.lineWidth = 1;\r\n _oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;\r\n _oContext.fillRect(nLeft, nTop, nWidth, nHeight);\r\n\r\n // 안티 앨리어싱 방지 처리\r\n _oContext.strokeRect(\r\n Math.floor(nLeft) + 0.5,\r\n Math.floor(nTop) + 0.5,\r\n nRoundedWidth,\r\n nRoundedHeight\r\n );\r\n\r\n _oContext.strokeRect(\r\n Math.ceil(nLeft) - 0.5,\r\n Math.ceil(nTop) - 0.5,\r\n nRoundedWidth,\r\n nRoundedHeight\r\n );\r\n }\r\n }\r\n\r\n this._bIsPainted = true;\r\n };\r\n\r\n /**\r\n * Make the image from Canvas if the browser supports Data URI.\r\n */\r\n Drawing.prototype.makeImage = function () {\r\n if (this._bIsPainted) {\r\n _safeSetDataURI.call(this, _onMakeImage);\r\n }\r\n };\r\n\r\n /**\r\n * Return whether the QRCode is painted or not\r\n * \r\n * @return {Boolean}\r\n */\r\n Drawing.prototype.isPainted = function () {\r\n return this._bIsPainted;\r\n };\r\n\r\n /**\r\n * Clear the QRCode\r\n */\r\n Drawing.prototype.clear = function () {\r\n this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);\r\n this._bIsPainted = false;\r\n };\r\n\r\n /**\r\n * @private\r\n * @param {Number} nNumber\r\n */\r\n Drawing.prototype.round = function (nNumber) {\r\n if (!nNumber) {\r\n return nNumber;\r\n }\r\n\r\n return Math.floor(nNumber * 1000) / 1000;\r\n };\r\n\r\n return Drawing;\r\n})();\r\n\r\n/**\r\n * Get the type by string length\r\n * \r\n * @private\r\n * @param {String} sText\r\n * @param {Number} nCorrectLevel\r\n * @return {Number} type\r\n */\r\nfunction _getTypeNumber(sText, nCorrectLevel) {\r\n var nType = 1;\r\n var length = _getUTF8Length(sText);\r\n\r\n for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {\r\n var nLimit = 0;\r\n\r\n switch (nCorrectLevel) {\r\n case QRErrorCorrectLevel.L:\r\n nLimit = QRCodeLimitLength[i][0];\r\n break;\r\n case QRErrorCorrectLevel.M:\r\n nLimit = QRCodeLimitLength[i][1];\r\n break;\r\n case QRErrorCorrectLevel.Q:\r\n nLimit = QRCodeLimitLength[i][2];\r\n break;\r\n case QRErrorCorrectLevel.H:\r\n nLimit = QRCodeLimitLength[i][3];\r\n break;\r\n }\r\n\r\n if (length <= nLimit) {\r\n break;\r\n } else {\r\n nType++;\r\n }\r\n }\r\n\r\n if (nType > QRCodeLimitLength.length) {\r\n throw new Error(\"Too long data\");\r\n }\r\n\r\n return nType;\r\n}\r\n\r\nfunction _getUTF8Length(sText) {\r\n var replacedText = encodeURI(sText).toString().replace(/\\%[0-9a-fA-F]{2}/g, 'a');\r\n return replacedText.length + (replacedText.length != sText ? 3 : 0);\r\n}\r\n\r\n/**\r\n * @class QRCode\r\n * @constructor\r\n * @example \r\n * new QRCode(document.getElementById(\"test\"), \"http://jindo.dev.naver.com/collie\");\r\n *\r\n * @example\r\n * var oQRCode = new QRCode(\"test\", {\r\n * text : \"http://naver.com\",\r\n * width : 128,\r\n * height : 128\r\n * });\r\n * \r\n * oQRCode.clear(); // Clear the QRCode.\r\n * oQRCode.makeCode(\"http://map.naver.com\"); // Re-create the QRCode.\r\n *\r\n * @param {HTMLElement|String} el target element or 'id' attribute of element.\r\n * @param {Object|String} vOption\r\n * @param {String} vOption.text QRCode link data\r\n * @param {Number} [vOption.width=256]\r\n * @param {Number} [vOption.height=256]\r\n * @param {String} [vOption.colorDark=\"#000000\"]\r\n * @param {String} [vOption.colorLight=\"#ffffff\"]\r\n * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] \r\n */\r\nQRCode = function (el, vOption) {\r\n this._htOption = {\r\n width: 256,\r\n height: 256,\r\n typeNumber: 4,\r\n colorDark: \"#000000\",\r\n colorLight: \"#ffffff\",\r\n correctLevel: QRErrorCorrectLevel.H\r\n };\r\n\r\n if (typeof vOption === 'string') {\r\n vOption = {\r\n text: vOption\r\n };\r\n }\r\n\r\n // Overwrites options\r\n if (vOption) {\r\n for (var i in vOption) {\r\n this._htOption[i] = vOption[i];\r\n }\r\n }\r\n\r\n if (typeof el == \"string\") {\r\n el = document.getElementById(el);\r\n }\r\n\r\n if (this._htOption.useSVG) {\r\n Drawing = svgDrawer;\r\n }\r\n\r\n this._android = _getAndroid();\r\n this._el = el;\r\n this._oQRCode = null;\r\n this._oDrawing = new Drawing(this._el, this._htOption);\r\n\r\n if (this._htOption.text) {\r\n this.makeCode(this._htOption.text);\r\n }\r\n};\r\n\r\n/**\r\n * Make the QRCode\r\n * \r\n * @param {String} sText link data\r\n */\r\nQRCode.prototype.makeCode = function (sText) {\r\n this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);\r\n this._oQRCode.addData(sText);\r\n this._oQRCode.make();\r\n this._el.title = sText;\r\n this._oDrawing.draw(this._oQRCode);\r\n this.makeImage();\r\n};\r\n\r\n/**\r\n * Make the Image from Canvas element\r\n * - It occurs automatically\r\n * - Android below 3 doesn't support Data-URI spec.\r\n * \r\n * @private\r\n */\r\nQRCode.prototype.makeImage = function () {\r\n if (typeof this._oDrawing.makeImage == \"function\" && (!this._android || this._android >= 3)) {\r\n this._oDrawing.makeImage();\r\n }\r\n};\r\n\r\n/**\r\n * Clear the QRCode\r\n */\r\nQRCode.prototype.clear = function () {\r\n this._oDrawing.clear();\r\n};\r\n\r\n/**\r\n * @name QRCode.CorrectLevel\r\n */\r\nQRCode.CorrectLevel = QRErrorCorrectLevel;\r\n\r\nmodule.exports = QRCode;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n; (function ($) {\n //require(\"./modules/share.less\");\n var css = __webpack_require__(1);\n var qrcode = __webpack_require__(4);\n var weixinshare = __webpack_require__(0);\n var html = __webpack_require__(2);\n var wxhtml = __webpack_require__(3);\n var weixinshare = __webpack_require__(0);\n var def = {\n title: document.title,\n desc: $(\"meta[name=description]\").attr(\"content\"),\n link: window.location.href,\n imgUrl: ($(\"#weixin-share\").length && $(\"#weixin-share\")[0].src) || \"http://cmsjs.eastmoney.com/common/weixin-share.png\",\n dom: \".emshare2020\",\n qrwidth: 205\n };\n var option, box;\n function web(opt) {\n option = $.extend(def, opt);\n try {\n this._init();\n } catch (error) {\n console && console.info(error);\n }\n }\n web.prototype._init = function () {\n var t = document.head || document.getElementsByTagName(\"head\")[0]\n , n = document.createElement(\"style\");\n n.type = \"text/css\",\n n.styleSheet ? n.styleSheet.cssText = css : n.appendChild(document.createTextNode(css)),\n t.appendChild(n)\n set();\n };\n web.prototype.set = function (opt) {\n option = $.extend(option, opt);\n set();\n };\n web.prototype.qrcode = function (opt) {\n $(\"#\" + opt.domid).empty().css({ \"position\": \"relative\" });\n var width = opt.width || 135;\n document.getElementById(opt.domid) && (new qrcode(document.getElementById(opt.domid), {\n text: opt.link,\n width: width,\n height: width,\n colorDark: opt.colorDark || \"#000000\",\n colorLight: opt.colorLight || \"#ffffff\"\n }));\n var logoh = width / 5;\n var top = (width - logoh) / 2;\n if (opt.logosrc != \"none\") {\n var defultlogosrc = \"data:image/gif;base64,R0lGODlhMgAyAMQAAO5zUvGRcPSrkvCLVupbFOY1AvrWyfjJuOtiFP76+OlUFOhDFOdDAuxsNOpWKOc8FOQnAOEOAPa5oOlKE/vj2elTB/3r5f3y7fOghupWHfOfduhHH+9+WOlMJehAFP///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDY5RDI5MTg2OEREMTFFQThDNDFEMEI4RTIzRjMxNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDY5RDI5MTk2OEREMTFFQThDNDFEMEI4RTIzRjMxNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NjlEMjkxNjY4REQxMUVBOEM0MUQwQjhFMjNGMzE0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NjlEMjkxNzY4REQxMUVBOEM0MUQwQjhFMjNGMzE0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAAAAAAALAAAAAAyADIAAAX/4CeOZGmeaKqubOuOlMABdG3feM5hlHtxj6BwSCw+CkekkWNZGTrGaLRQcHggHuPGkKJIv0SIpLE5HCGFLJF7goK/184nEEkcIByqWrhJmDAegYKDhIUeCwURB3OKHwsYBmiFASUJG4aYhQsQYiJ0iwIRHxIRD4QLfiMGmayHiR2LIgAQTR8QlHQLhLEiAgu/wMHCwYkPGCQJEHIiDRAiHRDCxyMBw9a/HgWcGwEXJaSUIhiNkYfA4SIc18FX2xwSqSUOET0i4LLRwBwk6sPZ2mgcBDjgDQUpACQORNj34U4whumCTdBWYEEDDgLYqEiQqJ4IhQhFZKj4C+KHfgsm/zqQYKCWCwARNJQIFfJkvgUmOUzYGaTgC0YOTNCBiAHCzgk5j9766SkCBI8jYKKTYHRn0p2dXiSACYHXiAQZIggYcaDA0asTva44MC9rCQNUNMI9y+9oAY0qLgQAKAHFuAzx5lqtu7OAWhMJMEzgxODwiAYRBpAQjJTwxL4oEghwgAZCA6gl7nRNaHbwCJ1Yx5q4sLkzg2kpmmUIXbryaQW4C6ATQUGDAggMGBTgANqEaNUjJJjFnRO3guEi7HBgAFxBcMwrMkBQEE9cAefNcTNoICGAAyoTcE9ggDeFBk7IRwz4zpyfcwUTCzC4/3x3CrgFzGZCA/vVdxt/CD6HXf8KCeR32AXWgWdfgvwVsCAKDVAhmQkGFGigCANQWKFMKuxVRXcjCEAfbhuCKOJ9DNR0ggZUKOBTCfPd1+IHIb6IWwUMFOeJfkFmRoCHCuzYo48EFAAbCfNVYFgKByCZJJQEZKnlllsygEAlABTQ5I4m0MilklymueWUIhiAgJjWCRkdAhWciaWaasYoggbBZVkBAiiSluaOAeBpKAYZ1uknoCkMwMCgJGhgKJ59cskeChZUoOiWJNoz6addkjkCjQikGR8FoKZ6ZHsfXKCpmu01gMCstNZq6621eokiqbc2YByuwAY7q54juPrnrReCKOyytjLQoqO4moSMrMxW62w2Q172GuhXA1Rr7QANHFvrADcaRK23wWpqK3k/GSCBBgEMIO+89NZr77wBaMASU/z26++/LoQAADs=\";\n var logo = $('').css({\n \"width\": logoh,\n \"height\": logoh,\n \"position\": \"absolute\",\n \"top\": top,\n \"left\": top\n });\n logo.attr({ \"src\": opt.logosrc || defultlogosrc })\n $(\"#\" + opt.domid).append(logo)\n }\n };\n function set() {\n box = $(html);\n $(option.dom).empty();\n $(\".emshare2020_weixin_popup\").remove();\n $(\".emshare2020_icon_guba\", box).attr(\"href\", createHref(\"guba\"));\n $(\".emshare2020_icon_weibo\", box).attr(\"href\", createHref(\"weibo\"));\n $(\".emshare2020_icon_qzone\", box).attr(\"href\", createHref(\"qzone\"));\n $(option.dom).append(box);\n $(\".emshare2020_icon_weixin\").unbind().click(function () {\n ShowWeixinQrcode();\n })\n weixinshare(option);\n }\n function createHref(t) {\n switch (t) {\n case \"guba\":\n return \"http://guba.eastmoney.com/share.aspx?url=\" + encodeURIComponent(option.link) +\n \"&title=\" + encodeURIComponent(option.title);\n case \"weibo\":\n return \"http://service.weibo.com/share/share.php?url=\" + encodeURIComponent(option.link) +\n \"&title=\" + encodeURIComponent(option.title) + \"&searchPic=false&pic=\" + encodeURIComponent(option.imgUrl);\n case \"qzone\":\n return \"http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=\" +\n encodeURIComponent(option.link) + \"&title=\" + encodeURIComponent(option.title) + \"&desc=\" + encodeURIComponent(option.desc) +\n \"&pics=\" + encodeURIComponent(option.imgUrl);\n case \"weixin\":\n return \"//comet.blog.sina.com.cn/qr?\" + this.config.wxurl;\n }\n }\n function ShowWeixinQrcode() {\n if ($(\".emshare2020_weixin_popup\").length > 0) {\n }\n else {\n $(\"body\").append(wxhtml);\n document.getElementById(\"emshare2020_weixin_popup_main\") && (new qrcode(document.getElementById(\"emshare2020_weixin_popup_main\"), {\n text: option.link,\n width: option.qrwidth,\n height: option.qrwidth,\n colorDark: \"#000000\",\n colorLight: \"#ffffff\"\n }));\n $(\".emshare2020_weixin_popup_close\").click(function () {\n $(\".emshare2020_weixin_popup\").hide();\n })\n }\n $(\".emshare2020_weixin_popup\").show().css({ \"width\": option.qrwidth + 35, \"height\": option.qrwidth + 95, \"margin-top\": 0 - (option.qrwidth + 95) / 2, \"margin-left\": 0 - (option.qrwidth + 35) / 2 });\n }\n window.emshare2020 = web;\n})(jQuery);\n\n\n/***/ })\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMjY0NDM3YWIyOWE4MzE1NTZkMDAiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy93ZWl4aW5zaGFyZS5qcyIsIndlYnBhY2s6Ly8vLi9qcy9tb2R1bGVzL2Nzcy5odG1sIiwid2VicGFjazovLy8uL2pzL21vZHVsZXMvc2hhcmUuaHRtbCIsIndlYnBhY2s6Ly8vLi9qcy9tb2R1bGVzL3d4Ym94Lmh0bWwiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy9xcmNvZGUuanMiLCJ3ZWJwYWNrOi8vLy4vanMvc2hhcmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDaEVBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MseUJBQXlCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsaUJBQWlCLHNDQUFzQztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSwrQ0FBK0MseUpBQXlKO0FBQ3hNO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6InNoYXJlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA1KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAyNjQ0MzdhYjI5YTgzMTU1NmQwMCIsIjsgKGZ1bmN0aW9uICgkKSB7XHJcbiAgICB2YXIgY2FsbGJhY2tkYXRhID0ge307XHJcbiAgICB2YXIgbG9hZGluZ2p3ZWl4aW4gPSBmYWxzZSwgbG9hZGluZ2NvbmZpZyA9IGZhbHNlLGlzc2V0PWZhbHNlOztcclxuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdCkge1xyXG4gICAgICAgIC8v5Yik5pat5LiN5piv5b6u5L+h5rWP6KeI5Zmo77yM5LiN5omn6KGM5ZCO57ut5Yqo5L2c5Lul5YeP5bCR6K+35rGCXHJcbiAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICh1YS5tYXRjaCgvTWljcm9NZXNzZW5nZXIvaSkgIT0gXCJtaWNyb21lc3NlbmdlclwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FsbGJhY2tkYXRhID0gb3B0O1xyXG4gICAgICAgIC8v5Yik5pat5piv5ZCm5bey5Yqg6L296L+H5b6u5L+h55qEamRrXHJcbiAgICAgICAgaWYgKHdpbmRvdy53eCkge1xyXG4gICAgICAgICAgICAvL+WIpOaWreaYr+WQpuWIneasoeiuvue9rlxyXG4gICAgICAgICAgICBpZiAoaXNzZXQpIHtcclxuICAgICAgICAgICAgICAgIHNldHNoYXJlZGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2V0Y29uZmlnKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRzaGFyZWRhdGEoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsb2FkandlaXhpbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRjb25maWcoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHNoYXJlZGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBsb2FkandlaXhpbihjYikge1xyXG4gICAgICAgIGlmIChsb2FkaW5nandlaXhpbilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGxvYWRpbmdqd2VpeGluID0gdHJ1ZTtcclxuICAgICAgICAkLmdldFNjcmlwdChcImh0dHBzOi8vcmVzMi53eC5xcS5jb20vb3Blbi9qcy9qd2VpeGluLTEuNC4wLmpzXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY2IoKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Y29uZmlnKGNiKSB7XHJcbiAgICAgICAgaWYgKGxvYWRpbmdjb25maWcpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsb2FkaW5nY29uZmlnID0gdHJ1ZTtcclxuICAgICAgICB2YXIgX3VybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICQuZ2V0SlNPTigoX3VybFs0XSA9PSAncycgPyBcImh0dHBzXCIgOiBcImh0dHBcIikgKyBcIjovL2h5LmVhc3Rtb25leS5jb20vZW13eDIwMTkvR2V0SnNTZGtVaVBhY2thZ2U/cz1cIiArIGVuY29kZVVSSUNvbXBvbmVudChfdXJsKSArIFwiJmNiPT9cIiwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgd3guY29uZmlnKHtcclxuICAgICAgICAgICAgICAgIGRlYnVnOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFwcElkOiBkYXRhLkFwcElkLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBkYXRhLlRpbWVzdGFtcCxcclxuICAgICAgICAgICAgICAgIG5vbmNlU3RyOiBkYXRhLk5vbmNlU3RyLFxyXG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlOiBkYXRhLlNpZ25hdHVyZSxcclxuICAgICAgICAgICAgICAgIGpzQXBpTGlzdDogW1xyXG4gICAgICAgICAgICAgICAgICAgICd1cGRhdGVBcHBNZXNzYWdlU2hhcmVEYXRhJyxcclxuICAgICAgICAgICAgICAgICAgICAndXBkYXRlVGltZWxpbmVTaGFyZURhdGEnXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB3eC5lcnJvcihmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydChKU09OLnN0cmluZ2lmeShyZXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlzc2V0PXRydWU7XHJcbiAgICAgICAgICAgIGNiKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRzaGFyZWRhdGEoKSB7XHJcbiAgICAgICAgd3gucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3eC51cGRhdGVBcHBNZXNzYWdlU2hhcmVEYXRhKGNhbGxiYWNrZGF0YSk7XHJcbiAgICAgICAgICAgIHd4LnVwZGF0ZVRpbWVsaW5lU2hhcmVEYXRhKGNhbGxiYWNrZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZSAmJiBjb25zb2xlLmluZm8oY2FsbGJhY2tkYXRhKTtcclxuICAgIH1cclxufSkoalF1ZXJ5KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL21vZHVsZXMvd2VpeGluc2hhcmUuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIi5lbXNoYXJlMjAyMF9idXR0b25ib3gge1xcclxcbiAgICBoZWlnaHQ6IDI0cHg7XFxyXFxuICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xcclxcbiAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gICAgY2xlYXI6IGJvdGg7XFxyXFxuICB9XFxyXFxuICAuZW1zaGFyZTIwMjBfYnV0dG9uYm94IGEsXFxyXFxuICAuZW1zaGFyZTIwMjBfYnV0dG9uYm94IHNwYW4ge1xcclxcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoV2dBa0FQZi9BUGU3YWZuSnpHM0VaZnJicXU1a2JQT1duT2NvTkpuV2xIREZhZldzci9qQ2VMcTV1Vk81U3ZyZWpmLzc5TnZiMi9uZGhmWEZNdldqTkV5M1FtcG5aL1NkSnZ6aTVQZk1TLzc1K1VTME8vYktSZnZucXZqV2J2bjkrZnZrbmxWVFUrOXpldmpUWk9ZZEtmalVhZTlyYzEyK1ZQNzM0dmI4OWY3MzlnZ0dCdWd5UGZuTWpyM2x1di8rL2tDeU5uakljWjNZbUZpOFVQM3YycUhablBuWmVhZmNvK0h6NFAzbTZKSFRqUHJnbFBiSE92N3k4dnpzdlB6dnh2dm9yMmJCWHZ2ZjRmbkpoK3BFVGVZY0ovU2VvN3ZqdDVmVmt1eFJXdlhDS2VwVUJRUnN5ZVVYSXcyUnVzd0dBRGFweWY3cmJBOU51UDJ3S2dpcit2M1NBdU1sS0JUVS90WVBBQW1Icy96OCsrRVREaHlUdWdPRHNmeHBFQUYzMGZDYUMrMXhMa2wzMUJtYXdmQ05qK3IxK2YzRkFRaVM1dkNIVU9Ra0MrdGVFd1IwemQ4Q0FDMlp1UVJhd3ZhemtPMDBDd0tGMXZ1NUFUdzhQQ3FkeFdXU28vZFdBZ0YvcjYvVzZQYWpGZmI2L1B6dXV2dnA1ZWhLVDNtNTNmNnVBVVMyMVByWngzZko0Lzd5bG11NDEvT1lhQUdaM3Q4MEx2M2pSZEhvOGZiTHpabmI3SS9VNXZkZVFZcW4yOU4vQlcyUTBsNjUxWW5GMmlTRjBsZUd6aGFNdC9lMVNQem4yZmpFcC8zeTUvaFBLVnF0elZldzUvU2plT0ljSHlsdnhJWE80dm5UbE5EYzhmckxiNmFucDB1bnlQbk10UDdiSitIcDl1dHNiZnpBWGNqTnpTaGJ2ZnpjSFpyRjVydmc3TURrN2ZYRExmclkwK2xhWHoreE5mWkhBb0N0NnZiR050N3Y5Zkw0K29GWEYvdnBzSVROZnZuYWZvR2YyS0MzNG1xYzVkM2g0Umw3enVqdjcvdmxwREtoNC9yVHZvYlUvQnFLclAzOS9mU2hwdnJWb29TQ2dwTFI5dkIzZnZpOHdQbk4wUFduUGVwSFVmU2dMZi8rKy96d3kvZlFXV0cvV1J3WkdmWDE5Y0xudjlmdjFkbGZYYkd2cndGV25mYXh0WGJJYjYycnEvZTFYSTNSaVBPUGxXRmZYL3pvemZhcVEvdmZ1UGJJUGYzcTBlNzQ3Zjc0NlAzejlQZk9WUG5JeXZqWGMrY2xNUGk3dnlzbkovbkdnUEI3Z3Nmb3hQLzkrZnpydWVmbTVyZmlzK1lnSy8zKy9mNzgvQzlZbFQ2eE5QLy8vLy8vL3lIL0MxaE5VQ0JFWVhSaFdFMVFQRDk0Y0dGamEyVjBJR0psWjJsdVBTTHZ1NzhpSUdsa1BTSlhOVTB3VFhCRFpXaHBTSHB5WlZONlRsUmplbXRqT1dRaVB6NGdQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlRV1J2WW1VZ1dFMVFJRU52Y21VZ05TNHpMV013TVRFZ05qWXVNVFExTmpZeExDQXlNREV5THpBeUx6QTJMVEUwT2pVMk9qSTNJQ0FnSUNBZ0lDQWlQaUE4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGlBOGNtUm1Pa1JsYzJOeWFYQjBhVzl1SUhKa1pqcGhZbTkxZEQwaUlpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRiRzV6T25odGNEMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMeUlnZUcxd1RVMDZUM0pwWjJsdVlXeEViMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPamd4UlRBek1FSXlOVEZHTlVVMU1URTVOVEpFUVRnNVJqUXhSRVExUWpjeklpQjRiWEJOVFRwRWIyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09rVkVSall5UTBVeFJrTTRNakV4UlRVNVJESkdSRVpCTlRBelF6WXhSamN4SWlCNGJYQk5UVHBKYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2tWRVJqWXlRMFV3UmtNNE1qRXhSVFU1UkRKR1JFWkJOVEF6UXpZeFJqY3hJaUI0YlhBNlEzSmxZWFJ2Y2xSdmIydzlJa0ZrYjJKbElGQm9iM1J2YzJodmNDQkRVellnS0ZkcGJtUnZkM01wSWo0Z1BIaHRjRTFOT2tSbGNtbDJaV1JHY205dElITjBVbVZtT21sdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk9EUkZNRE13UWpJMU1VWTFSVFV4TVRrMU1rUkJPRGxHTkRGRVJEVkNOek1pSUhOMFVtVm1PbVJ2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2T0RGRk1ETXdRakkxTVVZMVJUVXhNVGsxTWtSQk9EbEdOREZFUkRWQ056TWlMejRnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrSUR3dmNtUm1PbEpFUmo0Z1BDOTRPbmh0Y0cxbGRHRStJRHcvZUhCaFkydGxkQ0JsYm1ROUluSWlQejRCLy83OS9QdjYrZmozOXZYMDgvTHg4Ty91N2V6cjZ1bm81K2JsNU9QaTRlRGYzdDNjMjlyWjJOZlcxZFRUMHRIUXo4N056TXZLeWNqSHhzWEV3OExCd0wrK3ZieTd1cm00dDdhMXRMT3lzYkN2cnEyc3E2cXBxS2VtcGFTam9xR2duNTZkbkp1YW1aaVhscFdVazVLUmtJK09qWXlMaW9tSWg0YUZoSU9DZ1lCL2ZuMThlM3A1ZUhkMmRYUnpjbkZ3YjI1dGJHdHFhV2huWm1Wa1kySmhZRjllWFZ4YldsbFlWMVpWVkZOU1VWQlBUazFNUzBwSlNFZEdSVVJEUWtGQVB6NDlQRHM2T1RnM05qVTBNekl4TUM4dUxTd3JLaWtvSnlZbEpDTWlJU0FmSGgwY0d4b1pHQmNXRlJRVEVoRVFEdzROREFzS0NRZ0hCZ1VFQXdJQkFBQWgrUVFCQUFEL0FDd0FBQUFBV2dBa0FBQUkvd0QvQ1J4SXNLREJnd2dUS2x6SXNLSERnbHdpU3B3NGNXQ2lPV3VjYU56SWNjMmNSQVpCT1FJREJRb1lYcVlPVW9yQ3NxWExLS2dhNnZsenlTQWRQZjV5NnR5cGs0N0FPVTRVSlJxcVNKRW5UNENTUG5JeWg2QS9SbERlc1BLSGg5VWJLTDBLVWdyMXBHdWdRSG55Nk13VEtxYkNQMmJhRENKVmtBN1B0ejBGcmxIa3ArNGpWM2o4MmFKYjE4K2FnWGpBcENGRWFLby9Wb1RUU01JeU1Nb1RPR280VVNtRWFaSGxSWGtDUlVsWXFRMGFNNE8rbVBsRDBDM2NVRjd1VUJMcjg1OGNSUm85NFdrRlNKQ2lNWWY4YVB3cjBOSGdOMTM0NU9UVDVRMmhOSXdhUDI2aUpzc1pONVVyZjkxTThGSWxTMmJRSkVuaStjdWdRYVZ6WXYvUmd6UG5nRStmb25qNTFIcU5KeWVQc0FEaTZPU1FxOTBDUWJFaEJGeUpjSDk4S0ZIY1ZTbjljOGR5VFRTUkJYU1lQUGVFWmdSNXR0MkViV3lTaEJtYm9FSFFMUDRnSWtZc3NTQWlIbnFYVU9KRmExb0FJa2NycmNnaGh5ZDJQQ0tIRTNpTUlvY1d2UlhYUlJkS0NKS1RJQUlXcDBSeUJqNHhoU0dHUE5IRUdXZDA1UlYxQW4weFlSSm9XTkxHZHB1WWtRUkJiaUN5QnhWZ2l1RVBDckNnNGtVb2xYZ3hpMEJhQ0tMRkdJOW9BWWsvV054eW95dVFhSUhqUDZyc21FWWFTdGlSa3gxSy9KbEdGMkFJZE9BVWpFNmhZQlpJSXZrRWxQOUl1ZDBnZjF5NTNSOWZhRGlRRzJLQUdXWUNwOFNTd0FCMzVFSEptdjlNa3Nra05VNy9ZZ2NlV1BnemloWjJRRExKSkFKQndhTVNTZ0N6RXpEQUZxcUtva1l5U2daemFxemk3Q3BQM0VHUUdkNzlBWXVXMjVsQlRCSmZjQ2xHRnVCbVFZVmtWT3hCVmg1UnVDRlFIVTVzY1lnZ1Z4eHlDeGF0Yk9GdUpsdlUwV3V4U21peWt5YjhIdnVQRjhsT3Nhd2FhalE2UmJRRVZWS1RIdHB0aDBZbFVwcmg3UjZuaUtIeEhweHdzb2NlV0Z5Q2lyci8xTEZHSFh3SUFvbXVKOWN4eWhoWDFLRXZuOFZHOGxZa3hTWTZzSkZra0FFSHN6MzNiRWdocHhqMHg1U2thTG9KUVdjZ3NrTXdxZnppenc0SkZFTEZLU0ppY1laQVcyaXh4UlZhMkhLRnZWdGtjZ3UrOXZiR2hoS1JqREhjZjJQZ3pBYVJCQWY5TThKOXdOR0hGNFUwLzFHSVFWaFlTZ29wRTFyQ3REK2l4SkZDSEtMVW1zQzRlOERpejliL2RIM0ZGWkR3Y1lVZGR0Z3lSaWFYajUwZkZISzQ3YzhZSlprZU54UUZFZ3pINjMwazJBUXVLY2llNEVHV2ZFRk1wUkxyUVZBV3Y2U3d1UENwakxtSHVBbE1MdEFWVERSL3lJMlBDSEpyODgxZk1aQWprdWpVU1VtZDZDUUprVHYzSWI3NHRBdGZ1K3dIWVlIQ1A0RmZXbEFXaWFjeWgvQ2krS1BIOFlXSVNEbnpUSVF4QnZVQXBKNzFCQklZU1lCaWUyeGdBeFE2WVFkSkxHWWdYcUJFS1NaWWlrYVlyM1pXU0JBVkZtS0o3VlRpZmFsZ25PTGlFQXgvZklzS1lrQUJJckx3ay83Vkp3d3dqR0VNbWRDVWdXQUJLbEJJWUFKTGtwV0NOT0tIUDd5ZzhQOFM5RGVHVk9nZ1ZraWlFcGU0Ukl2TXdSaE00RjhBbVdDTWo0VEVFZHN6Q1VvYUVnZkZEVkViRHdtakdNZEl4akthOFl4b1RLTWExOGpHTnJvUklUemd3UnNKMG9Kb1JBTUE2QmlJRlBiSVJ5a1VwQmg4SkFnTFhqQ0JmcmlnQkRpd3dSZ3ZjSUU1RHFRRnlWQ0FCQ3FRRElKSW9RcVlyQUlnQ0tJSlB3N2tCRC9vaHloSGFVZ1krT01oUGtBQ0VueHdTb2J3NDVVTXVjRkEvS0dBSU1nQUhCVWd4MEEwa2NrcWxHRWdnQ1JJQjJKZ3lGQ0tjZ0lsRU9VQldza1FEYWhTQTlKb3lDdjVnUkIvQUlFQUlsZ0NBUVRTZ2hXVVF3SXlrQUFBQ0ZLR1RFcGhHUUlaeGpBSWdnTlJoc01mQ0JBbE5qcmdBa01xa2lIQ1VLVXFoU0gvVFZnYXhCOEp5T1lTbG1BQWdkeGdCdzU0eGdvVUVBMU9YcklLVW9qRVAyanhTNEl3NEppNnFHYy9TdUNOZmpEQUcvUkFpQW1ta1lzY2NLQVcra1JDTFRqUWdBMzB3QVFJbWVZL2lURFFtcjZEQU85WWdnZ0NBQUI1QktFQ0JWSENRNVZBQ3lYb2JDQ2tUT29MakNDQURMaUFBYnJJQmtGMm9jOVhhQ0FFSStBQURiWktBMmVxY2hjSGthbFRFbERUc3BhVkNQK1FoamtVVUJBd2xHR1BaUUNXUVM2YTFINFlJWmxKbFFVTUNOS0FsQ0pCQit6Z3dBYjgwUU1kcUxJQkE1bW1ZaGZMRHd2a1l3bERFQWNRVUlBQkROd0FHWTh0Z0VLVThOWXlsT0dvQXpGQ1hWOVFqWDc4b0FhaVBLMG84VUVRRC9qMUhCdHdBRlZWNlFGbS96TDJ0aUJZd2hGUWNJeHZVSUFDQzhqSk9sU3dCQlZZQUNHKzRHeGNEOUlCdkk1eUJxSVVRQkZFaVlEcGJyUWd1WGdGRWlLUWczcjB3S3V2eUFVei8zRmJ4aHBnQ0Jqd0J3VXVHRngvTkdPZzgwaEl6aEJ5QWdHUThnQjFKYVVzREVLREVhakRIeHZRQUVxUlFJT0ZpSFVnUXlDQlArNlJnZy9FWXh3cG9FQk9uREZRWmlRa3VkeFFpQkZrZ1lBU1RBQzYrUlVsQXdyaUQybzBJQWNOZ0FBTjNER0NDNFRBd1A0Y3lCR0U0SThIV0dNZjJ4Q2VNbkpDZ0lHMlk3T2dOY2hlQjlLQlFvYjRBQ1NPZ0YvMUdRRVlVNU1nQVJnQ1BGb3dqbmdJN3dQWDhFY0JCaXFPOFJxRUZtSzBRUWJ5aTRCL01oa0NFRkN5S21HYWtBTUx4RWtmN1ZBQk0yN3dpd1U4QUFQT2dBWkI0ZUZsTmFiakJSb1ZzVDRNWW8vdEluWWdEVkN5SE5zYzQxbnVveHNrRUlJS2hqQUVGUkFnQWVsMXBFRlljQkFQSE5vZ0RmREFHQU1DQURzPSk7XFxyXFxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxyXFxuICAgIHdpZHRoOiAxOHB4O1xcclxcbiAgICBoZWlnaHQ6IDE4cHg7XFxyXFxuICAgIHBhZGRpbmc6IDA7XFxyXFxuICAgIG1hcmdpbjogM3B4IDAgMDtcXHJcXG4gICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgIGZsb2F0OiBsZWZ0O1xcclxcbiAgICBtYXJnaW4tbGVmdDogNHB4O1xcclxcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICB9XFxyXFxuICAuZW1zaGFyZTIwMjBfYnV0dG9uYm94IGVtIHtcXHJcXG4gICAgZmxvYXQ6IGxlZnQ7XFxyXFxuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXHJcXG4gICAgZm9udC1mYW1pbHk6IFxcXCJcXFxcNUI4QlxcXFw0RjUzXFxcIjtcXHJcXG4gICAgZm9udC1zaXplOiAxMnB4O1xcclxcbiAgfVxcclxcbiAgLmVtc2hhcmUyMDIwX2J1dHRvbmJveCAuZW1zaGFyZTIwMjBfaWNvbl9ndWJhIHtcXHJcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xcclxcbiAgICBtYXJnaW4tbGVmdDogMDtcXHJcXG4gIH1cXHJcXG4gIC5lbXNoYXJlMjAyMF9idXR0b25ib3ggLmVtc2hhcmUyMDIwX2ljb25fd2VpeGluIHtcXHJcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM2cHggLTE5cHg7XFxyXFxuICB9XFxyXFxuICAuZW1zaGFyZTIwMjBfYnV0dG9uYm94IC5lbXNoYXJlMjAyMF9pY29uX3dlaWJvIHtcXHJcXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjBweDtcXHJcXG4gIH1cXHJcXG4gIC5lbXNoYXJlMjAyMF9idXR0b25ib3ggLmVtc2hhcmUyMDIwX2ljb25fcXpvbmUge1xcclxcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNTZweCAtMjBweDtcXHJcXG4gIH1cXHJcXG4gIC5lbXNoYXJlMjAyMF93ZWl4aW5fcG9wdXAge1xcclxcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxuICAgIGxlZnQ6IDUwJTtcXHJcXG4gICAgdG9wOiA1MCU7XFxyXFxuICAgIHdpZHRoOiAyNDBweDtcXHJcXG4gICAgaGVpZ2h0OiAzMDBweDtcXHJcXG4gICAgei1pbmRleDogMTEwMDE7XFxyXFxuICAgIGZvbnQtc2l6ZTogMTJweDtcXHJcXG4gICAgcGFkZGluZzogMTBweCAxM3B4IDEwcHggMTBweDtcXHJcXG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcXHJcXG4gICAgYm9yZGVyLXdpZHRoOiAxcHg7XFxyXFxuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XFxyXFxuICAgIGJvcmRlci1jb2xvcjogI2Q4ZDhkODtcXHJcXG4gICAgYm9yZGVyLWltYWdlOiBpbml0aWFsO1xcclxcbiAgICBtYXJnaW4tdG9wOiAtMTYwcHg7XFxyXFxuICAgIG1hcmdpbi1sZWZ0OiAtMTMwcHg7XFxyXFxuICB9XFxyXFxuICAuZW1zaGFyZTIwMjBfd2VpeGluX3BvcHVwIC5lbXNoYXJlMjAyMF93ZWl4aW5fcG9wdXBfaGVhZCB7XFxyXFxuICAgIGZvbnQtc2l6ZTogMTJweDtcXHJcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxyXFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxyXFxuICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xcclxcbiAgICBoZWlnaHQ6IDE2cHg7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG4gICAgY29sb3I6ICMwMDAwMDA7XFxyXFxuICB9XFxyXFxuICAuZW1zaGFyZTIwMjBfd2VpeGluX3BvcHVwIC5lbXNoYXJlMjAyMF93ZWl4aW5fcG9wdXBfaGVhZCAuZW1zaGFyZTIwMjBfd2VpeGluX3BvcHVwX2Nsb3NlIHtcXHJcXG4gICAgd2lkdGg6IDE2cHg7XFxyXFxuICAgIGhlaWdodDogMTZweDtcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICByaWdodDogMHB4O1xcclxcbiAgICB0b3A6IDBweDtcXHJcXG4gICAgY29sb3I6ICM5OTk5OTk7XFxyXFxuICAgIGZvbnQtc2l6ZTogMTZweDtcXHJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcbiAgfVxcclxcbiAgLmVtc2hhcmUyMDIwX3dlaXhpbl9wb3B1cCAjZW1zaGFyZTIwMjBfd2VpeGluX3BvcHVwX21haW4ge1xcclxcbiAgICBtaW4taGVpZ2h0OiAxNTBweDtcXHJcXG4gICAgcGFkZGluZzogMTVweCAxOHB4O1xcclxcbiAgfVxcclxcbiAgLmVtc2hhcmUyMDIwX3dlaXhpbl9wb3B1cCAuZW1zaGFyZTIwMjBfd2VpeGluX3BvcHVwX2Zvb3Qge1xcclxcbiAgICBmb250LXNpemU6IDEycHg7XFxyXFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxyXFxuICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xcclxcbiAgICBjb2xvcjogIzY2NjY2NjtcXHJcXG4gIH1cXHJcXG4gIFwiXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9qcy9tb2R1bGVzL2Nzcy5odG1sXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJlbXNoYXJlMjAyMF9idXR0b25ib3hcXFwiPlxcclxcbiAgICA8ZW0+5YiG5Lqr5Yiw77yaPC9lbT5cXHJcXG4gICAgPGEgaHJlZj1cXFwiamF2YWNyaXB0OnZvaWQoMCk7XFxcIiBjbGFzcz1cXFwiZW1zaGFyZTIwMjBfaWNvbl9ndWJhXFxcIiB0aXRsZT1cXFwi5YiG5Lqr5Yiw6IKh5ZCnXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCI+PC9hPlxcclxcbiAgICA8c3BhbiBjbGFzcz1cXFwiZW1zaGFyZTIwMjBfaWNvbl93ZWl4aW5cXFwiIHRpdGxlPVxcXCLliIbkuqvliLDlvq7kv6FcXFwiPjwvc3Bhbj5cXHJcXG4gICAgPGEgaHJlZj1cXFwiamF2YWNyaXB0OnZvaWQoMCk7XFxcIiBjbGFzcz1cXFwiZW1zaGFyZTIwMjBfaWNvbl93ZWlib1xcXCIgdGl0bGU9XFxcIuWIhuS6q+WIsOaWsOa1quW+ruWNmlxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiPjwvYT5cXHJcXG4gICAgPGEgaHJlZj1cXFwiamF2YWNyaXB0OnZvaWQoMCk7XFxcIiBjbGFzcz1cXFwiZW1zaGFyZTIwMjBfaWNvbl9xem9uZVxcXCIgdGl0bGU9XFxcIuWIhuS6q+WIsFFR56m66Ze0XFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCI+PC9hPlxcclxcbjwvZGl2PlwiXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9qcy9tb2R1bGVzL3NoYXJlLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxkaXYgY2xhc3M9XFxcImVtc2hhcmUyMDIwX3dlaXhpbl9wb3B1cFxcXCI+XFxyXFxuICAgIDxkaXYgY2xhc3M9XFxcImVtc2hhcmUyMDIwX3dlaXhpbl9wb3B1cF9oZWFkXFxcIj5cXHJcXG4gICAgICAgIDxzcGFuPuWIhuS6q+WIsOW+ruS/oeaci+WPi+WciDwvc3Bhbj5cXHJcXG4gICAgICAgIDxhIGhyZWY9XFxcIiNcXFwiIG9uY2xpY2s9XFxcInJldHVybiBmYWxzZTtcXFwiIGNsYXNzPVxcXCJlbXNoYXJlMjAyMF93ZWl4aW5fcG9wdXBfY2xvc2VcXFwiPsOXPC9hPlxcclxcbiAgICA8L2Rpdj5cXHJcXG4gICAgPGRpdiBpZD1cXFwiZW1zaGFyZTIwMjBfd2VpeGluX3BvcHVwX21haW5cXFwiPlxcclxcbiAgICA8L2Rpdj5cXHJcXG4gICAgPGRpdiBjbGFzcz1cXFwiZW1zaGFyZTIwMjBfd2VpeGluX3BvcHVwX2Zvb3RcXFwiPlxcclxcbiAgICAgICAg5omT5byA5b6u5L+h77yM54K55Ye75bqV6YOo55qE4oCc5Y+R546w4oCd77yMPGJyPuS9v+eUqOKAnOaJq+S4gOaJq+KAneWNs+WPr+Wwhue9kemhteWIhuS6q+iHs+aci+WPi+WciOOAglxcclxcbiAgICA8L2Rpdj5cXHJcXG48L2Rpdj5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vanMvbW9kdWxlcy93eGJveC5odG1sXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKlxyXG4gKiBAZmlsZW92ZXJ2aWV3XHJcbiAqIC0gVXNpbmcgdGhlICdRUkNvZGUgZm9yIEphdmFzY3JpcHQgbGlicmFyeSdcclxuICogLSBGaXhlZCBkYXRhc2V0IG9mICdRUkNvZGUgZm9yIEphdmFzY3JpcHQgbGlicmFyeScgZm9yIHN1cHBvcnQgZnVsbC1zcGVjLlxyXG4gKiAtIHRoaXMgbGlicmFyeSBoYXMgbm8gZGVwZW5kZW5jaWVzLlxyXG4gKiBcclxuICogQGF1dGhvciBkYXZpZHNoaW1qc1xyXG4gKiBAc2VlIDxhIGhyZWY9XCJodHRwOi8vd3d3LmQtcHJvamVjdC5jb20vXCIgdGFyZ2V0PVwiX2JsYW5rXCI+aHR0cDovL3d3dy5kLXByb2plY3QuY29tLzwvYT5cclxuICogQHNlZSA8YSBocmVmPVwiaHR0cDovL2plcm9tZWV0aWVubmUuZ2l0aHViLmNvbS9qcXVlcnktcXJjb2RlL1wiIHRhcmdldD1cIl9ibGFua1wiPmh0dHA6Ly9qZXJvbWVldGllbm5lLmdpdGh1Yi5jb20vanF1ZXJ5LXFyY29kZS88L2E+XHJcbiAqL1xyXG52YXIgUVJDb2RlO1xyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gUVJDb2RlIGZvciBKYXZhU2NyaXB0XHJcbi8vXHJcbi8vIENvcHlyaWdodCAoYykgMjAwOSBLYXp1aGlrbyBBcmFzZVxyXG4vL1xyXG4vLyBVUkw6IGh0dHA6Ly93d3cuZC1wcm9qZWN0LmNvbS9cclxuLy9cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxyXG4vLyAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXHJcbi8vXHJcbi8vIFRoZSB3b3JkIFwiUVIgQ29kZVwiIGlzIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFxyXG4vLyBERU5TTyBXQVZFIElOQ09SUE9SQVRFRFxyXG4vLyAgIGh0dHA6Ly93d3cuZGVuc28td2F2ZS5jb20vcXJjb2RlL2ZhcXBhdGVudC1lLmh0bWxcclxuLy9cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gUVI4Yml0Qnl0ZShkYXRhKSB7XHJcbiAgICB0aGlzLm1vZGUgPSBRUk1vZGUuTU9ERV84QklUX0JZVEU7XHJcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5wYXJzZWREYXRhID0gW107XHJcblxyXG4gICAgLy8gQWRkZWQgdG8gc3VwcG9ydCBVVEYtOCBDaGFyYWN0ZXJzXHJcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuZGF0YS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICB2YXIgYnl0ZUFycmF5ID0gW107XHJcbiAgICAgICAgdmFyIGNvZGUgPSB0aGlzLmRhdGEuY2hhckNvZGVBdChpKTtcclxuXHJcbiAgICAgICAgaWYgKGNvZGUgPiAweDEwMDAwKSB7XHJcbiAgICAgICAgICAgIGJ5dGVBcnJheVswXSA9IDB4RjAgfCAoKGNvZGUgJiAweDFDMDAwMCkgPj4+IDE4KTtcclxuICAgICAgICAgICAgYnl0ZUFycmF5WzFdID0gMHg4MCB8ICgoY29kZSAmIDB4M0YwMDApID4+PiAxMik7XHJcbiAgICAgICAgICAgIGJ5dGVBcnJheVsyXSA9IDB4ODAgfCAoKGNvZGUgJiAweEZDMCkgPj4+IDYpO1xyXG4gICAgICAgICAgICBieXRlQXJyYXlbM10gPSAweDgwIHwgKGNvZGUgJiAweDNGKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPiAweDgwMCkge1xyXG4gICAgICAgICAgICBieXRlQXJyYXlbMF0gPSAweEUwIHwgKChjb2RlICYgMHhGMDAwKSA+Pj4gMTIpO1xyXG4gICAgICAgICAgICBieXRlQXJyYXlbMV0gPSAweDgwIHwgKChjb2RlICYgMHhGQzApID4+PiA2KTtcclxuICAgICAgICAgICAgYnl0ZUFycmF5WzJdID0gMHg4MCB8IChjb2RlICYgMHgzRik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID4gMHg4MCkge1xyXG4gICAgICAgICAgICBieXRlQXJyYXlbMF0gPSAweEMwIHwgKChjb2RlICYgMHg3QzApID4+PiA2KTtcclxuICAgICAgICAgICAgYnl0ZUFycmF5WzFdID0gMHg4MCB8IChjb2RlICYgMHgzRik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnl0ZUFycmF5WzBdID0gY29kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGFyc2VkRGF0YS5wdXNoKGJ5dGVBcnJheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYXJzZWREYXRhID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgdGhpcy5wYXJzZWREYXRhKTtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJzZWREYXRhLmxlbmd0aCAhPSB0aGlzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZWREYXRhLnVuc2hpZnQoMTkxKTtcclxuICAgICAgICB0aGlzLnBhcnNlZERhdGEudW5zaGlmdCgxODcpO1xyXG4gICAgICAgIHRoaXMucGFyc2VkRGF0YS51bnNoaWZ0KDIzOSk7XHJcbiAgICB9XHJcbn1cclxuXHJcblFSOGJpdEJ5dGUucHJvdG90eXBlID0ge1xyXG4gICAgZ2V0TGVuZ3RoOiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VkRGF0YS5sZW5ndGg7XHJcbiAgICB9LFxyXG4gICAgd3JpdGU6IGZ1bmN0aW9uIChidWZmZXIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMucGFyc2VkRGF0YS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgYnVmZmVyLnB1dCh0aGlzLnBhcnNlZERhdGFbaV0sIDgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIFFSQ29kZU1vZGVsKHR5cGVOdW1iZXIsIGVycm9yQ29ycmVjdExldmVsKSB7XHJcbiAgICB0aGlzLnR5cGVOdW1iZXIgPSB0eXBlTnVtYmVyO1xyXG4gICAgdGhpcy5lcnJvckNvcnJlY3RMZXZlbCA9IGVycm9yQ29ycmVjdExldmVsO1xyXG4gICAgdGhpcy5tb2R1bGVzID0gbnVsbDtcclxuICAgIHRoaXMubW9kdWxlQ291bnQgPSAwO1xyXG4gICAgdGhpcy5kYXRhQ2FjaGUgPSBudWxsO1xyXG4gICAgdGhpcy5kYXRhTGlzdCA9IFtdO1xyXG59XHJcblxyXG5RUkNvZGVNb2RlbC5wcm90b3R5cGUgPSB7XHJcbiAgICBhZGREYXRhOiBmdW5jdGlvbiAoZGF0YSkgeyB2YXIgbmV3RGF0YSA9IG5ldyBRUjhiaXRCeXRlKGRhdGEpOyB0aGlzLmRhdGFMaXN0LnB1c2gobmV3RGF0YSk7IHRoaXMuZGF0YUNhY2hlID0gbnVsbDsgfSwgaXNEYXJrOiBmdW5jdGlvbiAocm93LCBjb2wpIHtcclxuICAgICAgICBpZiAocm93IDwgMCB8fCB0aGlzLm1vZHVsZUNvdW50IDw9IHJvdyB8fCBjb2wgPCAwIHx8IHRoaXMubW9kdWxlQ291bnQgPD0gY29sKSB7IHRocm93IG5ldyBFcnJvcihyb3cgKyBcIixcIiArIGNvbCk7IH1cclxuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVzW3Jvd11bY29sXTtcclxuICAgIH0sIGdldE1vZHVsZUNvdW50OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm1vZHVsZUNvdW50OyB9LCBtYWtlOiBmdW5jdGlvbiAoKSB7IHRoaXMubWFrZUltcGwoZmFsc2UsIHRoaXMuZ2V0QmVzdE1hc2tQYXR0ZXJuKCkpOyB9LCBtYWtlSW1wbDogZnVuY3Rpb24gKHRlc3QsIG1hc2tQYXR0ZXJuKSB7XHJcbiAgICB0aGlzLm1vZHVsZUNvdW50ID0gdGhpcy50eXBlTnVtYmVyICogNCArIDE3OyB0aGlzLm1vZHVsZXMgPSBuZXcgQXJyYXkodGhpcy5tb2R1bGVDb3VudCk7IGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IHRoaXMubW9kdWxlQ291bnQ7IHJvdysrKSB7IHRoaXMubW9kdWxlc1tyb3ddID0gbmV3IEFycmF5KHRoaXMubW9kdWxlQ291bnQpOyBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCB0aGlzLm1vZHVsZUNvdW50OyBjb2wrKykgeyB0aGlzLm1vZHVsZXNbcm93XVtjb2xdID0gbnVsbDsgfSB9XHJcbiAgICAgICAgdGhpcy5zZXR1cFBvc2l0aW9uUHJvYmVQYXR0ZXJuKDAsIDApOyB0aGlzLnNldHVwUG9zaXRpb25Qcm9iZVBhdHRlcm4odGhpcy5tb2R1bGVDb3VudCAtIDcsIDApOyB0aGlzLnNldHVwUG9zaXRpb25Qcm9iZVBhdHRlcm4oMCwgdGhpcy5tb2R1bGVDb3VudCAtIDcpOyB0aGlzLnNldHVwUG9zaXRpb25BZGp1c3RQYXR0ZXJuKCk7IHRoaXMuc2V0dXBUaW1pbmdQYXR0ZXJuKCk7IHRoaXMuc2V0dXBUeXBlSW5mbyh0ZXN0LCBtYXNrUGF0dGVybik7IGlmICh0aGlzLnR5cGVOdW1iZXIgPj0gNykgeyB0aGlzLnNldHVwVHlwZU51bWJlcih0ZXN0KTsgfVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGFDYWNoZSA9PSBudWxsKSB7IHRoaXMuZGF0YUNhY2hlID0gUVJDb2RlTW9kZWwuY3JlYXRlRGF0YSh0aGlzLnR5cGVOdW1iZXIsIHRoaXMuZXJyb3JDb3JyZWN0TGV2ZWwsIHRoaXMuZGF0YUxpc3QpOyB9XHJcbiAgICAgICAgdGhpcy5tYXBEYXRhKHRoaXMuZGF0YUNhY2hlLCBtYXNrUGF0dGVybik7XHJcbiAgICB9LCBzZXR1cFBvc2l0aW9uUHJvYmVQYXR0ZXJuOiBmdW5jdGlvbiAocm93LCBjb2wpIHsgZm9yICh2YXIgciA9IC0xOyByIDw9IDc7IHIrKykgeyBpZiAocm93ICsgciA8PSAtMSB8fCB0aGlzLm1vZHVsZUNvdW50IDw9IHJvdyArIHIpIGNvbnRpbnVlOyBmb3IgKHZhciBjID0gLTE7IGMgPD0gNzsgYysrKSB7IGlmIChjb2wgKyBjIDw9IC0xIHx8IHRoaXMubW9kdWxlQ291bnQgPD0gY29sICsgYykgY29udGludWU7IGlmICgoMCA8PSByICYmIHIgPD0gNiAmJiAoYyA9PSAwIHx8IGMgPT0gNikpIHx8ICgwIDw9IGMgJiYgYyA8PSA2ICYmIChyID09IDAgfHwgciA9PSA2KSkgfHwgKDIgPD0gciAmJiByIDw9IDQgJiYgMiA8PSBjICYmIGMgPD0gNCkpIHsgdGhpcy5tb2R1bGVzW3JvdyArIHJdW2NvbCArIGNdID0gdHJ1ZTsgfSBlbHNlIHsgdGhpcy5tb2R1bGVzW3JvdyArIHJdW2NvbCArIGNdID0gZmFsc2U7IH0gfSB9IH0sIGdldEJlc3RNYXNrUGF0dGVybjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtaW5Mb3N0UG9pbnQgPSAwOyB2YXIgcGF0dGVybiA9IDA7IGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7IHRoaXMubWFrZUltcGwodHJ1ZSwgaSk7IHZhciBsb3N0UG9pbnQgPSBRUlV0aWwuZ2V0TG9zdFBvaW50KHRoaXMpOyBpZiAoaSA9PSAwIHx8IG1pbkxvc3RQb2ludCA+IGxvc3RQb2ludCkgeyBtaW5Mb3N0UG9pbnQgPSBsb3N0UG9pbnQ7IHBhdHRlcm4gPSBpOyB9IH1cclxuICAgICAgICByZXR1cm4gcGF0dGVybjtcclxuICAgIH0sIGNyZWF0ZU1vdmllQ2xpcDogZnVuY3Rpb24gKHRhcmdldF9tYywgaW5zdGFuY2VfbmFtZSwgZGVwdGgpIHtcclxuICAgICAgICB2YXIgcXJfbWMgPSB0YXJnZXRfbWMuY3JlYXRlRW1wdHlNb3ZpZUNsaXAoaW5zdGFuY2VfbmFtZSwgZGVwdGgpOyB2YXIgY3MgPSAxOyB0aGlzLm1ha2UoKTsgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgdGhpcy5tb2R1bGVzLmxlbmd0aDsgcm93KyspIHsgdmFyIHkgPSByb3cgKiBjczsgZm9yICh2YXIgY29sID0gMDsgY29sIDwgdGhpcy5tb2R1bGVzW3Jvd10ubGVuZ3RoOyBjb2wrKykgeyB2YXIgeCA9IGNvbCAqIGNzOyB2YXIgZGFyayA9IHRoaXMubW9kdWxlc1tyb3ddW2NvbF07IGlmIChkYXJrKSB7IHFyX21jLmJlZ2luRmlsbCgwLCAxMDApOyBxcl9tYy5tb3ZlVG8oeCwgeSk7IHFyX21jLmxpbmVUbyh4ICsgY3MsIHkpOyBxcl9tYy5saW5lVG8oeCArIGNzLCB5ICsgY3MpOyBxcl9tYy5saW5lVG8oeCwgeSArIGNzKTsgcXJfbWMuZW5kRmlsbCgpOyB9IH0gfVxyXG4gICAgICAgIHJldHVybiBxcl9tYztcclxuICAgIH0sIHNldHVwVGltaW5nUGF0dGVybjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIHIgPSA4OyByIDwgdGhpcy5tb2R1bGVDb3VudCAtIDg7IHIrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2R1bGVzW3JdWzZdICE9IG51bGwpIHsgY29udGludWU7IH1cclxuICAgICAgICAgICAgdGhpcy5tb2R1bGVzW3JdWzZdID0gKHIgJSAyID09IDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBjID0gODsgYyA8IHRoaXMubW9kdWxlQ291bnQgLSA4OyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kdWxlc1s2XVtjXSAhPSBudWxsKSB7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kdWxlc1s2XVtjXSA9IChjICUgMiA9PSAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBzZXR1cFBvc2l0aW9uQWRqdXN0UGF0dGVybjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwb3MgPSBRUlV0aWwuZ2V0UGF0dGVyblBvc2l0aW9uKHRoaXMudHlwZU51bWJlcik7IGZvciAodmFyIGkgPSAwOyBpIDwgcG9zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gcG9zW2ldOyB2YXIgY29sID0gcG9zW2pdOyBpZiAodGhpcy5tb2R1bGVzW3Jvd11bY29sXSAhPSBudWxsKSB7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByID0gLTI7IHIgPD0gMjsgcisrKSB7IGZvciAodmFyIGMgPSAtMjsgYyA8PSAyOyBjKyspIHsgaWYgKHIgPT0gLTIgfHwgciA9PSAyIHx8IGMgPT0gLTIgfHwgYyA9PSAyIHx8IChyID09IDAgJiYgYyA9PSAwKSkgeyB0aGlzLm1vZHVsZXNbcm93ICsgcl1bY29sICsgY10gPSB0cnVlOyB9IGVsc2UgeyB0aGlzLm1vZHVsZXNbcm93ICsgcl1bY29sICsgY10gPSBmYWxzZTsgfSB9IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sIHNldHVwVHlwZU51bWJlcjogZnVuY3Rpb24gKHRlc3QpIHtcclxuICAgICAgICB2YXIgYml0cyA9IFFSVXRpbC5nZXRCQ0hUeXBlTnVtYmVyKHRoaXMudHlwZU51bWJlcik7IGZvciAodmFyIGkgPSAwOyBpIDwgMTg7IGkrKykgeyB2YXIgbW9kID0gKCF0ZXN0ICYmICgoYml0cyA+PiBpKSAmIDEpID09IDEpOyB0aGlzLm1vZHVsZXNbTWF0aC5mbG9vcihpIC8gMyldW2kgJSAzICsgdGhpcy5tb2R1bGVDb3VudCAtIDggLSAzXSA9IG1vZDsgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTg7IGkrKykgeyB2YXIgbW9kID0gKCF0ZXN0ICYmICgoYml0cyA+PiBpKSAmIDEpID09IDEpOyB0aGlzLm1vZHVsZXNbaSAlIDMgKyB0aGlzLm1vZHVsZUNvdW50IC0gOCAtIDNdW01hdGguZmxvb3IoaSAvIDMpXSA9IG1vZDsgfVxyXG4gICAgfSwgc2V0dXBUeXBlSW5mbzogZnVuY3Rpb24gKHRlc3QsIG1hc2tQYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFyIGRhdGEgPSAodGhpcy5lcnJvckNvcnJlY3RMZXZlbCA8PCAzKSB8IG1hc2tQYXR0ZXJuOyB2YXIgYml0cyA9IFFSVXRpbC5nZXRCQ0hUeXBlSW5mbyhkYXRhKTsgZm9yICh2YXIgaSA9IDA7IGkgPCAxNTsgaSsrKSB7IHZhciBtb2QgPSAoIXRlc3QgJiYgKChiaXRzID4+IGkpICYgMSkgPT0gMSk7IGlmIChpIDwgNikgeyB0aGlzLm1vZHVsZXNbaV1bOF0gPSBtb2Q7IH0gZWxzZSBpZiAoaSA8IDgpIHsgdGhpcy5tb2R1bGVzW2kgKyAxXVs4XSA9IG1vZDsgfSBlbHNlIHsgdGhpcy5tb2R1bGVzW3RoaXMubW9kdWxlQ291bnQgLSAxNSArIGldWzhdID0gbW9kOyB9IH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE1OyBpKyspIHsgdmFyIG1vZCA9ICghdGVzdCAmJiAoKGJpdHMgPj4gaSkgJiAxKSA9PSAxKTsgaWYgKGkgPCA4KSB7IHRoaXMubW9kdWxlc1s4XVt0aGlzLm1vZHVsZUNvdW50IC0gaSAtIDFdID0gbW9kOyB9IGVsc2UgaWYgKGkgPCA5KSB7IHRoaXMubW9kdWxlc1s4XVsxNSAtIGkgLSAxICsgMV0gPSBtb2Q7IH0gZWxzZSB7IHRoaXMubW9kdWxlc1s4XVsxNSAtIGkgLSAxXSA9IG1vZDsgfSB9XHJcbiAgICAgICAgdGhpcy5tb2R1bGVzW3RoaXMubW9kdWxlQ291bnQgLSA4XVs4XSA9ICghdGVzdCk7XHJcbiAgICB9LCBtYXBEYXRhOiBmdW5jdGlvbiAoZGF0YSwgbWFza1BhdHRlcm4pIHtcclxuICAgICAgICB2YXIgaW5jID0gLTE7IHZhciByb3cgPSB0aGlzLm1vZHVsZUNvdW50IC0gMTsgdmFyIGJpdEluZGV4ID0gNzsgdmFyIGJ5dGVJbmRleCA9IDA7IGZvciAodmFyIGNvbCA9IHRoaXMubW9kdWxlQ291bnQgLSAxOyBjb2wgPiAwOyBjb2wgLT0gMikge1xyXG4gICAgICAgICAgICBpZiAoY29sID09IDYpIGNvbC0tOyB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCAyOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2R1bGVzW3Jvd11bY29sIC0gY10gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGFyayA9IGZhbHNlOyBpZiAoYnl0ZUluZGV4IDwgZGF0YS5sZW5ndGgpIHsgZGFyayA9ICgoKGRhdGFbYnl0ZUluZGV4XSA+Pj4gYml0SW5kZXgpICYgMSkgPT0gMSk7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSBRUlV0aWwuZ2V0TWFzayhtYXNrUGF0dGVybiwgcm93LCBjb2wgLSBjKTsgaWYgKG1hc2spIHsgZGFyayA9ICFkYXJrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlc1tyb3ddW2NvbCAtIGNdID0gZGFyazsgYml0SW5kZXgtLTsgaWYgKGJpdEluZGV4ID09IC0xKSB7IGJ5dGVJbmRleCsrOyBiaXRJbmRleCA9IDc7IH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByb3cgKz0gaW5jOyBpZiAocm93IDwgMCB8fCB0aGlzLm1vZHVsZUNvdW50IDw9IHJvdykgeyByb3cgLT0gaW5jOyBpbmMgPSAtaW5jOyBicmVhazsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59OyBRUkNvZGVNb2RlbC5QQUQwID0gMHhFQzsgUVJDb2RlTW9kZWwuUEFEMSA9IDB4MTE7IFFSQ29kZU1vZGVsLmNyZWF0ZURhdGEgPSBmdW5jdGlvbiAodHlwZU51bWJlciwgZXJyb3JDb3JyZWN0TGV2ZWwsIGRhdGFMaXN0KSB7XHJcbiAgICB2YXIgcnNCbG9ja3MgPSBRUlJTQmxvY2suZ2V0UlNCbG9ja3ModHlwZU51bWJlciwgZXJyb3JDb3JyZWN0TGV2ZWwpOyB2YXIgYnVmZmVyID0gbmV3IFFSQml0QnVmZmVyKCk7IGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YUxpc3QubGVuZ3RoOyBpKyspIHsgdmFyIGRhdGEgPSBkYXRhTGlzdFtpXTsgYnVmZmVyLnB1dChkYXRhLm1vZGUsIDQpOyBidWZmZXIucHV0KGRhdGEuZ2V0TGVuZ3RoKCksIFFSVXRpbC5nZXRMZW5ndGhJbkJpdHMoZGF0YS5tb2RlLCB0eXBlTnVtYmVyKSk7IGRhdGEud3JpdGUoYnVmZmVyKTsgfVxyXG4gICAgdmFyIHRvdGFsRGF0YUNvdW50ID0gMDsgZm9yICh2YXIgaSA9IDA7IGkgPCByc0Jsb2Nrcy5sZW5ndGg7IGkrKykgeyB0b3RhbERhdGFDb3VudCArPSByc0Jsb2Nrc1tpXS5kYXRhQ291bnQ7IH1cclxuICAgIGlmIChidWZmZXIuZ2V0TGVuZ3RoSW5CaXRzKCkgPiB0b3RhbERhdGFDb3VudCAqIDgpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb2RlIGxlbmd0aCBvdmVyZmxvdy4gKFwiXHJcbiAgICAgICAgICAgICsgYnVmZmVyLmdldExlbmd0aEluQml0cygpXHJcbiAgICAgICAgICAgICsgXCI+XCJcclxuICAgICAgICAgICAgKyB0b3RhbERhdGFDb3VudCAqIDhcclxuICAgICAgICAgICAgKyBcIilcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoYnVmZmVyLmdldExlbmd0aEluQml0cygpICsgNCA8PSB0b3RhbERhdGFDb3VudCAqIDgpIHsgYnVmZmVyLnB1dCgwLCA0KTsgfVxyXG4gICAgd2hpbGUgKGJ1ZmZlci5nZXRMZW5ndGhJbkJpdHMoKSAlIDggIT0gMCkgeyBidWZmZXIucHV0Qml0KGZhbHNlKTsgfVxyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAoYnVmZmVyLmdldExlbmd0aEluQml0cygpID49IHRvdGFsRGF0YUNvdW50ICogOCkgeyBicmVhazsgfVxyXG4gICAgICAgIGJ1ZmZlci5wdXQoUVJDb2RlTW9kZWwuUEFEMCwgOCk7IGlmIChidWZmZXIuZ2V0TGVuZ3RoSW5CaXRzKCkgPj0gdG90YWxEYXRhQ291bnQgKiA4KSB7IGJyZWFrOyB9XHJcbiAgICAgICAgYnVmZmVyLnB1dChRUkNvZGVNb2RlbC5QQUQxLCA4KTtcclxuICAgIH1cclxuICAgIHJldHVybiBRUkNvZGVNb2RlbC5jcmVhdGVCeXRlcyhidWZmZXIsIHJzQmxvY2tzKTtcclxufTsgUVJDb2RlTW9kZWwuY3JlYXRlQnl0ZXMgPSBmdW5jdGlvbiAoYnVmZmVyLCByc0Jsb2Nrcykge1xyXG4gICAgdmFyIG9mZnNldCA9IDA7IHZhciBtYXhEY0NvdW50ID0gMDsgdmFyIG1heEVjQ291bnQgPSAwOyB2YXIgZGNkYXRhID0gbmV3IEFycmF5KHJzQmxvY2tzLmxlbmd0aCk7IHZhciBlY2RhdGEgPSBuZXcgQXJyYXkocnNCbG9ja3MubGVuZ3RoKTsgZm9yICh2YXIgciA9IDA7IHIgPCByc0Jsb2Nrcy5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgIHZhciBkY0NvdW50ID0gcnNCbG9ja3Nbcl0uZGF0YUNvdW50OyB2YXIgZWNDb3VudCA9IHJzQmxvY2tzW3JdLnRvdGFsQ291bnQgLSBkY0NvdW50OyBtYXhEY0NvdW50ID0gTWF0aC5tYXgobWF4RGNDb3VudCwgZGNDb3VudCk7IG1heEVjQ291bnQgPSBNYXRoLm1heChtYXhFY0NvdW50LCBlY0NvdW50KTsgZGNkYXRhW3JdID0gbmV3IEFycmF5KGRjQ291bnQpOyBmb3IgKHZhciBpID0gMDsgaSA8IGRjZGF0YVtyXS5sZW5ndGg7IGkrKykgeyBkY2RhdGFbcl1baV0gPSAweGZmICYgYnVmZmVyLmJ1ZmZlcltpICsgb2Zmc2V0XTsgfVxyXG4gICAgICAgIG9mZnNldCArPSBkY0NvdW50OyB2YXIgcnNQb2x5ID0gUVJVdGlsLmdldEVycm9yQ29ycmVjdFBvbHlub21pYWwoZWNDb3VudCk7IHZhciByYXdQb2x5ID0gbmV3IFFSUG9seW5vbWlhbChkY2RhdGFbcl0sIHJzUG9seS5nZXRMZW5ndGgoKSAtIDEpOyB2YXIgbW9kUG9seSA9IHJhd1BvbHkubW9kKHJzUG9seSk7IGVjZGF0YVtyXSA9IG5ldyBBcnJheShyc1BvbHkuZ2V0TGVuZ3RoKCkgLSAxKTsgZm9yICh2YXIgaSA9IDA7IGkgPCBlY2RhdGFbcl0ubGVuZ3RoOyBpKyspIHsgdmFyIG1vZEluZGV4ID0gaSArIG1vZFBvbHkuZ2V0TGVuZ3RoKCkgLSBlY2RhdGFbcl0ubGVuZ3RoOyBlY2RhdGFbcl1baV0gPSAobW9kSW5kZXggPj0gMCkgPyBtb2RQb2x5LmdldChtb2RJbmRleCkgOiAwOyB9XHJcbiAgICB9XHJcbiAgICB2YXIgdG90YWxDb2RlQ291bnQgPSAwOyBmb3IgKHZhciBpID0gMDsgaSA8IHJzQmxvY2tzLmxlbmd0aDsgaSsrKSB7IHRvdGFsQ29kZUNvdW50ICs9IHJzQmxvY2tzW2ldLnRvdGFsQ291bnQ7IH1cclxuICAgIHZhciBkYXRhID0gbmV3IEFycmF5KHRvdGFsQ29kZUNvdW50KTsgdmFyIGluZGV4ID0gMDsgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhEY0NvdW50OyBpKyspIHsgZm9yICh2YXIgciA9IDA7IHIgPCByc0Jsb2Nrcy5sZW5ndGg7IHIrKykgeyBpZiAoaSA8IGRjZGF0YVtyXS5sZW5ndGgpIHsgZGF0YVtpbmRleCsrXSA9IGRjZGF0YVtyXVtpXTsgfSB9IH1cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4RWNDb3VudDsgaSsrKSB7IGZvciAodmFyIHIgPSAwOyByIDwgcnNCbG9ja3MubGVuZ3RoOyByKyspIHsgaWYgKGkgPCBlY2RhdGFbcl0ubGVuZ3RoKSB7IGRhdGFbaW5kZXgrK10gPSBlY2RhdGFbcl1baV07IH0gfSB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxufTsgdmFyIFFSTW9kZSA9IHsgTU9ERV9OVU1CRVI6IDEgPDwgMCwgTU9ERV9BTFBIQV9OVU06IDEgPDwgMSwgTU9ERV84QklUX0JZVEU6IDEgPDwgMiwgTU9ERV9LQU5KSTogMSA8PCAzIH07IHZhciBRUkVycm9yQ29ycmVjdExldmVsID0geyBMOiAxLCBNOiAwLCBROiAzLCBIOiAyIH07IHZhciBRUk1hc2tQYXR0ZXJuID0geyBQQVRURVJOMDAwOiAwLCBQQVRURVJOMDAxOiAxLCBQQVRURVJOMDEwOiAyLCBQQVRURVJOMDExOiAzLCBQQVRURVJOMTAwOiA0LCBQQVRURVJOMTAxOiA1LCBQQVRURVJOMTEwOiA2LCBQQVRURVJOMTExOiA3IH07IHZhciBRUlV0aWwgPSB7XHJcbiAgICBQQVRURVJOX1BPU0lUSU9OX1RBQkxFOiBbW10sIFs2LCAxOF0sIFs2LCAyMl0sIFs2LCAyNl0sIFs2LCAzMF0sIFs2LCAzNF0sIFs2LCAyMiwgMzhdLCBbNiwgMjQsIDQyXSwgWzYsIDI2LCA0Nl0sIFs2LCAyOCwgNTBdLCBbNiwgMzAsIDU0XSwgWzYsIDMyLCA1OF0sIFs2LCAzNCwgNjJdLCBbNiwgMjYsIDQ2LCA2Nl0sIFs2LCAyNiwgNDgsIDcwXSwgWzYsIDI2LCA1MCwgNzRdLCBbNiwgMzAsIDU0LCA3OF0sIFs2LCAzMCwgNTYsIDgyXSwgWzYsIDMwLCA1OCwgODZdLCBbNiwgMzQsIDYyLCA5MF0sIFs2LCAyOCwgNTAsIDcyLCA5NF0sIFs2LCAyNiwgNTAsIDc0LCA5OF0sIFs2LCAzMCwgNTQsIDc4LCAxMDJdLCBbNiwgMjgsIDU0LCA4MCwgMTA2XSwgWzYsIDMyLCA1OCwgODQsIDExMF0sIFs2LCAzMCwgNTgsIDg2LCAxMTRdLCBbNiwgMzQsIDYyLCA5MCwgMTE4XSwgWzYsIDI2LCA1MCwgNzQsIDk4LCAxMjJdLCBbNiwgMzAsIDU0LCA3OCwgMTAyLCAxMjZdLCBbNiwgMjYsIDUyLCA3OCwgMTA0LCAxMzBdLCBbNiwgMzAsIDU2LCA4MiwgMTA4LCAxMzRdLCBbNiwgMzQsIDYwLCA4NiwgMTEyLCAxMzhdLCBbNiwgMzAsIDU4LCA4NiwgMTE0LCAxNDJdLCBbNiwgMzQsIDYyLCA5MCwgMTE4LCAxNDZdLCBbNiwgMzAsIDU0LCA3OCwgMTAyLCAxMjYsIDE1MF0sIFs2LCAyNCwgNTAsIDc2LCAxMDIsIDEyOCwgMTU0XSwgWzYsIDI4LCA1NCwgODAsIDEwNiwgMTMyLCAxNThdLCBbNiwgMzIsIDU4LCA4NCwgMTEwLCAxMzYsIDE2Ml0sIFs2LCAyNiwgNTQsIDgyLCAxMTAsIDEzOCwgMTY2XSwgWzYsIDMwLCA1OCwgODYsIDExNCwgMTQyLCAxNzBdXSwgRzE1OiAoMSA8PCAxMCkgfCAoMSA8PCA4KSB8ICgxIDw8IDUpIHwgKDEgPDwgNCkgfCAoMSA8PCAyKSB8ICgxIDw8IDEpIHwgKDEgPDwgMCksIEcxODogKDEgPDwgMTIpIHwgKDEgPDwgMTEpIHwgKDEgPDwgMTApIHwgKDEgPDwgOSkgfCAoMSA8PCA4KSB8ICgxIDw8IDUpIHwgKDEgPDwgMikgfCAoMSA8PCAwKSwgRzE1X01BU0s6ICgxIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICgxIDw8IDEwKSB8ICgxIDw8IDQpIHwgKDEgPDwgMSksIGdldEJDSFR5cGVJbmZvOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIHZhciBkID0gZGF0YSA8PCAxMDsgd2hpbGUgKFFSVXRpbC5nZXRCQ0hEaWdpdChkKSAtIFFSVXRpbC5nZXRCQ0hEaWdpdChRUlV0aWwuRzE1KSA+PSAwKSB7IGQgXj0gKFFSVXRpbC5HMTUgPDwgKFFSVXRpbC5nZXRCQ0hEaWdpdChkKSAtIFFSVXRpbC5nZXRCQ0hEaWdpdChRUlV0aWwuRzE1KSkpOyB9XHJcbiAgICAgICAgcmV0dXJuICgoZGF0YSA8PCAxMCkgfCBkKSBeIFFSVXRpbC5HMTVfTUFTSztcclxuICAgIH0sIGdldEJDSFR5cGVOdW1iZXI6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgdmFyIGQgPSBkYXRhIDw8IDEyOyB3aGlsZSAoUVJVdGlsLmdldEJDSERpZ2l0KGQpIC0gUVJVdGlsLmdldEJDSERpZ2l0KFFSVXRpbC5HMTgpID49IDApIHsgZCBePSAoUVJVdGlsLkcxOCA8PCAoUVJVdGlsLmdldEJDSERpZ2l0KGQpIC0gUVJVdGlsLmdldEJDSERpZ2l0KFFSVXRpbC5HMTgpKSk7IH1cclxuICAgICAgICByZXR1cm4gKGRhdGEgPDwgMTIpIHwgZDtcclxuICAgIH0sIGdldEJDSERpZ2l0OiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIHZhciBkaWdpdCA9IDA7IHdoaWxlIChkYXRhICE9IDApIHsgZGlnaXQrKzsgZGF0YSA+Pj49IDE7IH1cclxuICAgICAgICByZXR1cm4gZGlnaXQ7XHJcbiAgICB9LCBnZXRQYXR0ZXJuUG9zaXRpb246IGZ1bmN0aW9uICh0eXBlTnVtYmVyKSB7IHJldHVybiBRUlV0aWwuUEFUVEVSTl9QT1NJVElPTl9UQUJMRVt0eXBlTnVtYmVyIC0gMV07IH0sIGdldE1hc2s6IGZ1bmN0aW9uIChtYXNrUGF0dGVybiwgaSwgaikgeyBzd2l0Y2ggKG1hc2tQYXR0ZXJuKSB7IGNhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMDAwOiByZXR1cm4gKGkgKyBqKSAlIDIgPT0gMDsgY2FzZSBRUk1hc2tQYXR0ZXJuLlBBVFRFUk4wMDE6IHJldHVybiBpICUgMiA9PSAwOyBjYXNlIFFSTWFza1BhdHRlcm4uUEFUVEVSTjAxMDogcmV0dXJuIGogJSAzID09IDA7IGNhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMDExOiByZXR1cm4gKGkgKyBqKSAlIDMgPT0gMDsgY2FzZSBRUk1hc2tQYXR0ZXJuLlBBVFRFUk4xMDA6IHJldHVybiAoTWF0aC5mbG9vcihpIC8gMikgKyBNYXRoLmZsb29yKGogLyAzKSkgJSAyID09IDA7IGNhc2UgUVJNYXNrUGF0dGVybi5QQVRURVJOMTAxOiByZXR1cm4gKGkgKiBqKSAlIDIgKyAoaSAqIGopICUgMyA9PSAwOyBjYXNlIFFSTWFza1BhdHRlcm4uUEFUVEVSTjExMDogcmV0dXJuICgoaSAqIGopICUgMiArIChpICogaikgJSAzKSAlIDIgPT0gMDsgY2FzZSBRUk1hc2tQYXR0ZXJuLlBBVFRFUk4xMTE6IHJldHVybiAoKGkgKiBqKSAlIDMgKyAoaSArIGopICUgMikgJSAyID09IDA7IGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcImJhZCBtYXNrUGF0dGVybjpcIiArIG1hc2tQYXR0ZXJuKTsgfSB9LCBnZXRFcnJvckNvcnJlY3RQb2x5bm9taWFsOiBmdW5jdGlvbiAoZXJyb3JDb3JyZWN0TGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGEgPSBuZXcgUVJQb2x5bm9taWFsKFsxXSwgMCk7IGZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JDb3JyZWN0TGVuZ3RoOyBpKyspIHsgYSA9IGEubXVsdGlwbHkobmV3IFFSUG9seW5vbWlhbChbMSwgUVJNYXRoLmdleHAoaSldLCAwKSk7IH1cclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH0sIGdldExlbmd0aEluQml0czogZnVuY3Rpb24gKG1vZGUsIHR5cGUpIHsgaWYgKDEgPD0gdHlwZSAmJiB0eXBlIDwgMTApIHsgc3dpdGNoIChtb2RlKSB7IGNhc2UgUVJNb2RlLk1PREVfTlVNQkVSOiByZXR1cm4gMTA7IGNhc2UgUVJNb2RlLk1PREVfQUxQSEFfTlVNOiByZXR1cm4gOTsgY2FzZSBRUk1vZGUuTU9ERV84QklUX0JZVEU6IHJldHVybiA4OyBjYXNlIFFSTW9kZS5NT0RFX0tBTkpJOiByZXR1cm4gODsgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwibW9kZTpcIiArIG1vZGUpOyB9IH0gZWxzZSBpZiAodHlwZSA8IDI3KSB7IHN3aXRjaCAobW9kZSkgeyBjYXNlIFFSTW9kZS5NT0RFX05VTUJFUjogcmV0dXJuIDEyOyBjYXNlIFFSTW9kZS5NT0RFX0FMUEhBX05VTTogcmV0dXJuIDExOyBjYXNlIFFSTW9kZS5NT0RFXzhCSVRfQllURTogcmV0dXJuIDE2OyBjYXNlIFFSTW9kZS5NT0RFX0tBTkpJOiByZXR1cm4gMTA7IGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcIm1vZGU6XCIgKyBtb2RlKTsgfSB9IGVsc2UgaWYgKHR5cGUgPCA0MSkgeyBzd2l0Y2ggKG1vZGUpIHsgY2FzZSBRUk1vZGUuTU9ERV9OVU1CRVI6IHJldHVybiAxNDsgY2FzZSBRUk1vZGUuTU9ERV9BTFBIQV9OVU06IHJldHVybiAxMzsgY2FzZSBRUk1vZGUuTU9ERV84QklUX0JZVEU6IHJldHVybiAxNjsgY2FzZSBRUk1vZGUuTU9ERV9LQU5KSTogcmV0dXJuIDEyOyBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlOlwiICsgbW9kZSk7IH0gfSBlbHNlIHsgdGhyb3cgbmV3IEVycm9yKFwidHlwZTpcIiArIHR5cGUpOyB9IH0sIGdldExvc3RQb2ludDogZnVuY3Rpb24gKHFyQ29kZSkge1xyXG4gICAgICAgIHZhciBtb2R1bGVDb3VudCA9IHFyQ29kZS5nZXRNb2R1bGVDb3VudCgpOyB2YXIgbG9zdFBvaW50ID0gMDsgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbW9kdWxlQ291bnQ7IHJvdysrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG1vZHVsZUNvdW50OyBjb2wrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNhbWVDb3VudCA9IDA7IHZhciBkYXJrID0gcXJDb2RlLmlzRGFyayhyb3csIGNvbCk7IGZvciAodmFyIHIgPSAtMTsgciA8PSAxOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm93ICsgciA8IDAgfHwgbW9kdWxlQ291bnQgPD0gcm93ICsgcikgeyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSAtMTsgYyA8PSAxOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCArIGMgPCAwIHx8IG1vZHVsZUNvdW50IDw9IGNvbCArIGMpIHsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPT0gMCAmJiBjID09IDApIHsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhcmsgPT0gcXJDb2RlLmlzRGFyayhyb3cgKyByLCBjb2wgKyBjKSkgeyBzYW1lQ291bnQrKzsgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzYW1lQ291bnQgPiA1KSB7IGxvc3RQb2ludCArPSAoMyArIHNhbWVDb3VudCAtIDUpOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbW9kdWxlQ291bnQgLSAxOyByb3crKykgeyBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBtb2R1bGVDb3VudCAtIDE7IGNvbCsrKSB7IHZhciBjb3VudCA9IDA7IGlmIChxckNvZGUuaXNEYXJrKHJvdywgY29sKSkgY291bnQrKzsgaWYgKHFyQ29kZS5pc0Rhcmsocm93ICsgMSwgY29sKSkgY291bnQrKzsgaWYgKHFyQ29kZS5pc0Rhcmsocm93LCBjb2wgKyAxKSkgY291bnQrKzsgaWYgKHFyQ29kZS5pc0Rhcmsocm93ICsgMSwgY29sICsgMSkpIGNvdW50Kys7IGlmIChjb3VudCA9PSAwIHx8IGNvdW50ID09IDQpIHsgbG9zdFBvaW50ICs9IDM7IH0gfSB9XHJcbiAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbW9kdWxlQ291bnQ7IHJvdysrKSB7IGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG1vZHVsZUNvdW50IC0gNjsgY29sKyspIHsgaWYgKHFyQ29kZS5pc0Rhcmsocm93LCBjb2wpICYmICFxckNvZGUuaXNEYXJrKHJvdywgY29sICsgMSkgJiYgcXJDb2RlLmlzRGFyayhyb3csIGNvbCArIDIpICYmIHFyQ29kZS5pc0Rhcmsocm93LCBjb2wgKyAzKSAmJiBxckNvZGUuaXNEYXJrKHJvdywgY29sICsgNCkgJiYgIXFyQ29kZS5pc0Rhcmsocm93LCBjb2wgKyA1KSAmJiBxckNvZGUuaXNEYXJrKHJvdywgY29sICsgNikpIHsgbG9zdFBvaW50ICs9IDQwOyB9IH0gfVxyXG4gICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG1vZHVsZUNvdW50OyBjb2wrKykgeyBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBtb2R1bGVDb3VudCAtIDY7IHJvdysrKSB7IGlmIChxckNvZGUuaXNEYXJrKHJvdywgY29sKSAmJiAhcXJDb2RlLmlzRGFyayhyb3cgKyAxLCBjb2wpICYmIHFyQ29kZS5pc0Rhcmsocm93ICsgMiwgY29sKSAmJiBxckNvZGUuaXNEYXJrKHJvdyArIDMsIGNvbCkgJiYgcXJDb2RlLmlzRGFyayhyb3cgKyA0LCBjb2wpICYmICFxckNvZGUuaXNEYXJrKHJvdyArIDUsIGNvbCkgJiYgcXJDb2RlLmlzRGFyayhyb3cgKyA2LCBjb2wpKSB7IGxvc3RQb2ludCArPSA0MDsgfSB9IH1cclxuICAgICAgICB2YXIgZGFya0NvdW50ID0gMDsgZm9yICh2YXIgY29sID0gMDsgY29sIDwgbW9kdWxlQ291bnQ7IGNvbCsrKSB7IGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IG1vZHVsZUNvdW50OyByb3crKykgeyBpZiAocXJDb2RlLmlzRGFyayhyb3csIGNvbCkpIHsgZGFya0NvdW50Kys7IH0gfSB9XHJcbiAgICAgICAgdmFyIHJhdGlvID0gTWF0aC5hYnMoMTAwICogZGFya0NvdW50IC8gbW9kdWxlQ291bnQgLyBtb2R1bGVDb3VudCAtIDUwKSAvIDU7IGxvc3RQb2ludCArPSByYXRpbyAqIDEwOyByZXR1cm4gbG9zdFBvaW50O1xyXG4gICAgfVxyXG59OyB2YXIgUVJNYXRoID0ge1xyXG4gICAgZ2xvZzogZnVuY3Rpb24gKG4pIHtcclxuICAgICAgICBpZiAobiA8IDEpIHsgdGhyb3cgbmV3IEVycm9yKFwiZ2xvZyhcIiArIG4gKyBcIilcIik7IH1cclxuICAgICAgICByZXR1cm4gUVJNYXRoLkxPR19UQUJMRVtuXTtcclxuICAgIH0sIGdleHA6IGZ1bmN0aW9uIChuKSB7XHJcbiAgICAgICAgd2hpbGUgKG4gPCAwKSB7IG4gKz0gMjU1OyB9XHJcbiAgICAgICAgd2hpbGUgKG4gPj0gMjU2KSB7IG4gLT0gMjU1OyB9XHJcbiAgICAgICAgcmV0dXJuIFFSTWF0aC5FWFBfVEFCTEVbbl07XHJcbiAgICB9LCBFWFBfVEFCTEU6IG5ldyBBcnJheSgyNTYpLCBMT0dfVEFCTEU6IG5ldyBBcnJheSgyNTYpXHJcbn07IGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7IFFSTWF0aC5FWFBfVEFCTEVbaV0gPSAxIDw8IGk7IH1cclxuZm9yICh2YXIgaSA9IDg7IGkgPCAyNTY7IGkrKykgeyBRUk1hdGguRVhQX1RBQkxFW2ldID0gUVJNYXRoLkVYUF9UQUJMRVtpIC0gNF0gXiBRUk1hdGguRVhQX1RBQkxFW2kgLSA1XSBeIFFSTWF0aC5FWFBfVEFCTEVbaSAtIDZdIF4gUVJNYXRoLkVYUF9UQUJMRVtpIC0gOF07IH1cclxuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTU7IGkrKykgeyBRUk1hdGguTE9HX1RBQkxFW1FSTWF0aC5FWFBfVEFCTEVbaV1dID0gaTsgfVxyXG5mdW5jdGlvbiBRUlBvbHlub21pYWwobnVtLCBzaGlmdCkge1xyXG4gICAgaWYgKG51bS5sZW5ndGggPT0gdW5kZWZpbmVkKSB7IHRocm93IG5ldyBFcnJvcihudW0ubGVuZ3RoICsgXCIvXCIgKyBzaGlmdCk7IH1cclxuICAgIHZhciBvZmZzZXQgPSAwOyB3aGlsZSAob2Zmc2V0IDwgbnVtLmxlbmd0aCAmJiBudW1bb2Zmc2V0XSA9PSAwKSB7IG9mZnNldCsrOyB9XHJcbiAgICB0aGlzLm51bSA9IG5ldyBBcnJheShudW0ubGVuZ3RoIC0gb2Zmc2V0ICsgc2hpZnQpOyBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGggLSBvZmZzZXQ7IGkrKykgeyB0aGlzLm51bVtpXSA9IG51bVtpICsgb2Zmc2V0XTsgfVxyXG59XHJcblFSUG9seW5vbWlhbC5wcm90b3R5cGUgPSB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChpbmRleCkgeyByZXR1cm4gdGhpcy5udW1baW5kZXhdOyB9LCBnZXRMZW5ndGg6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMubnVtLmxlbmd0aDsgfSwgbXVsdGlwbHk6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdmFyIG51bSA9IG5ldyBBcnJheSh0aGlzLmdldExlbmd0aCgpICsgZS5nZXRMZW5ndGgoKSAtIDEpOyBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2V0TGVuZ3RoKCk7IGkrKykgeyBmb3IgKHZhciBqID0gMDsgaiA8IGUuZ2V0TGVuZ3RoKCk7IGorKykgeyBudW1baSArIGpdIF49IFFSTWF0aC5nZXhwKFFSTWF0aC5nbG9nKHRoaXMuZ2V0KGkpKSArIFFSTWF0aC5nbG9nKGUuZ2V0KGopKSk7IH0gfVxyXG4gICAgICAgIHJldHVybiBuZXcgUVJQb2x5bm9taWFsKG51bSwgMCk7XHJcbiAgICB9LCBtb2Q6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0TGVuZ3RoKCkgLSBlLmdldExlbmd0aCgpIDwgMCkgeyByZXR1cm4gdGhpczsgfVxyXG4gICAgICAgIHZhciByYXRpbyA9IFFSTWF0aC5nbG9nKHRoaXMuZ2V0KDApKSAtIFFSTWF0aC5nbG9nKGUuZ2V0KDApKTsgdmFyIG51bSA9IG5ldyBBcnJheSh0aGlzLmdldExlbmd0aCgpKTsgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdldExlbmd0aCgpOyBpKyspIHsgbnVtW2ldID0gdGhpcy5nZXQoaSk7IH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGUuZ2V0TGVuZ3RoKCk7IGkrKykgeyBudW1baV0gXj0gUVJNYXRoLmdleHAoUVJNYXRoLmdsb2coZS5nZXQoaSkpICsgcmF0aW8pOyB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBRUlBvbHlub21pYWwobnVtLCAwKS5tb2QoZSk7XHJcbiAgICB9XHJcbn07IGZ1bmN0aW9uIFFSUlNCbG9jayh0b3RhbENvdW50LCBkYXRhQ291bnQpIHsgdGhpcy50b3RhbENvdW50ID0gdG90YWxDb3VudDsgdGhpcy5kYXRhQ291bnQgPSBkYXRhQ291bnQ7IH1cclxuUVJSU0Jsb2NrLlJTX0JMT0NLX1RBQkxFID0gW1sxLCAyNiwgMTldLCBbMSwgMjYsIDE2XSwgWzEsIDI2LCAxM10sIFsxLCAyNiwgOV0sIFsxLCA0NCwgMzRdLCBbMSwgNDQsIDI4XSwgWzEsIDQ0LCAyMl0sIFsxLCA0NCwgMTZdLCBbMSwgNzAsIDU1XSwgWzEsIDcwLCA0NF0sIFsyLCAzNSwgMTddLCBbMiwgMzUsIDEzXSwgWzEsIDEwMCwgODBdLCBbMiwgNTAsIDMyXSwgWzIsIDUwLCAyNF0sIFs0LCAyNSwgOV0sIFsxLCAxMzQsIDEwOF0sIFsyLCA2NywgNDNdLCBbMiwgMzMsIDE1LCAyLCAzNCwgMTZdLCBbMiwgMzMsIDExLCAyLCAzNCwgMTJdLCBbMiwgODYsIDY4XSwgWzQsIDQzLCAyN10sIFs0LCA0MywgMTldLCBbNCwgNDMsIDE1XSwgWzIsIDk4LCA3OF0sIFs0LCA0OSwgMzFdLCBbMiwgMzIsIDE0LCA0LCAzMywgMTVdLCBbNCwgMzksIDEzLCAxLCA0MCwgMTRdLCBbMiwgMTIxLCA5N10sIFsyLCA2MCwgMzgsIDIsIDYxLCAzOV0sIFs0LCA0MCwgMTgsIDIsIDQxLCAxOV0sIFs0LCA0MCwgMTQsIDIsIDQxLCAxNV0sIFsyLCAxNDYsIDExNl0sIFszLCA1OCwgMzYsIDIsIDU5LCAzN10sIFs0LCAzNiwgMTYsIDQsIDM3LCAxN10sIFs0LCAzNiwgMTIsIDQsIDM3LCAxM10sIFsyLCA4NiwgNjgsIDIsIDg3LCA2OV0sIFs0LCA2OSwgNDMsIDEsIDcwLCA0NF0sIFs2LCA0MywgMTksIDIsIDQ0LCAyMF0sIFs2LCA0MywgMTUsIDIsIDQ0LCAxNl0sIFs0LCAxMDEsIDgxXSwgWzEsIDgwLCA1MCwgNCwgODEsIDUxXSwgWzQsIDUwLCAyMiwgNCwgNTEsIDIzXSwgWzMsIDM2LCAxMiwgOCwgMzcsIDEzXSwgWzIsIDExNiwgOTIsIDIsIDExNywgOTNdLCBbNiwgNTgsIDM2LCAyLCA1OSwgMzddLCBbNCwgNDYsIDIwLCA2LCA0NywgMjFdLCBbNywgNDIsIDE0LCA0LCA0MywgMTVdLCBbNCwgMTMzLCAxMDddLCBbOCwgNTksIDM3LCAxLCA2MCwgMzhdLCBbOCwgNDQsIDIwLCA0LCA0NSwgMjFdLCBbMTIsIDMzLCAxMSwgNCwgMzQsIDEyXSwgWzMsIDE0NSwgMTE1LCAxLCAxNDYsIDExNl0sIFs0LCA2NCwgNDAsIDUsIDY1LCA0MV0sIFsxMSwgMzYsIDE2LCA1LCAzNywgMTddLCBbMTEsIDM2LCAxMiwgNSwgMzcsIDEzXSwgWzUsIDEwOSwgODcsIDEsIDExMCwgODhdLCBbNSwgNjUsIDQxLCA1LCA2NiwgNDJdLCBbNSwgNTQsIDI0LCA3LCA1NSwgMjVdLCBbMTEsIDM2LCAxMl0sIFs1LCAxMjIsIDk4LCAxLCAxMjMsIDk5XSwgWzcsIDczLCA0NSwgMywgNzQsIDQ2XSwgWzE1LCA0MywgMTksIDIsIDQ0LCAyMF0sIFszLCA0NSwgMTUsIDEzLCA0NiwgMTZdLCBbMSwgMTM1LCAxMDcsIDUsIDEzNiwgMTA4XSwgWzEwLCA3NCwgNDYsIDEsIDc1LCA0N10sIFsxLCA1MCwgMjIsIDE1LCA1MSwgMjNdLCBbMiwgNDIsIDE0LCAxNywgNDMsIDE1XSwgWzUsIDE1MCwgMTIwLCAxLCAxNTEsIDEyMV0sIFs5LCA2OSwgNDMsIDQsIDcwLCA0NF0sIFsxNywgNTAsIDIyLCAxLCA1MSwgMjNdLCBbMiwgNDIsIDE0LCAxOSwgNDMsIDE1XSwgWzMsIDE0MSwgMTEzLCA0LCAxNDIsIDExNF0sIFszLCA3MCwgNDQsIDExLCA3MSwgNDVdLCBbMTcsIDQ3LCAyMSwgNCwgNDgsIDIyXSwgWzksIDM5LCAxMywgMTYsIDQwLCAxNF0sIFszLCAxMzUsIDEwNywgNSwgMTM2LCAxMDhdLCBbMywgNjcsIDQxLCAxMywgNjgsIDQyXSwgWzE1LCA1NCwgMjQsIDUsIDU1LCAyNV0sIFsxNSwgNDMsIDE1LCAxMCwgNDQsIDE2XSwgWzQsIDE0NCwgMTE2LCA0LCAxNDUsIDExN10sIFsxNywgNjgsIDQyXSwgWzE3LCA1MCwgMjIsIDYsIDUxLCAyM10sIFsxOSwgNDYsIDE2LCA2LCA0NywgMTddLCBbMiwgMTM5LCAxMTEsIDcsIDE0MCwgMTEyXSwgWzE3LCA3NCwgNDZdLCBbNywgNTQsIDI0LCAxNiwgNTUsIDI1XSwgWzM0LCAzNywgMTNdLCBbNCwgMTUxLCAxMjEsIDUsIDE1MiwgMTIyXSwgWzQsIDc1LCA0NywgMTQsIDc2LCA0OF0sIFsxMSwgNTQsIDI0LCAxNCwgNTUsIDI1XSwgWzE2LCA0NSwgMTUsIDE0LCA0NiwgMTZdLCBbNiwgMTQ3LCAxMTcsIDQsIDE0OCwgMTE4XSwgWzYsIDczLCA0NSwgMTQsIDc0LCA0Nl0sIFsxMSwgNTQsIDI0LCAxNiwgNTUsIDI1XSwgWzMwLCA0NiwgMTYsIDIsIDQ3LCAxN10sIFs4LCAxMzIsIDEwNiwgNCwgMTMzLCAxMDddLCBbOCwgNzUsIDQ3LCAxMywgNzYsIDQ4XSwgWzcsIDU0LCAyNCwgMjIsIDU1LCAyNV0sIFsyMiwgNDUsIDE1LCAxMywgNDYsIDE2XSwgWzEwLCAxNDIsIDExNCwgMiwgMTQzLCAxMTVdLCBbMTksIDc0LCA0NiwgNCwgNzUsIDQ3XSwgWzI4LCA1MCwgMjIsIDYsIDUxLCAyM10sIFszMywgNDYsIDE2LCA0LCA0NywgMTddLCBbOCwgMTUyLCAxMjIsIDQsIDE1MywgMTIzXSwgWzIyLCA3MywgNDUsIDMsIDc0LCA0Nl0sIFs4LCA1MywgMjMsIDI2LCA1NCwgMjRdLCBbMTIsIDQ1LCAxNSwgMjgsIDQ2LCAxNl0sIFszLCAxNDcsIDExNywgMTAsIDE0OCwgMTE4XSwgWzMsIDczLCA0NSwgMjMsIDc0LCA0Nl0sIFs0LCA1NCwgMjQsIDMxLCA1NSwgMjVdLCBbMTEsIDQ1LCAxNSwgMzEsIDQ2LCAxNl0sIFs3LCAxNDYsIDExNiwgNywgMTQ3LCAxMTddLCBbMjEsIDczLCA0NSwgNywgNzQsIDQ2XSwgWzEsIDUzLCAyMywgMzcsIDU0LCAyNF0sIFsxOSwgNDUsIDE1LCAyNiwgNDYsIDE2XSwgWzUsIDE0NSwgMTE1LCAxMCwgMTQ2LCAxMTZdLCBbMTksIDc1LCA0NywgMTAsIDc2LCA0OF0sIFsxNSwgNTQsIDI0LCAyNSwgNTUsIDI1XSwgWzIzLCA0NSwgMTUsIDI1LCA0NiwgMTZdLCBbMTMsIDE0NSwgMTE1LCAzLCAxNDYsIDExNl0sIFsyLCA3NCwgNDYsIDI5LCA3NSwgNDddLCBbNDIsIDU0LCAyNCwgMSwgNTUsIDI1XSwgWzIzLCA0NSwgMTUsIDI4LCA0NiwgMTZdLCBbMTcsIDE0NSwgMTE1XSwgWzEwLCA3NCwgNDYsIDIzLCA3NSwgNDddLCBbMTAsIDU0LCAyNCwgMzUsIDU1LCAyNV0sIFsxOSwgNDUsIDE1LCAzNSwgNDYsIDE2XSwgWzE3LCAxNDUsIDExNSwgMSwgMTQ2LCAxMTZdLCBbMTQsIDc0LCA0NiwgMjEsIDc1LCA0N10sIFsyOSwgNTQsIDI0LCAxOSwgNTUsIDI1XSwgWzExLCA0NSwgMTUsIDQ2LCA0NiwgMTZdLCBbMTMsIDE0NSwgMTE1LCA2LCAxNDYsIDExNl0sIFsxNCwgNzQsIDQ2LCAyMywgNzUsIDQ3XSwgWzQ0LCA1NCwgMjQsIDcsIDU1LCAyNV0sIFs1OSwgNDYsIDE2LCAxLCA0NywgMTddLCBbMTIsIDE1MSwgMTIxLCA3LCAxNTIsIDEyMl0sIFsxMiwgNzUsIDQ3LCAyNiwgNzYsIDQ4XSwgWzM5LCA1NCwgMjQsIDE0LCA1NSwgMjVdLCBbMjIsIDQ1LCAxNSwgNDEsIDQ2LCAxNl0sIFs2LCAxNTEsIDEyMSwgMTQsIDE1MiwgMTIyXSwgWzYsIDc1LCA0NywgMzQsIDc2LCA0OF0sIFs0NiwgNTQsIDI0LCAxMCwgNTUsIDI1XSwgWzIsIDQ1LCAxNSwgNjQsIDQ2LCAxNl0sIFsxNywgMTUyLCAxMjIsIDQsIDE1MywgMTIzXSwgWzI5LCA3NCwgNDYsIDE0LCA3NSwgNDddLCBbNDksIDU0LCAyNCwgMTAsIDU1LCAyNV0sIFsyNCwgNDUsIDE1LCA0NiwgNDYsIDE2XSwgWzQsIDE1MiwgMTIyLCAxOCwgMTUzLCAxMjNdLCBbMTMsIDc0LCA0NiwgMzIsIDc1LCA0N10sIFs0OCwgNTQsIDI0LCAxNCwgNTUsIDI1XSwgWzQyLCA0NSwgMTUsIDMyLCA0NiwgMTZdLCBbMjAsIDE0NywgMTE3LCA0LCAxNDgsIDExOF0sIFs0MCwgNzUsIDQ3LCA3LCA3NiwgNDhdLCBbNDMsIDU0LCAyNCwgMjIsIDU1LCAyNV0sIFsxMCwgNDUsIDE1LCA2NywgNDYsIDE2XSwgWzE5LCAxNDgsIDExOCwgNiwgMTQ5LCAxMTldLCBbMTgsIDc1LCA0NywgMzEsIDc2LCA0OF0sIFszNCwgNTQsIDI0LCAzNCwgNTUsIDI1XSwgWzIwLCA0NSwgMTUsIDYxLCA0NiwgMTZdXTsgUVJSU0Jsb2NrLmdldFJTQmxvY2tzID0gZnVuY3Rpb24gKHR5cGVOdW1iZXIsIGVycm9yQ29ycmVjdExldmVsKSB7XHJcbiAgICB2YXIgcnNCbG9jayA9IFFSUlNCbG9jay5nZXRSc0Jsb2NrVGFibGUodHlwZU51bWJlciwgZXJyb3JDb3JyZWN0TGV2ZWwpOyBpZiAocnNCbG9jayA9PSB1bmRlZmluZWQpIHsgdGhyb3cgbmV3IEVycm9yKFwiYmFkIHJzIGJsb2NrIEAgdHlwZU51bWJlcjpcIiArIHR5cGVOdW1iZXIgKyBcIi9lcnJvckNvcnJlY3RMZXZlbDpcIiArIGVycm9yQ29ycmVjdExldmVsKTsgfVxyXG4gICAgdmFyIGxlbmd0aCA9IHJzQmxvY2subGVuZ3RoIC8gMzsgdmFyIGxpc3QgPSBbXTsgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeyB2YXIgY291bnQgPSByc0Jsb2NrW2kgKiAzICsgMF07IHZhciB0b3RhbENvdW50ID0gcnNCbG9ja1tpICogMyArIDFdOyB2YXIgZGF0YUNvdW50ID0gcnNCbG9ja1tpICogMyArIDJdOyBmb3IgKHZhciBqID0gMDsgaiA8IGNvdW50OyBqKyspIHsgbGlzdC5wdXNoKG5ldyBRUlJTQmxvY2sodG90YWxDb3VudCwgZGF0YUNvdW50KSk7IH0gfVxyXG4gICAgcmV0dXJuIGxpc3Q7XHJcbn07IFFSUlNCbG9jay5nZXRSc0Jsb2NrVGFibGUgPSBmdW5jdGlvbiAodHlwZU51bWJlciwgZXJyb3JDb3JyZWN0TGV2ZWwpIHsgc3dpdGNoIChlcnJvckNvcnJlY3RMZXZlbCkgeyBjYXNlIFFSRXJyb3JDb3JyZWN0TGV2ZWwuTDogcmV0dXJuIFFSUlNCbG9jay5SU19CTE9DS19UQUJMRVsodHlwZU51bWJlciAtIDEpICogNCArIDBdOyBjYXNlIFFSRXJyb3JDb3JyZWN0TGV2ZWwuTTogcmV0dXJuIFFSUlNCbG9jay5SU19CTE9DS19UQUJMRVsodHlwZU51bWJlciAtIDEpICogNCArIDFdOyBjYXNlIFFSRXJyb3JDb3JyZWN0TGV2ZWwuUTogcmV0dXJuIFFSUlNCbG9jay5SU19CTE9DS19UQUJMRVsodHlwZU51bWJlciAtIDEpICogNCArIDJdOyBjYXNlIFFSRXJyb3JDb3JyZWN0TGV2ZWwuSDogcmV0dXJuIFFSUlNCbG9jay5SU19CTE9DS19UQUJMRVsodHlwZU51bWJlciAtIDEpICogNCArIDNdOyBkZWZhdWx0OiByZXR1cm4gdW5kZWZpbmVkOyB9IH07IGZ1bmN0aW9uIFFSQml0QnVmZmVyKCkgeyB0aGlzLmJ1ZmZlciA9IFtdOyB0aGlzLmxlbmd0aCA9IDA7IH1cclxuUVJCaXRCdWZmZXIucHJvdG90eXBlID0ge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoaW5kZXgpIHsgdmFyIGJ1ZkluZGV4ID0gTWF0aC5mbG9vcihpbmRleCAvIDgpOyByZXR1cm4gKCh0aGlzLmJ1ZmZlcltidWZJbmRleF0gPj4+ICg3IC0gaW5kZXggJSA4KSkgJiAxKSA9PSAxOyB9LCBwdXQ6IGZ1bmN0aW9uIChudW0sIGxlbmd0aCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7IHRoaXMucHV0Qml0KCgobnVtID4+PiAobGVuZ3RoIC0gaSAtIDEpKSAmIDEpID09IDEpOyB9IH0sIGdldExlbmd0aEluQml0czogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5sZW5ndGg7IH0sIHB1dEJpdDogZnVuY3Rpb24gKGJpdCkge1xyXG4gICAgICAgIHZhciBidWZJbmRleCA9IE1hdGguZmxvb3IodGhpcy5sZW5ndGggLyA4KTsgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA8PSBidWZJbmRleCkgeyB0aGlzLmJ1ZmZlci5wdXNoKDApOyB9XHJcbiAgICAgICAgaWYgKGJpdCkgeyB0aGlzLmJ1ZmZlcltidWZJbmRleF0gfD0gKDB4ODAgPj4+ICh0aGlzLmxlbmd0aCAlIDgpKTsgfVxyXG4gICAgICAgIHRoaXMubGVuZ3RoKys7XHJcbiAgICB9XHJcbn07IHZhciBRUkNvZGVMaW1pdExlbmd0aCA9IFtbMTcsIDE0LCAxMSwgN10sIFszMiwgMjYsIDIwLCAxNF0sIFs1MywgNDIsIDMyLCAyNF0sIFs3OCwgNjIsIDQ2LCAzNF0sIFsxMDYsIDg0LCA2MCwgNDRdLCBbMTM0LCAxMDYsIDc0LCA1OF0sIFsxNTQsIDEyMiwgODYsIDY0XSwgWzE5MiwgMTUyLCAxMDgsIDg0XSwgWzIzMCwgMTgwLCAxMzAsIDk4XSwgWzI3MSwgMjEzLCAxNTEsIDExOV0sIFszMjEsIDI1MSwgMTc3LCAxMzddLCBbMzY3LCAyODcsIDIwMywgMTU1XSwgWzQyNSwgMzMxLCAyNDEsIDE3N10sIFs0NTgsIDM2MiwgMjU4LCAxOTRdLCBbNTIwLCA0MTIsIDI5MiwgMjIwXSwgWzU4NiwgNDUwLCAzMjIsIDI1MF0sIFs2NDQsIDUwNCwgMzY0LCAyODBdLCBbNzE4LCA1NjAsIDM5NCwgMzEwXSwgWzc5MiwgNjI0LCA0NDIsIDMzOF0sIFs4NTgsIDY2NiwgNDgyLCAzODJdLCBbOTI5LCA3MTEsIDUwOSwgNDAzXSwgWzEwMDMsIDc3OSwgNTY1LCA0MzldLCBbMTA5MSwgODU3LCA2MTEsIDQ2MV0sIFsxMTcxLCA5MTEsIDY2MSwgNTExXSwgWzEyNzMsIDk5NywgNzE1LCA1MzVdLCBbMTM2NywgMTA1OSwgNzUxLCA1OTNdLCBbMTQ2NSwgMTEyNSwgODA1LCA2MjVdLCBbMTUyOCwgMTE5MCwgODY4LCA2NThdLCBbMTYyOCwgMTI2NCwgOTA4LCA2OThdLCBbMTczMiwgMTM3MCwgOTgyLCA3NDJdLCBbMTg0MCwgMTQ1MiwgMTAzMCwgNzkwXSwgWzE5NTIsIDE1MzgsIDExMTIsIDg0Ml0sIFsyMDY4LCAxNjI4LCAxMTY4LCA4OThdLCBbMjE4OCwgMTcyMiwgMTIyOCwgOTU4XSwgWzIzMDMsIDE4MDksIDEyODMsIDk4M10sIFsyNDMxLCAxOTExLCAxMzUxLCAxMDUxXSwgWzI1NjMsIDE5ODksIDE0MjMsIDEwOTNdLCBbMjY5OSwgMjA5OSwgMTQ5OSwgMTEzOV0sIFsyODA5LCAyMjEzLCAxNTc5LCAxMjE5XSwgWzI5NTMsIDIzMzEsIDE2NjMsIDEyNzNdXTtcclxuXHJcbmZ1bmN0aW9uIF9pc1N1cHBvcnRDYW52YXMoKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCAhPSBcInVuZGVmaW5lZFwiO1xyXG59XHJcblxyXG4vLyBhbmRyb2lkIDIueCBkb2Vzbid0IHN1cHBvcnQgRGF0YS1VUkkgc3BlY1xyXG5mdW5jdGlvbiBfZ2V0QW5kcm9pZCgpIHtcclxuICAgIHZhciBhbmRyb2lkID0gZmFsc2U7XHJcbiAgICB2YXIgc0FnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuXHJcbiAgICBpZiAoL2FuZHJvaWQvaS50ZXN0KHNBZ2VudCkpIHsgLy8gYW5kcm9pZFxyXG4gICAgICAgIGFuZHJvaWQgPSB0cnVlO1xyXG4gICAgICAgIHZhciBhTWF0ID0gc0FnZW50LnRvU3RyaW5nKCkubWF0Y2goL2FuZHJvaWQgKFswLTldXFwuWzAtOV0pL2kpO1xyXG5cclxuICAgICAgICBpZiAoYU1hdCAmJiBhTWF0WzFdKSB7XHJcbiAgICAgICAgICAgIGFuZHJvaWQgPSBwYXJzZUZsb2F0KGFNYXRbMV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYW5kcm9pZDtcclxufVxyXG5cclxudmFyIHN2Z0RyYXdlciA9IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIERyYXdpbmcgPSBmdW5jdGlvbiAoZWwsIGh0T3B0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5fZWwgPSBlbDtcclxuICAgICAgICB0aGlzLl9odE9wdGlvbiA9IGh0T3B0aW9uO1xyXG4gICAgfTtcclxuXHJcbiAgICBEcmF3aW5nLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKG9RUkNvZGUpIHtcclxuICAgICAgICB2YXIgX2h0T3B0aW9uID0gdGhpcy5faHRPcHRpb247XHJcbiAgICAgICAgdmFyIF9lbCA9IHRoaXMuX2VsO1xyXG4gICAgICAgIHZhciBuQ291bnQgPSBvUVJDb2RlLmdldE1vZHVsZUNvdW50KCk7XHJcbiAgICAgICAgdmFyIG5XaWR0aCA9IE1hdGguZmxvb3IoX2h0T3B0aW9uLndpZHRoIC8gbkNvdW50KTtcclxuICAgICAgICB2YXIgbkhlaWdodCA9IE1hdGguZmxvb3IoX2h0T3B0aW9uLmhlaWdodCAvIG5Db3VudCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gbWFrZVNWRyh0YWcsIGF0dHJzKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCB0YWcpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGF0dHJzKVxyXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJzLmhhc093blByb3BlcnR5KGspKSBlbC5zZXRBdHRyaWJ1dGUoaywgYXR0cnNba10pO1xyXG4gICAgICAgICAgICByZXR1cm4gZWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3ZnID0gbWFrZVNWRyhcInN2Z1wiLCB7ICd2aWV3Qm94JzogJzAgMCAnICsgU3RyaW5nKG5Db3VudCkgKyBcIiBcIiArIFN0cmluZyhuQ291bnQpLCAnd2lkdGgnOiAnMTAwJScsICdoZWlnaHQnOiAnMTAwJScsICdmaWxsJzogX2h0T3B0aW9uLmNvbG9yTGlnaHQgfSk7XHJcbiAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIiwgXCJ4bWxuczp4bGlua1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIik7XHJcbiAgICAgICAgX2VsLmFwcGVuZENoaWxkKHN2Zyk7XHJcblxyXG4gICAgICAgIHN2Zy5hcHBlbmRDaGlsZChtYWtlU1ZHKFwicmVjdFwiLCB7IFwiZmlsbFwiOiBfaHRPcHRpb24uY29sb3JMaWdodCwgXCJ3aWR0aFwiOiBcIjEwMCVcIiwgXCJoZWlnaHRcIjogXCIxMDAlXCIgfSkpO1xyXG4gICAgICAgIHN2Zy5hcHBlbmRDaGlsZChtYWtlU1ZHKFwicmVjdFwiLCB7IFwiZmlsbFwiOiBfaHRPcHRpb24uY29sb3JEYXJrLCBcIndpZHRoXCI6IFwiMVwiLCBcImhlaWdodFwiOiBcIjFcIiwgXCJpZFwiOiBcInRlbXBsYXRlXCIgfSkpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBuQ291bnQ7IHJvdysrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5Db3VudDsgY29sKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChvUVJDb2RlLmlzRGFyayhyb3csIGNvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBtYWtlU1ZHKFwidXNlXCIsIHsgXCJ4XCI6IFN0cmluZyhjb2wpLCBcInlcIjogU3RyaW5nKHJvdykgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsIFwiaHJlZlwiLCBcIiN0ZW1wbGF0ZVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRHJhd2luZy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuX2VsLmhhc0NoaWxkTm9kZXMoKSlcclxuICAgICAgICAgICAgdGhpcy5fZWwucmVtb3ZlQ2hpbGQodGhpcy5fZWwubGFzdENoaWxkKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRHJhd2luZztcclxufSkoKTtcclxuXHJcbnZhciB1c2VTVkcgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInN2Z1wiO1xyXG5cclxuLy8gRHJhd2luZyBpbiBET00gYnkgdXNpbmcgVGFibGUgdGFnXHJcbnZhciBEcmF3aW5nID0gdXNlU1ZHID8gc3ZnRHJhd2VyIDogIV9pc1N1cHBvcnRDYW52YXMoKSA/IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgRHJhd2luZyA9IGZ1bmN0aW9uIChlbCwgaHRPcHRpb24pIHtcclxuICAgICAgICB0aGlzLl9lbCA9IGVsO1xyXG4gICAgICAgIHRoaXMuX2h0T3B0aW9uID0gaHRPcHRpb247XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhdyB0aGUgUVJDb2RlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7UVJDb2RlfSBvUVJDb2RlXHJcbiAgICAgKi9cclxuICAgIERyYXdpbmcucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAob1FSQ29kZSkge1xyXG4gICAgICAgIHZhciBfaHRPcHRpb24gPSB0aGlzLl9odE9wdGlvbjtcclxuICAgICAgICB2YXIgX2VsID0gdGhpcy5fZWw7XHJcbiAgICAgICAgdmFyIG5Db3VudCA9IG9RUkNvZGUuZ2V0TW9kdWxlQ291bnQoKTtcclxuICAgICAgICB2YXIgbldpZHRoID0gTWF0aC5mbG9vcihfaHRPcHRpb24ud2lkdGggLyBuQ291bnQpO1xyXG4gICAgICAgIHZhciBuSGVpZ2h0ID0gTWF0aC5mbG9vcihfaHRPcHRpb24uaGVpZ2h0IC8gbkNvdW50KTtcclxuICAgICAgICB2YXIgYUhUTUwgPSBbJzx0YWJsZSBzdHlsZT1cImJvcmRlcjowO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtcIj4nXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbkNvdW50OyByb3crKykge1xyXG4gICAgICAgICAgICBhSFRNTC5wdXNoKCc8dHI+Jyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuQ291bnQ7IGNvbCsrKSB7XHJcbiAgICAgICAgICAgICAgICBhSFRNTC5wdXNoKCc8dGQgc3R5bGU9XCJib3JkZXI6MDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7cGFkZGluZzowO21hcmdpbjowO3dpZHRoOicgKyBuV2lkdGggKyAncHg7aGVpZ2h0OicgKyBuSGVpZ2h0ICsgJ3B4O2JhY2tncm91bmQtY29sb3I6JyArIChvUVJDb2RlLmlzRGFyayhyb3csIGNvbCkgPyBfaHRPcHRpb24uY29sb3JEYXJrIDogX2h0T3B0aW9uLmNvbG9yTGlnaHQpICsgJztcIj48L3RkPicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhSFRNTC5wdXNoKCc8L3RyPicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYUhUTUwucHVzaCgnPC90YWJsZT4nKTtcclxuICAgICAgICBfZWwuaW5uZXJIVE1MID0gYUhUTUwuam9pbignJyk7XHJcblxyXG4gICAgICAgIC8vIEZpeCB0aGUgbWFyZ2luIHZhbHVlcyBhcyByZWFsIHNpemUuXHJcbiAgICAgICAgdmFyIGVsVGFibGUgPSBfZWwuY2hpbGROb2Rlc1swXTtcclxuICAgICAgICB2YXIgbkxlZnRNYXJnaW5UYWJsZSA9IChfaHRPcHRpb24ud2lkdGggLSAoZWxUYWJsZS5vZmZzZXRXaWR0aHx8KG5Db3VudCpuV2lkdGgpKSkgLyAyO1xyXG4gICAgICAgIHZhciBuVG9wTWFyZ2luVGFibGUgPSAoX2h0T3B0aW9uLmhlaWdodCAtIChlbFRhYmxlLm9mZnNldEhlaWdodHx8KG5Db3VudCpuSGVpZ2h0KSkpIC8gMjtcclxuXHJcbiAgICAgICAgaWYgKG5MZWZ0TWFyZ2luVGFibGUgPiAwICYmIG5Ub3BNYXJnaW5UYWJsZSA+IDApIHtcclxuICAgICAgICAgICAgZWxUYWJsZS5zdHlsZS5tYXJnaW4gPSBuVG9wTWFyZ2luVGFibGUgKyBcInB4IFwiICsgbkxlZnRNYXJnaW5UYWJsZSArIFwicHhcIjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXIgdGhlIFFSQ29kZVxyXG4gICAgICovXHJcbiAgICBEcmF3aW5nLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9lbC5pbm5lckhUTUwgPSAnJztcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIERyYXdpbmc7XHJcbn0pKCkgOiAoZnVuY3Rpb24gKCkgeyAvLyBEcmF3aW5nIGluIENhbnZhc1xyXG4gICAgZnVuY3Rpb24gX29uTWFrZUltYWdlKCkge1xyXG4gICAgICAgIHRoaXMuX2VsSW1hZ2Uuc3JjID0gdGhpcy5fZWxDYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpO1xyXG4gICAgICAgIHRoaXMuX2VsSW1hZ2Uuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgICAgICB0aGlzLl9lbENhbnZhcy5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQW5kcm9pZCAyLjEgYnVnIHdvcmthcm91bmRcclxuICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9NTE0MVxyXG4gICAgaWYgKHRoaXMuX2FuZHJvaWQgJiYgdGhpcy5fYW5kcm9pZCA8PSAyLjEpIHtcclxuICAgICAgICB2YXIgZmFjdG9yID0gMSAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgICAgIHZhciBkcmF3SW1hZ2UgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLmRyYXdJbWFnZTtcclxuICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLmRyYXdJbWFnZSA9IGZ1bmN0aW9uIChpbWFnZSwgc3gsIHN5LCBzdywgc2gsIGR4LCBkeSwgZHcsIGRoKSB7XHJcbiAgICAgICAgICAgIGlmICgoXCJub2RlTmFtZVwiIGluIGltYWdlKSAmJiAvaW1nL2kudGVzdChpbWFnZS5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAxOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbaV0gPSBhcmd1bWVudHNbaV0gKiBmYWN0b3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGR3ID09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGFyZ3VtZW50c1sxXSAqPSBmYWN0b3I7XHJcbiAgICAgICAgICAgICAgICBhcmd1bWVudHNbMl0gKj0gZmFjdG9yO1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRzWzNdICo9IGZhY3RvcjtcclxuICAgICAgICAgICAgICAgIGFyZ3VtZW50c1s0XSAqPSBmYWN0b3I7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRyYXdJbWFnZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSB1c2VyJ3MgYnJvd3NlciBzdXBwb3J0cyBEYXRhIFVSSSBvciBub3RcclxuICAgICAqIFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZTdWNjZXNzIE9jY3VycyBpZiBpdCBzdXBwb3J0cyBEYXRhIFVSSVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZkZhaWwgT2NjdXJzIGlmIGl0IGRvZXNuJ3Qgc3VwcG9ydCBEYXRhIFVSSVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBfc2FmZVNldERhdGFVUkkoZlN1Y2Nlc3MsIGZGYWlsKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuX2ZGYWlsID0gZkZhaWw7XHJcbiAgICAgICAgc2VsZi5fZlN1Y2Nlc3MgPSBmU3VjY2VzcztcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaXQganVzdCBvbmNlXHJcbiAgICAgICAgaWYgKHNlbGYuX2JTdXBwb3J0RGF0YVVSSSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG4gICAgICAgICAgICB2YXIgZk9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9iU3VwcG9ydERhdGFVUkkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZkZhaWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLl9mRmFpbC5jYWxsKHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB2YXIgZk9uU3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2JTdXBwb3J0RGF0YVVSSSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuX2ZTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZlN1Y2Nlc3MuY2FsbChzZWxmKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGVsLm9uYWJvcnQgPSBmT25FcnJvcjtcclxuICAgICAgICAgICAgZWwub25lcnJvciA9IGZPbkVycm9yO1xyXG4gICAgICAgICAgICBlbC5vbmxvYWQgPSBmT25TdWNjZXNzO1xyXG4gICAgICAgICAgICBlbC5zcmMgPSBcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVVBQUFBRkNBWUFBQUNOYnlibEFBQUFIRWxFUVZRSTEyUDQvLzgvdzM4R0lBWERJQktFMERIeGdsak5CQUFPOVRYTDBZNE9Id0FBQUFCSlJVNUVya0pnZ2c9PVwiOyAvLyB0aGUgSW1hZ2UgY29udGFpbnMgMXB4IGRhdGEuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHNlbGYuX2JTdXBwb3J0RGF0YVVSSSA9PT0gdHJ1ZSAmJiBzZWxmLl9mU3VjY2Vzcykge1xyXG4gICAgICAgICAgICBzZWxmLl9mU3VjY2Vzcy5jYWxsKHNlbGYpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZi5fYlN1cHBvcnREYXRhVVJJID09PSBmYWxzZSAmJiBzZWxmLl9mRmFpbCkge1xyXG4gICAgICAgICAgICBzZWxmLl9mRmFpbC5jYWxsKHNlbGYpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3aW5nIFFSQ29kZSBieSB1c2luZyBjYW52YXNcclxuICAgICAqIFxyXG4gICAgICogQGNvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGh0T3B0aW9uIFFSQ29kZSBPcHRpb25zIFxyXG4gICAgICovXHJcbiAgICB2YXIgRHJhd2luZyA9IGZ1bmN0aW9uIChlbCwgaHRPcHRpb24pIHtcclxuICAgICAgICB0aGlzLl9iSXNQYWludGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fYW5kcm9pZCA9IF9nZXRBbmRyb2lkKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2h0T3B0aW9uID0gaHRPcHRpb247XHJcbiAgICAgICAgdGhpcy5fZWxDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xyXG4gICAgICAgIHRoaXMuX2VsQ2FudmFzLndpZHRoID0gaHRPcHRpb24ud2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZWxDYW52YXMuaGVpZ2h0ID0gaHRPcHRpb24uaGVpZ2h0O1xyXG4gICAgICAgIGVsLmFwcGVuZENoaWxkKHRoaXMuX2VsQ2FudmFzKTtcclxuICAgICAgICB0aGlzLl9lbCA9IGVsO1xyXG4gICAgICAgIHRoaXMuX29Db250ZXh0ID0gdGhpcy5fZWxDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgIHRoaXMuX2JJc1BhaW50ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9lbEltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcclxuICAgICAgICB0aGlzLl9lbEltYWdlLmFsdCA9IFwiU2NhbiBtZSFcIjtcclxuICAgICAgICB0aGlzLl9lbEltYWdlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLl9lbC5hcHBlbmRDaGlsZCh0aGlzLl9lbEltYWdlKTtcclxuICAgICAgICB0aGlzLl9iU3VwcG9ydERhdGFVUkkgPSBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXcgdGhlIFFSQ29kZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1FSQ29kZX0gb1FSQ29kZSBcclxuICAgICAqL1xyXG4gICAgRHJhd2luZy5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChvUVJDb2RlKSB7XHJcbiAgICAgICAgdmFyIF9lbEltYWdlID0gdGhpcy5fZWxJbWFnZTtcclxuICAgICAgICB2YXIgX29Db250ZXh0ID0gdGhpcy5fb0NvbnRleHQ7XHJcbiAgICAgICAgdmFyIF9odE9wdGlvbiA9IHRoaXMuX2h0T3B0aW9uO1xyXG5cclxuICAgICAgICB2YXIgbkNvdW50ID0gb1FSQ29kZS5nZXRNb2R1bGVDb3VudCgpO1xyXG4gICAgICAgIHZhciBuV2lkdGggPSBfaHRPcHRpb24ud2lkdGggLyBuQ291bnQ7XHJcbiAgICAgICAgdmFyIG5IZWlnaHQgPSBfaHRPcHRpb24uaGVpZ2h0IC8gbkNvdW50O1xyXG4gICAgICAgIHZhciBuUm91bmRlZFdpZHRoID0gTWF0aC5yb3VuZChuV2lkdGgpO1xyXG4gICAgICAgIHZhciBuUm91bmRlZEhlaWdodCA9IE1hdGgucm91bmQobkhlaWdodCk7XHJcblxyXG4gICAgICAgIF9lbEltYWdlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IG5Db3VudDsgcm93KyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgbkNvdW50OyBjb2wrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJJc0RhcmsgPSBvUVJDb2RlLmlzRGFyayhyb3csIGNvbCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbkxlZnQgPSBjb2wgKiBuV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgblRvcCA9IHJvdyAqIG5IZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBfb0NvbnRleHQuc3Ryb2tlU3R5bGUgPSBiSXNEYXJrID8gX2h0T3B0aW9uLmNvbG9yRGFyayA6IF9odE9wdGlvbi5jb2xvckxpZ2h0O1xyXG4gICAgICAgICAgICAgICAgX29Db250ZXh0LmxpbmVXaWR0aCA9IDE7XHJcbiAgICAgICAgICAgICAgICBfb0NvbnRleHQuZmlsbFN0eWxlID0gYklzRGFyayA/IF9odE9wdGlvbi5jb2xvckRhcmsgOiBfaHRPcHRpb24uY29sb3JMaWdodDtcclxuICAgICAgICAgICAgICAgIF9vQ29udGV4dC5maWxsUmVjdChuTGVmdCwgblRvcCwgbldpZHRoLCBuSGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyDslYjti7Ag7JWo66as7Ja07IuxIOuwqeyngCDsspjrpqxcclxuICAgICAgICAgICAgICAgIF9vQ29udGV4dC5zdHJva2VSZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IobkxlZnQpICsgMC41LFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoblRvcCkgKyAwLjUsXHJcbiAgICAgICAgICAgICAgICAgICAgblJvdW5kZWRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBuUm91bmRlZEhlaWdodFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBfb0NvbnRleHQuc3Ryb2tlUmVjdChcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLmNlaWwobkxlZnQpIC0gMC41LFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChuVG9wKSAtIDAuNSxcclxuICAgICAgICAgICAgICAgICAgICBuUm91bmRlZFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIG5Sb3VuZGVkSGVpZ2h0XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9iSXNQYWludGVkID0gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYWtlIHRoZSBpbWFnZSBmcm9tIENhbnZhcyBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBEYXRhIFVSSS5cclxuICAgICAqL1xyXG4gICAgRHJhd2luZy5wcm90b3R5cGUubWFrZUltYWdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9iSXNQYWludGVkKSB7XHJcbiAgICAgICAgICAgIF9zYWZlU2V0RGF0YVVSSS5jYWxsKHRoaXMsIF9vbk1ha2VJbWFnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSBRUkNvZGUgaXMgcGFpbnRlZCBvciBub3RcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgRHJhd2luZy5wcm90b3R5cGUuaXNQYWludGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9iSXNQYWludGVkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFyIHRoZSBRUkNvZGVcclxuICAgICAqL1xyXG4gICAgRHJhd2luZy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fb0NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuX2VsQ2FudmFzLndpZHRoLCB0aGlzLl9lbENhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuX2JJc1BhaW50ZWQgPSBmYWxzZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG5OdW1iZXJcclxuICAgICAqL1xyXG4gICAgRHJhd2luZy5wcm90b3R5cGUucm91bmQgPSBmdW5jdGlvbiAobk51bWJlcikge1xyXG4gICAgICAgIGlmICghbk51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbk51bWJlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKG5OdW1iZXIgKiAxMDAwKSAvIDEwMDA7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBEcmF3aW5nO1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgdHlwZSBieSBzdHJpbmcgbGVuZ3RoXHJcbiAqIFxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gc1RleHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG5Db3JyZWN0TGV2ZWxcclxuICogQHJldHVybiB7TnVtYmVyfSB0eXBlXHJcbiAqL1xyXG5mdW5jdGlvbiBfZ2V0VHlwZU51bWJlcihzVGV4dCwgbkNvcnJlY3RMZXZlbCkge1xyXG4gICAgdmFyIG5UeXBlID0gMTtcclxuICAgIHZhciBsZW5ndGggPSBfZ2V0VVRGOExlbmd0aChzVGV4dCk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IFFSQ29kZUxpbWl0TGVuZ3RoLmxlbmd0aDsgaSA8PSBsZW47IGkrKykge1xyXG4gICAgICAgIHZhciBuTGltaXQgPSAwO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKG5Db3JyZWN0TGV2ZWwpIHtcclxuICAgICAgICAgICAgY2FzZSBRUkVycm9yQ29ycmVjdExldmVsLkw6XHJcbiAgICAgICAgICAgICAgICBuTGltaXQgPSBRUkNvZGVMaW1pdExlbmd0aFtpXVswXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFFSRXJyb3JDb3JyZWN0TGV2ZWwuTTpcclxuICAgICAgICAgICAgICAgIG5MaW1pdCA9IFFSQ29kZUxpbWl0TGVuZ3RoW2ldWzFdO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUVJFcnJvckNvcnJlY3RMZXZlbC5ROlxyXG4gICAgICAgICAgICAgICAgbkxpbWl0ID0gUVJDb2RlTGltaXRMZW5ndGhbaV1bMl07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBRUkVycm9yQ29ycmVjdExldmVsLkg6XHJcbiAgICAgICAgICAgICAgICBuTGltaXQgPSBRUkNvZGVMaW1pdExlbmd0aFtpXVszXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxlbmd0aCA8PSBuTGltaXQpIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgblR5cGUrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5UeXBlID4gUVJDb2RlTGltaXRMZW5ndGgubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVG9vIGxvbmcgZGF0YVwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gblR5cGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9nZXRVVEY4TGVuZ3RoKHNUZXh0KSB7XHJcbiAgICB2YXIgcmVwbGFjZWRUZXh0ID0gZW5jb2RlVVJJKHNUZXh0KS50b1N0cmluZygpLnJlcGxhY2UoL1xcJVswLTlhLWZBLUZdezJ9L2csICdhJyk7XHJcbiAgICByZXR1cm4gcmVwbGFjZWRUZXh0Lmxlbmd0aCArIChyZXBsYWNlZFRleHQubGVuZ3RoICE9IHNUZXh0ID8gMyA6IDApO1xyXG59XHJcblxyXG4vKipcclxuICogQGNsYXNzIFFSQ29kZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGV4YW1wbGUgXHJcbiAqIG5ldyBRUkNvZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZXN0XCIpLCBcImh0dHA6Ly9qaW5kby5kZXYubmF2ZXIuY29tL2NvbGxpZVwiKTtcclxuICpcclxuICogQGV4YW1wbGVcclxuICogdmFyIG9RUkNvZGUgPSBuZXcgUVJDb2RlKFwidGVzdFwiLCB7XHJcbiAqICAgIHRleHQgOiBcImh0dHA6Ly9uYXZlci5jb21cIixcclxuICogICAgd2lkdGggOiAxMjgsXHJcbiAqICAgIGhlaWdodCA6IDEyOFxyXG4gKiB9KTtcclxuICogXHJcbiAqIG9RUkNvZGUuY2xlYXIoKTsgLy8gQ2xlYXIgdGhlIFFSQ29kZS5cclxuICogb1FSQ29kZS5tYWtlQ29kZShcImh0dHA6Ly9tYXAubmF2ZXIuY29tXCIpOyAvLyBSZS1jcmVhdGUgdGhlIFFSQ29kZS5cclxuICpcclxuICogQHBhcmFtIHtIVE1MRWxlbWVudHxTdHJpbmd9IGVsIHRhcmdldCBlbGVtZW50IG9yICdpZCcgYXR0cmlidXRlIG9mIGVsZW1lbnQuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gdk9wdGlvblxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdk9wdGlvbi50ZXh0IFFSQ29kZSBsaW5rIGRhdGFcclxuICogQHBhcmFtIHtOdW1iZXJ9IFt2T3B0aW9uLndpZHRoPTI1Nl1cclxuICogQHBhcmFtIHtOdW1iZXJ9IFt2T3B0aW9uLmhlaWdodD0yNTZdXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBbdk9wdGlvbi5jb2xvckRhcms9XCIjMDAwMDAwXCJdXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBbdk9wdGlvbi5jb2xvckxpZ2h0PVwiI2ZmZmZmZlwiXVxyXG4gKiBAcGFyYW0ge1FSQ29kZS5Db3JyZWN0TGV2ZWx9IFt2T3B0aW9uLmNvcnJlY3RMZXZlbD1RUkNvZGUuQ29ycmVjdExldmVsLkhdIFtMfE18UXxIXSBcclxuICovXHJcblFSQ29kZSA9IGZ1bmN0aW9uIChlbCwgdk9wdGlvbikge1xyXG4gICAgdGhpcy5faHRPcHRpb24gPSB7XHJcbiAgICAgICAgd2lkdGg6IDI1NixcclxuICAgICAgICBoZWlnaHQ6IDI1NixcclxuICAgICAgICB0eXBlTnVtYmVyOiA0LFxyXG4gICAgICAgIGNvbG9yRGFyazogXCIjMDAwMDAwXCIsXHJcbiAgICAgICAgY29sb3JMaWdodDogXCIjZmZmZmZmXCIsXHJcbiAgICAgICAgY29ycmVjdExldmVsOiBRUkVycm9yQ29ycmVjdExldmVsLkhcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHR5cGVvZiB2T3B0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHZPcHRpb24gPSB7XHJcbiAgICAgICAgICAgIHRleHQ6IHZPcHRpb25cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE92ZXJ3cml0ZXMgb3B0aW9uc1xyXG4gICAgaWYgKHZPcHRpb24pIHtcclxuICAgICAgICBmb3IgKHZhciBpIGluIHZPcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5faHRPcHRpb25baV0gPSB2T3B0aW9uW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGVsID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faHRPcHRpb24udXNlU1ZHKSB7XHJcbiAgICAgICAgRHJhd2luZyA9IHN2Z0RyYXdlcjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hbmRyb2lkID0gX2dldEFuZHJvaWQoKTtcclxuICAgIHRoaXMuX2VsID0gZWw7XHJcbiAgICB0aGlzLl9vUVJDb2RlID0gbnVsbDtcclxuICAgIHRoaXMuX29EcmF3aW5nID0gbmV3IERyYXdpbmcodGhpcy5fZWwsIHRoaXMuX2h0T3B0aW9uKTtcclxuXHJcbiAgICBpZiAodGhpcy5faHRPcHRpb24udGV4dCkge1xyXG4gICAgICAgIHRoaXMubWFrZUNvZGUodGhpcy5faHRPcHRpb24udGV4dCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogTWFrZSB0aGUgUVJDb2RlXHJcbiAqIFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gc1RleHQgbGluayBkYXRhXHJcbiAqL1xyXG5RUkNvZGUucHJvdG90eXBlLm1ha2VDb2RlID0gZnVuY3Rpb24gKHNUZXh0KSB7XHJcbiAgICB0aGlzLl9vUVJDb2RlID0gbmV3IFFSQ29kZU1vZGVsKF9nZXRUeXBlTnVtYmVyKHNUZXh0LCB0aGlzLl9odE9wdGlvbi5jb3JyZWN0TGV2ZWwpLCB0aGlzLl9odE9wdGlvbi5jb3JyZWN0TGV2ZWwpO1xyXG4gICAgdGhpcy5fb1FSQ29kZS5hZGREYXRhKHNUZXh0KTtcclxuICAgIHRoaXMuX29RUkNvZGUubWFrZSgpO1xyXG4gICAgdGhpcy5fZWwudGl0bGUgPSBzVGV4dDtcclxuICAgIHRoaXMuX29EcmF3aW5nLmRyYXcodGhpcy5fb1FSQ29kZSk7XHJcbiAgICB0aGlzLm1ha2VJbWFnZSgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1ha2UgdGhlIEltYWdlIGZyb20gQ2FudmFzIGVsZW1lbnRcclxuICogLSBJdCBvY2N1cnMgYXV0b21hdGljYWxseVxyXG4gKiAtIEFuZHJvaWQgYmVsb3cgMyBkb2Vzbid0IHN1cHBvcnQgRGF0YS1VUkkgc3BlYy5cclxuICogXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5RUkNvZGUucHJvdG90eXBlLm1ha2VJbWFnZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0eXBlb2YgdGhpcy5fb0RyYXdpbmcubWFrZUltYWdlID09IFwiZnVuY3Rpb25cIiAmJiAoIXRoaXMuX2FuZHJvaWQgfHwgdGhpcy5fYW5kcm9pZCA+PSAzKSkge1xyXG4gICAgICAgIHRoaXMuX29EcmF3aW5nLm1ha2VJbWFnZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFyIHRoZSBRUkNvZGVcclxuICovXHJcblFSQ29kZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9vRHJhd2luZy5jbGVhcigpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIFFSQ29kZS5Db3JyZWN0TGV2ZWxcclxuICovXHJcblFSQ29kZS5Db3JyZWN0TGV2ZWwgPSBRUkVycm9yQ29ycmVjdExldmVsO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBRUkNvZGU7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vanMvbW9kdWxlcy9xcmNvZGUuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiOyAoZnVuY3Rpb24gKCQpIHtcbiAgLy9yZXF1aXJlKFwiLi9tb2R1bGVzL3NoYXJlLmxlc3NcIik7XG4gIHZhciBjc3MgPSByZXF1aXJlKFwiLi9tb2R1bGVzL2Nzcy5odG1sXCIpO1xuICB2YXIgcXJjb2RlID0gcmVxdWlyZShcIi4vbW9kdWxlcy9xcmNvZGVcIik7XG4gIHZhciB3ZWl4aW5zaGFyZSA9IHJlcXVpcmUoXCIuL21vZHVsZXMvd2VpeGluc2hhcmVcIik7XG4gIHZhciBodG1sID0gcmVxdWlyZShcIi4vbW9kdWxlcy9zaGFyZS5odG1sXCIpO1xuICB2YXIgd3hodG1sID0gcmVxdWlyZShcIi4vbW9kdWxlcy93eGJveC5odG1sXCIpO1xuICB2YXIgd2VpeGluc2hhcmUgPSByZXF1aXJlKFwiLi9tb2R1bGVzL3dlaXhpbnNoYXJlXCIpO1xuICB2YXIgZGVmID0ge1xuICAgIHRpdGxlOiBkb2N1bWVudC50aXRsZSxcbiAgICBkZXNjOiAkKFwibWV0YVtuYW1lPWRlc2NyaXB0aW9uXVwiKS5hdHRyKFwiY29udGVudFwiKSxcbiAgICBsaW5rOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICBpbWdVcmw6ICgkKFwiI3dlaXhpbi1zaGFyZVwiKS5sZW5ndGggJiYgJChcIiN3ZWl4aW4tc2hhcmVcIilbMF0uc3JjKSB8fCBcImh0dHA6Ly9jbXNqcy5lYXN0bW9uZXkuY29tL2NvbW1vbi93ZWl4aW4tc2hhcmUucG5nXCIsXG4gICAgZG9tOiBcIi5lbXNoYXJlMjAyMFwiLFxuICAgIHFyd2lkdGg6IDIwNVxuICB9O1xuICB2YXIgb3B0aW9uLCBib3g7XG4gIGZ1bmN0aW9uIHdlYihvcHQpIHtcbiAgICBvcHRpb24gPSAkLmV4dGVuZChkZWYsIG9wdCk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2luaXQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZSAmJiBjb25zb2xlLmluZm8oZXJyb3IpO1xuICAgIH1cbiAgfVxuICB3ZWIucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF1cbiAgICAgICwgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBuLnR5cGUgPSBcInRleHQvY3NzXCIsXG4gICAgICBuLnN0eWxlU2hlZXQgPyBuLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcyA6IG4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSksXG4gICAgICB0LmFwcGVuZENoaWxkKG4pXG4gICAgc2V0KCk7XG4gIH07XG4gIHdlYi5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9wdCkge1xuICAgIG9wdGlvbiA9ICQuZXh0ZW5kKG9wdGlvbiwgb3B0KTtcbiAgICBzZXQoKTtcbiAgfTtcbiAgd2ViLnByb3RvdHlwZS5xcmNvZGUgPSBmdW5jdGlvbiAob3B0KSB7XG4gICAgJChcIiNcIiArIG9wdC5kb21pZCkuZW1wdHkoKS5jc3MoeyBcInBvc2l0aW9uXCI6IFwicmVsYXRpdmVcIiB9KTtcbiAgICB2YXIgd2lkdGggPSBvcHQud2lkdGggfHwgMTM1O1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdC5kb21pZCkgJiYgKG5ldyBxcmNvZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0LmRvbWlkKSwge1xuICAgICAgdGV4dDogb3B0LmxpbmssXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IHdpZHRoLFxuICAgICAgY29sb3JEYXJrOiBvcHQuY29sb3JEYXJrIHx8IFwiIzAwMDAwMFwiLFxuICAgICAgY29sb3JMaWdodDogb3B0LmNvbG9yTGlnaHQgfHwgXCIjZmZmZmZmXCJcbiAgICB9KSk7XG4gICAgdmFyIGxvZ29oID0gd2lkdGggLyA1O1xuICAgIHZhciB0b3AgPSAod2lkdGggLSBsb2dvaCkgLyAyO1xuICAgIGlmIChvcHQubG9nb3NyYyAhPSBcIm5vbmVcIikge1xuICAgICAgdmFyIGRlZnVsdGxvZ29zcmMgPSBcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaE1nQXlBTVFBQU81elV2R1JjUFNya3ZDTFZ1cGJGT1kxQXZyV3lmakp1T3RpRlA3NitPbFVGT2hERk9kREF1eHNOT3BXS09jOEZPUW5BT0VPQVBhNW9PbEtFL3ZqMmVsVEIvM3I1ZjN5N2ZPZ2h1cFdIZk9mZHVoSEgrOStXT2xNSmVoQUZQLy8veUgvQzFoTlVDQkVZWFJoV0UxUVBEOTRjR0ZqYTJWMElHSmxaMmx1UFNMdnU3OGlJR2xrUFNKWE5VMHdUWEJEWldocFNIcHlaVk42VGxSamVtdGpPV1FpUHo0Z1BIZzZlRzF3YldWMFlTQjRiV3h1Y3pwNFBTSmhaRzlpWlRwdWN6cHRaWFJoTHlJZ2VEcDRiWEIwYXowaVFXUnZZbVVnV0UxUUlFTnZjbVVnTlM0MkxXTXhNemdnTnprdU1UVTVPREkwTENBeU1ERTJMekE1THpFMExUQXhPakE1T2pBeElDQWdJQ0FnSUNBaVBpQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQaUE4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWlCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlJSGh0Ykc1ek9uaHRjRTFOUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmJXMHZJaUI0Yld4dWN6cHpkRkpsWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wzTlVlWEJsTDFKbGMyOTFjbU5sVW1WbUl5SWdlRzF3T2tOeVpXRjBiM0pVYjI5c1BTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ1EwTWdNakF4TnlBb1YybHVaRzkzY3lraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk5EWTVSREk1TVRnMk9FUkVNVEZGUVRoRE5ERkVNRUk0UlRJelJqTXhORGdpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TkRZNVJESTVNVGsyT0VSRU1URkZRVGhETkRGRU1FSTRSVEl6UmpNeE5EZ2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG8wTmpsRU1qa3hOalk0UkVReE1VVkJPRU0wTVVRd1FqaEZNak5HTXpFME9DSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEbzBOamxFTWpreE56WTRSRVF4TVVWQk9FTTBNVVF3UWpoRk1qTkdNekUwT0NJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BnSC8vdjM4Ky9yNStQZjI5ZlR6OHZIdzcrN3Q3T3ZxNmVqbjV1WGs0K0xoNE4vZTNkemIydG5ZMTliVjFOUFMwZERQenMzTXk4ckp5TWZHeGNURHdzSEF2NzY5dkx1NnViaTN0clcwczdLeHNLK3VyYXlycXFtb3A2YWxwS09pb2FDZm5wMmNtNXFabUplV2xaU1RrcEdRajQ2TmpJdUtpWWlIaG9XRWc0S0JnSDkrZlh4N2VubDRkM1oxZEhOeWNYQnZibTFzYTJwcGFHZG1aV1JqWW1GZ1gxNWRYRnRhV1ZoWFZsVlVVMUpSVUU5T1RVeExTa2xJUjBaRlJFTkNRVUEvUGowOE96bzVPRGMyTlRRek1qRXdMeTR0TENzcUtTZ25KaVVrSXlJaElCOGVIUndiR2hrWUZ4WVZGQk1TRVJBUERnME1Dd29KQ0FjR0JRUURBZ0VBQUNINUJBQUFBQUFBTEFBQUFBQXlBRElBQUFYLzRDZU9aR21lYUtxdWJPdU9sTUFCZEczZmVNNWhsSHR4ajZCd1NDdytDa2Vra1dOWkdUckdhTFJRY0hnZ0h1UEdrS0pJdjBTSXBMRTVIQ0dGTEpGN2dvSy8xODRuRUVrY0lCeXFXcmhKbURBZWdZS0RoSVVlQ3dVUkIzT0tId3NZQm1pRkFTVUpHNGFZaFFzUVlpSjBpd0lSSHhJUkQ0UUxmaU1HbWF5SGlSMkxJZ0FRVFI4UWxIUUxoTEVpQWd1L3dNSEN3WWtQR0NRSkVISWlEUkFpSFJEQ3h5TUJ3OWEvSGdXY0d3RVhKYVNVSWhpTmtZZkE0U0ljMThGWDJ4d1NxU1VPRVQwaTRMTFJ3QndrNnNQWjJtZ2NCRGpnRFFVcEFDUU9STmozNFU0d2h1bUNUZEJXWUVFRERnTFlxRWlRcUo0SWhRaEZaS2o0QytLSGZnc20venFRWUtDV0N3QVJOSlFJRmZKa3ZnVW1PVXpZR2FUZ0MwWU9UTkNCaUFIQ3pnazVqOTc2NlNrQ0JJOGpZS0tUWUhSbjBwMmRYaVNBQ1lIWGlBUVpJZ2dZY2FEQTBhc1R2YTQ0TUM5ckNRTlVOTUk5eSs5b0FZMHFMZ1FBS0FIRnVBeng1bHF0dTdPQVdoTUpNRXpneE9Ed2lBWVJCcEFRakpUd3hMNG9FZ2h3Z0FaQ0E2Z2w3blJOYUhid0NKMVl4NXE0c0xremcya3BtbVVJWGJyeWFRVzRDNkFUUVVHREFnZ01HQlRnQU5xRWFOVWpKSmpGblJPM2d1RWk3SEJnQUZ4QmNNd3JNa0JRRUU5Y0FlZk5jVE5vSUNHQUF5b1RjRTlnZ0RlRkJrN0lSd3o0enB5ZmN3VVRDekM0LzN4M0NyZ0Z6R1pDQS92VmR4dC9DRDZIWGY4S0NlUjMyQVhXZ1dkZmd2d1ZzQ0FLRFZBaG1Ra0dGR2lnQ0FOUVdLRk1LdXhWUlhjakNFQWZiaHVDS09KOUROUjBnZ1pVS09CVENmUGQxK0lISWI2SVd3VU1GT2VKZmtGbVJvQ0hDdXpZbzQ4RUZBQWJDZk5WWUZnS0J5Q1pKSlFFWktubGxsc3lnRUFsQUJUUTVJNG0wTWlsa2x5bXVlV1VJaGlBZ0pqV0NSa2RBaFdjaWFXYWFzWW9nZ2JCWlZrQkFpaVNsdWFPQWVCcEtBWVoxdWtub0NrTXdNQ2dKR2hnS0o1OWNza2VDaFpVb09pV0pOb3o2YWRka2prQ2pRaWtHUjhGb0taNlpIc2ZYS0NwbXUwMWdNQ3N0TlpxNjYyMWVva2lxYmMyWUJ5dXdBWTdxNTRqdVBybnJSZUNLT3l5dGpMUW9xTzRtb1NNck14VzYydzJRMTcyR3VoWEExUnI3UUFOSEZ2ckFEY2FSSzIzd1dwcUszay9HU0NCQmdFTUlPKzg5TlpyNzd3QmFNQVNVL3oyNisrL0xvUUFBRHM9XCI7XG4gICAgICB2YXIgbG9nbyA9ICQoJzxpbWc+JykuY3NzKHtcbiAgICAgICAgXCJ3aWR0aFwiOiBsb2dvaCxcbiAgICAgICAgXCJoZWlnaHRcIjogbG9nb2gsXG4gICAgICAgIFwicG9zaXRpb25cIjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICBcInRvcFwiOiB0b3AsXG4gICAgICAgIFwibGVmdFwiOiB0b3BcbiAgICAgIH0pO1xuICAgICAgbG9nby5hdHRyKHsgXCJzcmNcIjogb3B0LmxvZ29zcmMgfHwgZGVmdWx0bG9nb3NyYyB9KVxuICAgICAgJChcIiNcIiArIG9wdC5kb21pZCkuYXBwZW5kKGxvZ28pXG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiBzZXQoKSB7XG4gICAgYm94ID0gJChodG1sKTtcbiAgICAkKG9wdGlvbi5kb20pLmVtcHR5KCk7XG4gICAgJChcIi5lbXNoYXJlMjAyMF93ZWl4aW5fcG9wdXBcIikucmVtb3ZlKCk7XG4gICAgJChcIi5lbXNoYXJlMjAyMF9pY29uX2d1YmFcIiwgYm94KS5hdHRyKFwiaHJlZlwiLCBjcmVhdGVIcmVmKFwiZ3ViYVwiKSk7XG4gICAgJChcIi5lbXNoYXJlMjAyMF9pY29uX3dlaWJvXCIsIGJveCkuYXR0cihcImhyZWZcIiwgY3JlYXRlSHJlZihcIndlaWJvXCIpKTtcbiAgICAkKFwiLmVtc2hhcmUyMDIwX2ljb25fcXpvbmVcIiwgYm94KS5hdHRyKFwiaHJlZlwiLCBjcmVhdGVIcmVmKFwicXpvbmVcIikpO1xuICAgICQob3B0aW9uLmRvbSkuYXBwZW5kKGJveCk7XG4gICAgJChcIi5lbXNoYXJlMjAyMF9pY29uX3dlaXhpblwiKS51bmJpbmQoKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBTaG93V2VpeGluUXJjb2RlKCk7XG4gICAgfSlcbiAgICB3ZWl4aW5zaGFyZShvcHRpb24pO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUhyZWYodCkge1xuICAgIHN3aXRjaCAodCkge1xuICAgICAgY2FzZSBcImd1YmFcIjpcbiAgICAgICAgcmV0dXJuIFwiaHR0cDovL2diLmVhc3Rtb25leS5jb20vc2hhcmUuYXNweD91cmw9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob3B0aW9uLmxpbmspICtcbiAgICAgICAgICBcIiZ0aXRsZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChvcHRpb24udGl0bGUpO1xuICAgICAgY2FzZSBcIndlaWJvXCI6XG4gICAgICAgIHJldHVybiBcImh0dHA6Ly9zZXJ2aWNlLndlaWJvLmNvbS9zaGFyZS9zaGFyZS5waHA/dXJsPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbi5saW5rKSArXG4gICAgICAgICAgXCImdGl0bGU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob3B0aW9uLnRpdGxlKSArIFwiJnNlYXJjaFBpYz1mYWxzZSZwaWM9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob3B0aW9uLmltZ1VybCk7XG4gICAgICBjYXNlIFwicXpvbmVcIjpcbiAgICAgICAgcmV0dXJuIFwiaHR0cDovL3Nucy5xem9uZS5xcS5jb20vY2dpLWJpbi9xenNoYXJlL2NnaV9xenNoYXJlX29uZWtleT91cmw9XCIgK1xuICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChvcHRpb24ubGluaykgKyBcIiZ0aXRsZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChvcHRpb24udGl0bGUpICsgXCImZGVzYz1cIiArIGVuY29kZVVSSUNvbXBvbmVudChvcHRpb24uZGVzYykgK1xuICAgICAgICAgIFwiJnBpY3M9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob3B0aW9uLmltZ1VybCk7XG4gICAgICBjYXNlIFwid2VpeGluXCI6XG4gICAgICAgIHJldHVybiBcIi8vY29tZXQuYmxvZy5zaW5hLmNvbS5jbi9xcj9cIiArIHRoaXMuY29uZmlnLnd4dXJsO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBTaG93V2VpeGluUXJjb2RlKCkge1xuICAgIGlmICgkKFwiLmVtc2hhcmUyMDIwX3dlaXhpbl9wb3B1cFwiKS5sZW5ndGggPiAwKSB7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgJChcImJvZHlcIikuYXBwZW5kKHd4aHRtbCk7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVtc2hhcmUyMDIwX3dlaXhpbl9wb3B1cF9tYWluXCIpICYmIChuZXcgcXJjb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZW1zaGFyZTIwMjBfd2VpeGluX3BvcHVwX21haW5cIiksIHtcbiAgICAgICAgdGV4dDogb3B0aW9uLmxpbmssXG4gICAgICAgIHdpZHRoOiBvcHRpb24ucXJ3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBvcHRpb24ucXJ3aWR0aCxcbiAgICAgICAgY29sb3JEYXJrOiBcIiMwMDAwMDBcIixcbiAgICAgICAgY29sb3JMaWdodDogXCIjZmZmZmZmXCJcbiAgICAgIH0pKTtcbiAgICAgICQoXCIuZW1zaGFyZTIwMjBfd2VpeGluX3BvcHVwX2Nsb3NlXCIpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChcIi5lbXNoYXJlMjAyMF93ZWl4aW5fcG9wdXBcIikuaGlkZSgpO1xuICAgICAgfSlcbiAgICB9XG4gICAgJChcIi5lbXNoYXJlMjAyMF93ZWl4aW5fcG9wdXBcIikuc2hvdygpLmNzcyh7IFwid2lkdGhcIjogb3B0aW9uLnFyd2lkdGggKyAzNSwgXCJoZWlnaHRcIjogb3B0aW9uLnFyd2lkdGggKyA5NSwgXCJtYXJnaW4tdG9wXCI6IDAgLSAob3B0aW9uLnFyd2lkdGggKyA5NSkgLyAyLCBcIm1hcmdpbi1sZWZ0XCI6IDAgLSAob3B0aW9uLnFyd2lkdGggKyAzNSkgLyAyIH0pO1xuICB9XG4gIHdpbmRvdy5lbXNoYXJlMjAyMCA9IHdlYjtcbn0pKGpRdWVyeSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL3NoYXJlLmpzXG4vLyBtb2R1bGUgaWQgPSA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="]}