(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/util/cli_log.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, '269e49DJp9NJa8HiulckyVD', 'cli_log'); // Scripts/util/cli_log.js "use strict"; //日志上报 //zys var LOG_TYPE = { device: "device", flash: "flash", advice: "advice", load_start: "load_start", load_end: "load_end", reg_acc: "reg_acc", select_srv: "select_srv", create_role: "create_role", get_def_srv: "get_def_srv", enter_city: "enter_city" }; //是否记录日志 var _is_log = true; _is_log = _is_log && LOG_URL != null; window.cli_log = { //日志上报 log_to_web: function log_to_web(url_type, log_args) { return; if (!_is_log) return; var url = LOG_URL + url_type; // console.log("上报开始url===", url) var date_time = Math.ceil(Date.now() / 1000); var body = "?date_time=" + this.log_url_encode(date_time); var sign = this.getSignValue(date_time); body = body + "&sign=" + sign; for (var k in log_args) { body = body + "&" + k + "=" + this.log_url_encode(log_args[k]); } url = url + body; console.log(url_type, log_args.step); // console.log("push_log==>", url); var xhr = cc.loader.getXMLHttpRequest(); xhr.open("POST", url); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status >= 200 && xhr.status <= 207) { var result = JSON.parse(xhr.responseText); // console.log("result==>", result) if (result["success"] == false) { // console.log(result["message"]); return; } } }.bind(this); xhr.send(); }, getSignValue: function getSignValue(date_time) { return; var value = ""; var key = SIGN_KEY; value = value + PLATFORM_TYPR; value = value + date_time; value = value + key; var MD5 = require("md5.min"); value = MD5(value); value = value.toLowerCase(); return value; }, //上报信息到注册服 log_to_idfa_web: function log_to_idfa_web(body) {// if (!window.CONF_IDFA_WEB) return // let url = window.CONF_IDFA_WEB }, //url编码 log_url_encode: function log_url_encode(str) { return; str = String(str); var _str = str; str = str.replace(/\n/g, "\\r\\n"); var format = function format(c) { return cc.js.formatStr("%%%02X", c.charCodeAt(0)); }; str = str.replace("([^%w ])", format); str = str.replace(" ", "+"); // console.log(_str, "=====url_str======>", str) return str; }, //获取设备基本信息 log_get_device_info: function log_get_device_info() { return; var channel = window.CHANNEL; var pro = "h5sszg"; var plat = PLATFORM_NAME; return { device_id: SDK ? SDK.getUid() : "1" //暂时用uid代替 , device_type: 1 //暂时没获取 , os: cc.sys.os, carrier: "" //暂时没获取 , network_type: cc.sys.getNetworkType() == 1 ? "wifi" : "数据", resolution: '', product_name: pro, platform_name: plat, channel_name: channel }; }, //获取日志当前标识 log_flag: function log_flag(key, val) { return; if (!_is_log) return false; val = val || 1; var str = ""; if (PLATFORM_TYPR == "SH_RH") { str = "shrh_log_flag"; } var uid = ""; if (SDK) { uid = SDK.getUid(); } else { uid = "3"; } console.log(uid, key, val); console.log("日志bool==", gcore.SysEnv.get(str) == cc.js.formatStr("uid=%s&key=%s&val=%s", uid, key, val), gcore.SysEnv.get(str), cc.js.formatStr("uid=%s&key=%s&val=%s", uid, key, val)); if (gcore.SysEnv.get(str) == cc.js.formatStr("uid=%s&key=%s&val=%s", uid, key, val)) { return false; } else { gcore.SysEnv.set(str, cc.js.formatStr("uid=%s&key=%s&val=%s", uid, key, val)); return true; } }, //设备激活 log_activate_device: function log_activate_device() { return; if (this.log_flag(LOG_TYPE.device)) { //未上报过 上报一次 var log = this.log_get_device_info(); this.log_to_web("/device/activation", log); } }, //闪屏 step.1 log_flash: function log_flash() { return; if (this.log_flag(LOG_TYPE.flash)) { //未上报过 上报一次 var log = this.log_get_device_info(); log.step = 1; this.log_to_web("/entry/step", log); } }, // 忠告 step.2 log_advice: function log_advice() { return; if (this.log_flag(LOG_TYPE.advice)) { //未上报过 上报一次 var log = this.log_get_device_info(); log.step = 2; this.log_to_web("/entry/step", log); } }, //加载游戏开始 step.3 log_loading_start: function log_loading_start() { return; if (this.log_flag(LOG_TYPE.load_start)) { //未上报过 上报一次 var log = this.log_get_device_info(); log.step = 3; this.log_to_web("/entry/step", log); } }, // 加载游戏结束 step.4 log_loading_end: function log_loading_end() { return; if (this.log_flag(LOG_TYPE.load_end)) { //未上报过 上报一次 var log = this.log_get_device_info(); log.step = 4; this.log_to_web("/entry/step", log); } }, //注册账号 step.5 log_reg_account: function log_reg_account(account) { return; if (this.log_flag(LOG_TYPE.reg_acc)) { //未上报过 上报一次 var log = this.log_get_device_info(); log.step = 5; log.account_id = account; log.account_name = account; this.log_to_web("/entry/step", log); } }, //选服 step.6 log_select_server: function log_select_server(account) { return; if (this.log_flag(LOG_TYPE.select_srv)) { //未上报过 上报一次 var log = this.log_get_device_info(); log.step = 6; log.account_id = account; log.account_name = account; this.log_to_web("/entry/step", log); } }, //创建角色 step.7 log_create_role: function log_create_role(account) { return; this.log_select_server(account); //防止有选服地方没处理到 if (this.log_flag(LOG_TYPE.select_srv)) { //未上报过 上报一次 var log = this.log_get_device_info(); log.step = 7; log.account_id = account; log.account_name = account; this.log_to_web("/entry/step", log); } }, //起名 step.8 log_enter_city: function log_enter_city(account) { return; if (this.log_flag(LOG_TYPE.enter_city)) { //未上报过 上报一次 var log = this.log_get_device_info(); log.step = 8; log.account_id = account; log.account_name = account; this.log_to_web("/entry/step", log); } }, //获取到默认服 step.9 log_get_def_srv: function log_get_def_srv(account) { return; this.log_enter_city(account); //防止有选服地方没处理到 if (this.log_flag(LOG_TYPE.get_def_srv)) { //未上报过 上报一次 var log = this.log_get_device_info(); log.step = 9; log.account_id = account; log.account_name = account; this.log_to_web("/entry/step", log); } } }; // cli_log.log_activate_device(); //加载文件开始上报激活设备 // cli_log.log_flash(); // cli_log.log_advice(); // console.log("is_log===", _is_log, cc.sys.getNetworkType() == 1 ? "wifi" : "数据", cc.sys.os); cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcdXRpbFxcY2xpX2xvZy5qcyJdLCJuYW1lcyI6WyJMT0dfVFlQRSIsImRldmljZSIsImZsYXNoIiwiYWR2aWNlIiwibG9hZF9zdGFydCIsImxvYWRfZW5kIiwicmVnX2FjYyIsInNlbGVjdF9zcnYiLCJjcmVhdGVfcm9sZSIsImdldF9kZWZfc3J2IiwiZW50ZXJfY2l0eSIsIl9pc19sb2ciLCJMT0dfVVJMIiwid2luZG93IiwiY2xpX2xvZyIsImxvZ190b193ZWIiLCJ1cmxfdHlwZSIsImxvZ19hcmdzIiwidXJsIiwiZGF0ZV90aW1lIiwiTWF0aCIsImNlaWwiLCJEYXRlIiwibm93IiwiYm9keSIsImxvZ191cmxfZW5jb2RlIiwic2lnbiIsImdldFNpZ25WYWx1ZSIsImsiLCJjb25zb2xlIiwibG9nIiwic3RlcCIsInhociIsImNjIiwibG9hZGVyIiwiZ2V0WE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwic2V0UmVxdWVzdEhlYWRlciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJyZXN1bHQiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJiaW5kIiwic2VuZCIsInZhbHVlIiwia2V5IiwiU0lHTl9LRVkiLCJQTEFURk9STV9UWVBSIiwiTUQ1IiwicmVxdWlyZSIsInRvTG93ZXJDYXNlIiwibG9nX3RvX2lkZmFfd2ViIiwic3RyIiwiU3RyaW5nIiwiX3N0ciIsInJlcGxhY2UiLCJmb3JtYXQiLCJjIiwianMiLCJmb3JtYXRTdHIiLCJjaGFyQ29kZUF0IiwibG9nX2dldF9kZXZpY2VfaW5mbyIsImNoYW5uZWwiLCJDSEFOTkVMIiwicHJvIiwicGxhdCIsIlBMQVRGT1JNX05BTUUiLCJkZXZpY2VfaWQiLCJTREsiLCJnZXRVaWQiLCJkZXZpY2VfdHlwZSIsIm9zIiwic3lzIiwiY2FycmllciIsIm5ldHdvcmtfdHlwZSIsImdldE5ldHdvcmtUeXBlIiwicmVzb2x1dGlvbiIsInByb2R1Y3RfbmFtZSIsInBsYXRmb3JtX25hbWUiLCJjaGFubmVsX25hbWUiLCJsb2dfZmxhZyIsInZhbCIsInVpZCIsImdjb3JlIiwiU3lzRW52IiwiZ2V0Iiwic2V0IiwibG9nX2FjdGl2YXRlX2RldmljZSIsImxvZ19mbGFzaCIsImxvZ19hZHZpY2UiLCJsb2dfbG9hZGluZ19zdGFydCIsImxvZ19sb2FkaW5nX2VuZCIsImxvZ19yZWdfYWNjb3VudCIsImFjY291bnQiLCJhY2NvdW50X2lkIiwiYWNjb3VudF9uYW1lIiwibG9nX3NlbGVjdF9zZXJ2ZXIiLCJsb2dfY3JlYXRlX3JvbGUiLCJsb2dfZW50ZXJfY2l0eSIsImxvZ19nZXRfZGVmX3NydiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHO0FBQ1hDLEVBQUFBLE1BQU0sRUFBRSxRQURHO0FBRVRDLEVBQUFBLEtBQUssRUFBRSxPQUZFO0FBR1RDLEVBQUFBLE1BQU0sRUFBRSxRQUhDO0FBSVRDLEVBQUFBLFVBQVUsRUFBRSxZQUpIO0FBS1RDLEVBQUFBLFFBQVEsRUFBRSxVQUxEO0FBTVRDLEVBQUFBLE9BQU8sRUFBRSxTQU5BO0FBT1RDLEVBQUFBLFVBQVUsRUFBRSxZQVBIO0FBUVRDLEVBQUFBLFdBQVcsRUFBRSxhQVJKO0FBU1RDLEVBQUFBLFdBQVcsRUFBRSxhQVRKO0FBVVRDLEVBQUFBLFVBQVUsRUFBRTtBQVZILENBQWYsRUFhQTs7QUFDQSxJQUFJQyxPQUFPLEdBQUcsSUFBZDtBQUNBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSUMsT0FBTyxJQUFJLElBQWhDO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUViO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxvQkFBVUMsUUFBVixFQUFvQkMsUUFBcEIsRUFBOEI7QUFDdEM7QUFDQSxRQUFJLENBQUNOLE9BQUwsRUFBYztBQUNkLFFBQUlPLEdBQUcsR0FBR04sT0FBTyxHQUFHSSxRQUFwQixDQUhzQyxDQUl0Qzs7QUFDQSxRQUFJRyxTQUFT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O0FBbU5iO0FBQ0F3RSxFQUFBQSxlQUFlLEVBQUUseUJBQVVOLE9BQVYsRUFBbUI7QUFDaEM7QUFDQSxTQUFLSyxjQUFMLENBQW9CTCxPQUFwQixFQUZnQyxDQUVIOztBQUM3QixRQUFJLEtBQUtiLFFBQUwsQ0FBY25GLFFBQVEsQ0FBQ1MsV0FBdkIsQ0FBSixFQUF5QztBQUFLO0FBQzFDLFVBQUlxQixHQUFHLEdBQUcsS0FBS2tDLG1CQUFMLEVBQVY7QUFDQWxDLE1BQUFBLEdBQUcsQ0FBQ0MsSUFBSixHQUFXLENBQVg7QUFDQUQsTUFBQUEsR0FBRyxDQUFDbUUsVUFBSixHQUFpQkQsT0FBakI7QUFDQWxFLE1BQUFBLEdBQUcsQ0FBQ29FLFlBQUosR0FBbUJGLE9BQW5CO0FBQ0EsV0FBS2pGLFVBQUwsQ0FBZ0IsYUFBaEIsRUFBK0JlLEdBQS9CO0FBQ0g7QUFDSjtBQTlOWSxDQUFqQixFQWlPQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy/ml6Xlv5fkuIrmiqVcclxuLy96eXNcclxudmFyIExPR19UWVBFID0ge1xyXG4gICAgZGV2aWNlOiBcImRldmljZVwiXHJcbiAgICAsIGZsYXNoOiBcImZsYXNoXCJcclxuICAgICwgYWR2aWNlOiBcImFkdmljZVwiXHJcbiAgICAsIGxvYWRfc3RhcnQ6IFwibG9hZF9zdGFydFwiXHJcbiAgICAsIGxvYWRfZW5kOiBcImxvYWRfZW5kXCJcclxuICAgICwgcmVnX2FjYzogXCJyZWdfYWNjXCJcclxuICAgICwgc2VsZWN0X3NydjogXCJzZWxlY3Rfc3J2XCJcclxuICAgICwgY3JlYXRlX3JvbGU6IFwiY3JlYXRlX3JvbGVcIlxyXG4gICAgLCBnZXRfZGVmX3NydjogXCJnZXRfZGVmX3NydlwiXHJcbiAgICAsIGVudGVyX2NpdHk6IFwiZW50ZXJfY2l0eVwiXHJcbn1cclxuXHJcbi8v5piv5ZCm6K6w5b2V5pel5b+XXHJcbnZhciBfaXNfbG9nID0gdHJ1ZTtcclxuX2lzX2xvZyA9IF9pc19sb2cgJiYgTE9HX1VSTCAhPSBudWxsXHJcblxyXG53aW5kb3cuY2xpX2xvZyA9IHtcclxuXHJcbiAgICAvL+aXpeW/l+S4iuaKpVxyXG4gICAgbG9nX3RvX3dlYjogZnVuY3Rpb24gKHVybF90eXBlLCBsb2dfYXJncykge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICAgIGlmICghX2lzX2xvZykgcmV0dXJuXHJcbiAgICAgICAgbGV0IHVybCA9IExPR19VUkwgKyB1cmxfdHlwZTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuS4iuaKpeW8gOWni3VybD09PVwiLCB1cmwpXHJcbiAgICAgICAgbGV0IGRhdGVfdGltZSA9IE1hdGguY2VpbChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgbGV0IGJvZHkgPSBcIj9kYXRlX3RpbWU9XCIgKyB0aGlzLmxvZ191cmxfZW5jb2RlKGRhdGVfdGltZSk7XHJcbiAgICAgICAgbGV0IHNpZ24gPSB0aGlzLmdldFNpZ25WYWx1ZShkYXRlX3RpbWUpO1xyXG4gICAgICAgIGJvZHkgPSBib2R5ICsgXCImc2lnbj1cIiArIHNpZ247XHJcbiAgICAgICAgZm9yIChsZXQgayBpbiBsb2dfYXJncykge1xyXG4gICAgICAgICAgICBib2R5ID0gYm9keSArIFwiJlwiICsgayArIFwiPVwiICsgdGhpcy5sb2dfdXJsX2VuY29kZShsb2dfYXJnc1trXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVybCA9IHVybCArIGJvZHk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXJsX3R5cGUsbG9nX2FyZ3Muc3RlcClcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInB1c2hfbG9nPT0+XCIsIHVybCk7XHJcbiAgICAgICAgbGV0IHhociA9IGNjLmxvYWRlci5nZXRYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCB1cmwpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0ICYmICh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDw9IDIwNykpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZXN1bHQ9PT5cIiwgcmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtcInN1Y2Nlc3NcIl0gPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRbXCJtZXNzYWdlXCJdKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LmJpbmQodGhpcyk7XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U2lnblZhbHVlOiBmdW5jdGlvbiAoZGF0ZV90aW1lKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgdmFyIHZhbHVlID0gXCJcIjtcclxuICAgICAgICB2YXIga2V5ID0gU0lHTl9LRVk7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSArIFBMQVRGT1JNX1RZUFI7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSArIGRhdGVfdGltZTtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlICsga2V5O1xyXG5cclxuICAgICAgICB2YXIgTUQ1ID0gcmVxdWlyZShcIm1kNS5taW5cIik7XHJcbiAgICAgICAgdmFsdWUgPSBNRDUodmFsdWUpO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgIH0sXHJcblxyXG4gICAgLy/kuIrmiqXkv6Hmga/liLDms6jlhozmnI1cclxuICAgIGxvZ190b19pZGZhX3dlYjogZnVuY3Rpb24gKGJvZHkpIHtcclxuICAgICAgICAvLyBpZiAoIXdpbmRvdy5DT05GX0lERkFfV0VCKSByZXR1cm5cclxuICAgICAgICAvLyBsZXQgdXJsID0gd2luZG93LkNPTkZfSURGQV9XRUJcclxuICAgIH0sXHJcblxyXG4gICAgLy91cmznvJbnoIFcclxuICAgIGxvZ191cmxfZW5jb2RlOiBmdW5jdGlvbiAoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgc3RyID0gU3RyaW5nKHN0cik7XHJcbiAgICAgICAgbGV0IF9zdHIgPSBzdHI7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxyXFxcXG5cIik7XHJcbiAgICAgICAgbGV0IGZvcm1hdCA9IGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYy5qcy5mb3JtYXRTdHIoXCIlJSUwMlhcIiwgYy5jaGFyQ29kZUF0KDApKVxyXG4gICAgICAgIH1cclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIihbXiV3IF0pXCIsIGZvcm1hdCk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoXCIgXCIsIFwiK1wiKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhfc3RyLCBcIj09PT09dXJsX3N0cj09PT09PT5cIiwgc3RyKVxyXG4gICAgICAgIHJldHVybiBzdHJcclxuICAgIH0sXHJcblxyXG4gICAgLy/ojrflj5borr7lpIfln7rmnKzkv6Hmga9cclxuICAgIGxvZ19nZXRfZGV2aWNlX2luZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgICBsZXQgY2hhbm5lbCA9IHdpbmRvdy5DSEFOTkVMO1xyXG4gICAgICAgIGxldCBwcm8gPSBcImg1c3N6Z1wiO1xyXG4gICAgICAgIGxldCBwbGF0ID0gUExBVEZPUk1fTkFNRTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXZpY2VfaWQ6IFNESyA/IFNESy5nZXRVaWQoKSA6IFwiMVwiICAgICAvL+aaguaXtueUqHVpZOS7o+abv1xyXG4gICAgICAgICAgICAsIGRldmljZV90eXBlOiAxICAgIC8v5pqC5pe25rKh6I635Y+WXHJcbiAgICAgICAgICAgICwgb3M6IGNjLnN5cy5vc1xyXG4gICAgICAgICAgICAsIGNhcnJpZXI6IFwiXCIgICAgICAgLy/mmoLml7bmsqHojrflj5ZcclxuICAgICAgICAgICAgLCBuZXR3b3JrX3R5cGU6IGNjLnN5cy5nZXROZXR3b3JrVHlwZSgpID09IDEgPyBcIndpZmlcIiA6IFwi5pWw5o2uXCJcclxuICAgICAgICAgICAgLCByZXNvbHV0aW9uOiAnJ1xyXG4gICAgICAgICAgICAsIHByb2R1Y3RfbmFtZTogcHJvXHJcbiAgICAgICAgICAgICwgcGxhdGZvcm1fbmFtZTogcGxhdFxyXG4gICAgICAgICAgICAsIGNoYW5uZWxfbmFtZTogY2hhbm5lbFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/ojrflj5bml6Xlv5flvZPliY3moIfor4ZcclxuICAgIGxvZ19mbGFnOiBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgICBpZiAoIV9pc19sb2cpIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHZhbCA9IHZhbCB8fCAxO1xyXG4gICAgICAgIGxldCBzdHIgPSBcIlwiO1xyXG4gICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIikge1xyXG4gICAgICAgICAgICBzdHIgPSBcInNocmhfbG9nX2ZsYWdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHVpZCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKFNESykge1xyXG4gICAgICAgICAgICB1aWQgPSBTREsuZ2V0VWlkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdWlkID0gXCIzXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKHVpZCxrZXksdmFsKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi5pel5b+XYm9vbD09XCIsZ2NvcmUuU3lzRW52LmdldChzdHIpID09IGNjLmpzLmZvcm1hdFN0cihcInVpZD0lcyZrZXk9JXMmdmFsPSVzXCIsIHVpZCwga2V5LCB2YWwpLGdjb3JlLlN5c0Vudi5nZXQoc3RyKSxjYy5qcy5mb3JtYXRTdHIoXCJ1aWQ9JXMma2V5PSVzJnZhbD0lc1wiLCB1aWQsIGtleSwgdmFsKSlcclxuICAgICAgICBpZiAoZ2NvcmUuU3lzRW52LmdldChzdHIpID09IGNjLmpzLmZvcm1hdFN0cihcInVpZD0lcyZrZXk9JXMmdmFsPSVzXCIsIHVpZCwga2V5LCB2YWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdjb3JlLlN5c0Vudi5zZXQoc3RyLCBjYy5qcy5mb3JtYXRTdHIoXCJ1aWQ9JXMma2V5PSVzJnZhbD0lc1wiLCB1aWQsIGtleSwgdmFsKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+iuvuWkh+a/gOa0u1xyXG4gICAgbG9nX2FjdGl2YXRlX2RldmljZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICAgIGlmICh0aGlzLmxvZ19mbGFnKExPR19UWVBFLmRldmljZSkpIHsgIC8v5pyq5LiK5oql6L+HIOS4iuaKpeS4gOasoVxyXG4gICAgICAgICAgICBsZXQgbG9nID0gdGhpcy5sb2dfZ2V0X2RldmljZV9pbmZvKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nX3RvX3dlYihcIi9kZXZpY2UvYWN0aXZhdGlvblwiLCBsb2cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/pl6rlsY8gc3RlcC4xXHJcbiAgICBsb2dfZmxhc2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgICBpZiAodGhpcy5sb2dfZmxhZyhMT0dfVFlQRS5mbGFzaCkpIHsgICAvL+acquS4iuaKpei/hyDkuIrmiqXkuIDmrKFcclxuICAgICAgICAgICAgbGV0IGxvZyA9IHRoaXMubG9nX2dldF9kZXZpY2VfaW5mbygpO1xyXG4gICAgICAgICAgICBsb2cuc3RlcCA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMubG9nX3RvX3dlYihcIi9lbnRyeS9zdGVwXCIsIGxvZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyDlv6DlkYogc3RlcC4yXHJcbiAgICBsb2dfYWR2aWNlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUuYWR2aWNlKSkgeyAgICAvL+acquS4iuaKpei/hyDkuIrmiqXkuIDmrKFcclxuICAgICAgICAgICAgbGV0IGxvZyA9IHRoaXMubG9nX2dldF9kZXZpY2VfaW5mbygpO1xyXG4gICAgICAgICAgICBsb2cuc3RlcCA9IDI7XHJcbiAgICAgICAgICAgIHRoaXMubG9nX3RvX3dlYihcIi9lbnRyeS9zdGVwXCIsIGxvZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+WKoOi9vea4uOaIj+W8gOWniyBzdGVwLjNcclxuICAgIGxvZ19sb2FkaW5nX3N0YXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUubG9hZF9zdGFydCkpIHsgICAgLy/mnKrkuIrmiqXov4cg5LiK5oql5LiA5qyhXHJcbiAgICAgICAgICAgIGxldCBsb2cgPSB0aGlzLmxvZ19nZXRfZGV2aWNlX2luZm8oKTtcclxuICAgICAgICAgICAgbG9nLnN0ZXAgPSAzO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ190b193ZWIoXCIvZW50cnkvc3RlcFwiLCBsb2cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8g5Yqg6L295ri45oiP57uT5p2fIHN0ZXAuNFxyXG4gICAgbG9nX2xvYWRpbmdfZW5kOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUubG9hZF9lbmQpKSB7ICAgIC8v5pyq5LiK5oql6L+HIOS4iuaKpeS4gOasoVxyXG4gICAgICAgICAgICBsZXQgbG9nID0gdGhpcy5sb2dfZ2V0X2RldmljZV9pbmZvKCk7XHJcbiAgICAgICAgICAgIGxvZy5zdGVwID0gNDtcclxuICAgICAgICAgICAgdGhpcy5sb2dfdG9fd2ViKFwiL2VudHJ5L3N0ZXBcIiwgbG9nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5rOo5YaM6LSm5Y+3IHN0ZXAuNVxyXG4gICAgbG9nX3JlZ19hY2NvdW50OiBmdW5jdGlvbiAoYWNjb3VudCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICAgIGlmICh0aGlzLmxvZ19mbGFnKExPR19UWVBFLnJlZ19hY2MpKSB7ICAgIC8v5pyq5LiK5oql6L+HIOS4iuaKpeS4gOasoVxyXG4gICAgICAgICAgICBsZXQgbG9nID0gdGhpcy5sb2dfZ2V0X2RldmljZV9pbmZvKCk7XHJcbiAgICAgICAgICAgIGxvZy5zdGVwID0gNTtcclxuICAgICAgICAgICAgbG9nLmFjY291bnRfaWQgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICBsb2cuYWNjb3VudF9uYW1lID0gYWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5sb2dfdG9fd2ViKFwiL2VudHJ5L3N0ZXBcIiwgbG9nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v6YCJ5pyNIHN0ZXAuNlxyXG4gICAgbG9nX3NlbGVjdF9zZXJ2ZXI6IGZ1bmN0aW9uIChhY2NvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUuc2VsZWN0X3NydikpIHsgICAgLy/mnKrkuIrmiqXov4cg5LiK5oql5LiA5qyhXHJcbiAgICAgICAgICAgIGxldCBsb2cgPSB0aGlzLmxvZ19nZXRfZGV2aWNlX2luZm8oKTtcclxuICAgICAgICAgICAgbG9nLnN0ZXAgPSA2O1xyXG4gICAgICAgICAgICBsb2cuYWNjb3VudF9pZCA9IGFjY291bnQ7XHJcbiAgICAgICAgICAgIGxvZy5hY2NvdW50X25hbWUgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLmxvZ190b193ZWIoXCIvZW50cnkvc3RlcFwiLCBsb2cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/liJvlu7rop5LoibIgc3RlcC43XHJcbiAgICBsb2dfY3JlYXRlX3JvbGU6IGZ1bmN0aW9uIChhY2NvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5sb2dfc2VsZWN0X3NlcnZlcihhY2NvdW50KTsvL+mYsuatouaciemAieacjeWcsOaWueayoeWkhOeQhuWIsFxyXG4gICAgICAgIGlmICh0aGlzLmxvZ19mbGFnKExPR19UWVBFLnNlbGVjdF9zcnYpKSB7ICAgIC8v5pyq5LiK5oql6L+HIOS4iuaKpeS4gOasoVxyXG4gICAgICAgICAgICBsZXQgbG9nID0gdGhpcy5sb2dfZ2V0X2RldmljZV9pbmZvKCk7XHJcbiAgICAgICAgICAgIGxvZy5zdGVwID0gNztcclxuICAgICAgICAgICAgbG9nLmFjY291bnRfaWQgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICBsb2cuYWNjb3VudF9uYW1lID0gYWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5sb2dfdG9fd2ViKFwiL2VudHJ5L3N0ZXBcIiwgbG9nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v6LW35ZCNIHN0ZXAuOFxyXG4gICAgbG9nX2VudGVyX2NpdHk6IGZ1bmN0aW9uIChhY2NvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUuZW50ZXJfY2l0eSkpIHsgICAgLy/mnKrkuIrmiqXov4cg5LiK5oql5LiA5qyhXHJcbiAgICAgICAgICAgIGxldCBsb2cgPSB0aGlzLmxvZ19nZXRfZGV2aWNlX2luZm8oKTtcclxuICAgICAgICAgICAgbG9nLnN0ZXAgPSA4O1xyXG4gICAgICAgICAgICBsb2cuYWNjb3VudF9pZCA9IGFjY291bnQ7XHJcbiAgICAgICAgICAgIGxvZy5hY2NvdW50X25hbWUgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLmxvZ190b193ZWIoXCIvZW50cnkvc3RlcFwiLCBsb2cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/ojrflj5bliLDpu5jorqTmnI0gc3RlcC45XHJcbiAgICBsb2dfZ2V0X2RlZl9zcnY6IGZ1bmN0aW9uIChhY2NvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5sb2dfZW50ZXJfY2l0eShhY2NvdW50KTsvL+mYsuatouaciemAieacjeWcsOaWueayoeWkhOeQhuWIsFxyXG4gICAgICAgIGlmICh0aGlzLmxvZ19mbGFnKExPR19UWVBFLmdldF9kZWZfc3J2KSkgeyAgICAvL+acquS4iuaKpei/hyDkuIrmiqXkuIDmrKFcclxuICAgICAgICAgICAgbGV0IGxvZyA9IHRoaXMubG9nX2dldF9kZXZpY2VfaW5mbygpO1xyXG4gICAgICAgICAgICBsb2cuc3RlcCA9IDk7XHJcbiAgICAgICAgICAgIGxvZy5hY2NvdW50X2lkID0gYWNjb3VudDtcclxuICAgICAgICAgICAgbG9nLmFjY291bnRfbmFtZSA9IGFjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMubG9nX3RvX3dlYihcIi9lbnRyeS9zdGVwXCIsIGxvZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufVxyXG5cclxuLy8gY2xpX2xvZy5sb2dfYWN0aXZhdGVfZGV2aWNlKCk7IC8v5Yqg6L295paH5Lu25byA5aeL5LiK5oql5r+A5rS76K6+5aSHXHJcbi8vIGNsaV9sb2cubG9nX2ZsYXNoKCk7XHJcbi8vIGNsaV9sb2cubG9nX2FkdmljZSgpO1xyXG4vLyBjb25zb2xlLmxvZyhcImlzX2xvZz09PVwiLCBfaXNfbG9nLCBjYy5zeXMuZ2V0TmV0d29ya1R5cGUoKSA9PSAxID8gXCJ3aWZpXCIgOiBcIuaVsOaNrlwiLCBjYy5zeXMub3MpOyJdfQ==