目前格式:HTML/XML
<script type="text/javascript" th:inline="javascript" layout:fragment="contentScript"
th:object="${@sessionAccessor.user}">
var app = new Vue({
el: "#app",
data: {
// 準增員資料
userData: {
isNew: true,
/* 文件上傳 */
uploadDefines: [
/*
{
jobType: "A1",
fileType: "Head2inch",
fileDesc: "二吋彩色大頭貼",
fileHead: "二吋彩色大頭貼",
uploaded: 1,
alertMark: null,
notAlertMarked: false,
alertMarked: false
}
*/
],
/* 基本資料 */
// 準增員主檔
user: {
// 使用者系統編號 Integer
sysCode: "",
// 身分證字號/帳號
userId: "",
// 姓名
userName: "",
// 羅馬拚音
romanName: "",
// 電子郵件
email: "",
// 手機號碼
mobilePhone: "",
// 出生日期 yyyyMMdd
birthday: "",
// 直屬主管登錄證號
dsRegisterId: "",
// 直屬主管
dsAgent: {
userId: "",
userName: "",
agentCode: "",
registerNo: "",
lineCode: "",
agentChannel: "",
mobilePhone: "",
email: "",
branchCode: "",
branchName: "",
branchManager: "",
branchManagerEmail: "",
branchManagerMobile: "",
branchAssistant: "",
centerCode: "",
centerName: "",
centerManager: "",
centerManagerEmail: "",
centerManagerMobile: "",
levelCode: "",
levelTitle: "",
agentStatusCode: "",
agentStatus: "",
leaveDate: "",
aguiCenter: "",
aguiManager: "",
aguiCenterName: "",
createTime: ""
},
// 推薦人登錄證號
refRegisterId: "",
// 推薦人
refAgent: {
userId: "",
userName: "",
agentCode: "",
registerNo: "",
lineCode: "",
agentChannel: "",
mobilePhone: "",
email: "",
branchCode: "",
branchName: "",
branchManager: "",
branchManagerEmail: "",
branchManagerMobile: "",
branchAssistant: "",
centerCode: "",
centerName: "",
centerManager: "",
centerManagerEmail: "",
centerManagerMobile: "",
levelCode: "",
levelTitle: "",
agentStatusCode: "",
agentStatus: "",
leaveDate: "",
aguiCenter: "",
aguiManager: "",
aguiCenterName: "",
createTime: ""
},
// 通訊處代號
commCode: "",
// 通訊處
commUnit: {
agentChannel: "",
commCode: "",
commName: "",
areaCenter: {
agentChannel: "",
centerCode: "",
centerName: "",
isDelete: false
},
assistant: {
employeeNo: "",
employeeName: "",
enableSendSms: false,
enableSendEmail: false,
email: "",
mobilePhone: "",
modifyTime: ""
},
isDelete: false
},
// 職務代碼
jobId: "",
// 職務類別
jobType: "",
// 新增時間 yyyy-MM-dd'T'HH:mm:ss
createTime: "",
// 修改時間 yyyy-MM-dd'T'HH:mm:ss
modifyTime: "",
// 狀態
status: "",
// 是否結案
isClose: false,
// 是否已簽署聲明事項
agreementSigned: false
},
// 準增員詳細資料檔
userDetail: {
// 準增員主要key值
sysCode: "",
// 新增時間 yyyy-MM-dd'T'HH:mm:ss
addDate: "",
// 更新時間 yyyy-MM-dd'T'HH:mm:ss
updDate: "",
//
enName: "",
// 英文姓名
eegName: "",
// 報聘單位/推薦人/增員者
myReferrer: "",
// 同業經歷
mySameExperience: "",
// 是否有親屬在本公司任職
isWorkHere: "",
// Line ID
lineID: "",
// 性別
sex: "",
// 婚姻
marry: "",
// 血型
blood: "",
// 子女人數
brood: "",
// 住家電話
tel1: "",
// 行動電話
tel2: "",
// 電子郵件
mail: "",
// 原住民姓名
romanName: "",
// 緊急聯絡人姓名
criName: "",
// 緊急聯絡人關係 0:配偶 1:子女 2:父母 3:兄弟姐妹 4:朋友 5:其他
criRel: "",
// 緊急聯絡人電話
criTel: "",
// 學歷 0:其他 1:研究所 2:大學 3:專科 4:高中/職 5:國中 6:小學
degree: "",
// 最高學歷學校名稱
school: "",
// 科系
major: "",
// 畢業 0:畢業 1:肄業 2:其他
grade: "",
// 學校社團經驗 0:無 1:有
asso: "",
// 學校社團擔任幹部名稱
assoName: "",
// 公司名稱1
com1: "",
// 任職期間年(起)
fdateY1: "",
// 任職期間月(起)
fdateM1: "",
// 任職期間年(迄)
tdateY1: "",
// 任職期間月(迄)
tdateM1: "",
// 年資 ex:1.2(年)
expt1: "",
// 職稱
title1: "",
// 工作屬性 0:業務性 1:非業務性
property1: "",
// 年收入 萬元
income1: "",
// 行業別 0:保險業 1:金融業 2:醫療業 3:其他行業
industry1: "",
// 公司名稱2
com2: "",
// 任職期間年(起)
fdateY2: "",
// 任職期間月(起)
fdateM2: "",
// 任職期間年(迄)
tdateY2: "",
// 任職期間月(迄)
tdateM2: "",
// 年資 ex:1.2(年)
expt2: "",
// 職稱
title2: "",
// 工作屬性 0:業務性 1:非業務性
property2: "",
// 年收入 萬元
income2: "",
// 行業別 0:保險業 1:金融業 2:醫療業 3:其他行業
industry2: "",
// 公司名稱3
com3: "",
// 任職期間年(起)
fdateY3: "",
// 任職期間月(起)
fdateM3: "",
// 任職期間年(迄)
tdateY3: "",
// 任職期間月(迄)
tdateM3: "",
// 年資 ex:1.2(年)
expt3: "",
// 職稱
title3: "",
// 工作屬性 0:業務性 1:非業務性
property3: "",
// 年收入 萬元
income3: "",
// 行業別 0:保險業 1:金融業 2:醫療業 3:其他行業
industry3: "",
// 配偶職業
partnerJob: "",
// 壽險證照
cert1: "",
// 產險證照
cert2: "",
// 投資型證照
cert3: "",
// 配偶其他
certElse: "",
// 外幣證照
cert4: "",
// 身份證字號
pid: "",
// 戶籍地址
addr1: "",
// 戶籍地址-郵遞區號
addr1PostalCode: "",
// 戶籍地址-縣市
addr1City: "",
// 戶籍地址-鄉鎮市區
addr1Towns: "",
// 戶籍地址-路/段/道/街/村/里
addr1Village: "",
// 戶籍地址-鄰
addr1RoadStreet: "",
// 戶籍地址-巷
addr1Lane: "",
// 戶籍地址-弄
addr1Alley: "",
// 戶籍地址-衖
addr1Section: "",
// 戶籍地址-號
addr1Number: "",
// 戶籍地址-樓
addr1Floor: "",
// 戶籍地址-備註
addr1Remark: "",
// 通訊地址
addr2: "",
// 通訊地址-郵遞區號
addr2PostalCode: "",
// 通訊地址-縣市
addr2City: "",
// 通訊地址-鄉鎮市區
addr2Towns: "",
// 通訊地址-路/段/道/街/村/里
addr2Village: "",
// 通訊地址-鄰
addr2RoadStreet: "",
// 通訊地址-巷
addr2Lane: "",
// 通訊地址-弄
addr2Alley: "",
// 通訊地址-衖
addr2Section: "",
// 通訊地址-號
addr2Number: "",
// 通訊地址-樓
addr2Floor: "",
// 通訊地址-備註
addr2Remark: "",
// 兵役調查
army: "",
// 中信銀台幣帳務-分行名稱
ctbcAccountBranch: "",
// 中信銀台幣帳戶-帳號號碼
ctbcAccountAccountNumber: "",
// 是否有其他工作經歷 YN
workOther: "",
// 是否擔任過業務人員
usedtobeAgent: "",
// 是否曾任職本公司業務員(包含台灣/宏利/大都會人壽)
usedtobeAgentTW: ""
},
/* 學經歷 */
// 工作經驗
userWorks: [
/*
{
// 流水號
seq: Integer,
// 準增員主要key值
sysCode: Integer,
// 公司名稱
companyName: String,
// 工作期間-起 YYYY-MM-DD
workStartDate: String,
// 工作期間-迄 YYYY-MM-DD
workEndDate: String,
// 通訊處名稱-非必填
branchName: String
}
*/
],
// 其他工作經歷
userWorkOthers: [
/*
{
// 流水號
seq: Integer,
// 準增員主要key值
sysCode: Integer,
// 公司名稱
companyName: String,
// 工作期間-起 YYYY-MM-DD
workStartDate: String,
// 工作期間-迄 YYYY-MM-DD
workEndDate: String,
// 職稱
title: String,
// 行業別
jobkind: String,
// 工作內容
jobDesc: String
}
*/
],
/* 背景聲明 */
userBackground: {
// 準增員唯一值
sysCode: "",
// 信用報告分數 Integer
creditRptDegree: "",
// 信用報告日期 yyyy-MM-dd'T'HH:mm:ss
creditRptDate: "",
// 人身保險合格證號
lifeRegisterId: "",
// 人身保險登錄狀況 Integer
lifeRegStatus: "",
// 金融常識合格證號
fincRegisterId: "",
// 財產登錄狀況(TableL SystemCodeDef,CodeType:GenRegStatus)
genRegStatus: "",
// 是否有親屬在本公司擔任業務員YN
parentAgent: "",
// 親屬姓名
parentName: "",
// 親屬關係(TableL SystemCodeDef,CodeType:ParentReal)
parentRela: "",
// 業務人員管理規則懲處紀錄(Y: 有 N:無)
punishHistory: "",
// 業務人員管理規則懲處紀錄詳細說明
punishHisDetail: "",
// 是否有犯罪紀錄(Y: 有 N:無)
crimeHistory: "",
// 犯罪紀錄詳細說明
crimeDetail: "",
// 公會懲處紀錄 (Y: 有 N:無)
liaPunishHistory: "",
// 公會懲處紀錄詳細說明
liaPunishHisDetail: ""
}
},
// hasWorkExp: false,
// hasWorkOtherExp: false,
alert: {
form01: false,
form02: false,
form03: false,
form04: false
},
link: {
// 壽險公會連結
lifeOrg: "http://public.liaroc.org.tw/lia-public/indexUsr.jsp",
// 產險公會連結
generalOrg: "http://salesinfo.nlia.org.tw/index.php"
}
},
beforeMount() {
// 準增員資料
var vm = this;
var userData = /*[[${@requestAccessor.getAttribute(T(com.taiwanlife.recruit.enums.ModelKey).USER_DATA)}]]*/ {};
// 初始值
var nestedEmptyValue = function(value) {
if ($.isArray(value)) {
for (var val of value) {
if ("string" === typeof(val)) {
val = val || "";
} else {
nestedEmptyValue(val);
}
}
} else if ($.isPlainObject(value)) {
for (var key in value) {
if ("string" === typeof(value[key]) || undefined == value[key] || null == value[key]) {
value[key] = value[key] || "";
} else {
nestedEmptyValue(value[key]);
}
}
}
};
nestedEmptyValue(userData);
this.userData = $.extend(true, {}, this.userData, userData);
// if (this.userData.userWorks && this.userData.userWorks.length > 0) {
// this.hasWorkExp = true;
// }
if (!this.userData.userDetail.workOther) {
if (this.userData.userWorkOthers && this.userData.userWorkOthers.length > 0) {
this.userData.userDetail.workOther = "Y";
} else {
this.userData.userDetail.workOther = "N";
}
}
// this.hasWorkOtherExp = "Y" == this.userData.userDetail.workOther;
},
mounted() {
setTab("tablist");
this.init();
},
methods: {
init() {
this.initRule();
if (false === this.userData.isNew) {
this.showTabAlert();
}
},
initRule() {
var errorPlacement = function (error, element) {
var ename = element.attr("name");
if (/^uploadFile/.test(ename)) {
$(element).closest("table").next().append(error);
} else if (/^addr/.test(ename) || /History/.test(ename) || /^parent[Name|Rela]/.test(ename)) {
$(element).closest("td").parent().children().last().append(error);
} else {
$(element).parent().children().last().after(error);
}
};
var defaultSettings = {
errorElement: "div",
errorPlacement: errorPlacement
}
var form01Settings = {
rules: {},
messages: {}
};
for (var index in this.userData.uploadDefines) {
if (this.userData.uploadDefines[index].mustFlag == "Y") {
form01Settings.rules[`uploadFile${parseInt(index) + 1}`] = {
required: {
depends: function(element) {
return "0" == $(element).prev().val();
}
}
};
form01Settings.messages[`uploadFile${parseInt(index) + 1}`] = { required: `請上傳${this.userData.uploadDefines[index].fileHead}${"Head2inch" == this.userData.uploadDefines[index].fileType ? "(上傳格式限 JPG)" : ""}` };
}
}
$("#form01").validate($.extend(true, {}, defaultSettings, form01Settings));
$("#form02").validate($.extend(true, {}, defaultSettings, {
rules: {
userName: {
required: true,
maxlength: 200
},
romanName: {
maxlength: 200,
format: ego.validator.pattern.romanName
},
birthday: {
required: true,
maxlength: 8
},
mobilePhone: {
maxlength: 20,
required: true,
mobilePhone: true
},
tel1: {
maxlength: 20,
format: ego.validator.pattern.telephone
},
email: {
required: true,
email: true,
blockEmail: true,
maxlength: 50
},
army: {
required: true
},
ctbcAccountBranch: {
required: true
},
ctbcAccountAccountNumber: {
required: true,
digits: true,
format: ego.validator.pattern.accountNumber
}
}, messages: {
userName: {
required: "請輸入姓名",
},
romanName: {
format: "原住民姓名不符合條件,請重新輸入",
},
birthday: {
required: "請選擇出生年月日"
},
mobilePhone: {
required: "請輸入手機號碼",
mobilePhone: "手機號碼不符合條件,請重新輸入",
},
tel1: {
format: "住家電話不符合條件,請重新輸入"
},
email: {
required: "請輸入電子郵件",
email: "電子郵件不符合條件,請重新輸入"
},
army: {
required: "請選擇兵役調查",
},
ctbcAccountBranch: {
required: "請輸入中信銀台幣銀行帳戶-分行",
},
ctbcAccountAccountNumber: {
required: "請輸入中信銀台幣銀行帳戶-帳號",
digits: "中信銀台幣銀行帳戶-帳號不符合條件,請重新輸入",
format: "中信銀台幣銀行帳戶-帳號不符合條件,請重新輸入"
}
}
}));
$("#form04").validate($.extend(true, {}, defaultSettings, {
rules: {
creditRptDegree: {
required: true,
creditRptDegree: true
},
creditRptDate: {
required: true
},
lifeRegisterId: {
required: true,
format: ego.validator.pattern.lifeRegisterId
},
lifeRegStatus: {
required: true
},
genRegStatus: {
required: true
},
parentName: {
required: {
depends: function(element) {
return "Y" == $("input[name=parentAgent]:checked").val();
}
}
},
parentRela: {
required: {
depends: function(element) {
return "Y" == $("input[name=parentAgent]:checked").val();
}
}
},
punishHistory: {
required: true
},
punishHisDetail: {
required: {
depends: function(element) {
return "Y" == $("input[name=punishHistory]:checked").val();
}
}
},
liaPunishHistory: {
required: true
},
liaPunishHisDetail: {
required: {
depends: function(element) {
return "Y" == $("input[name=liaPunishHistory]:checked").val();
}
}
},
crimeHistory: {
required: true
},
crimeDetail: {
required: {
depends: function(element) {
return "Y" == $("input[name=crimeHistory]:checked").val();
}
}
}
}, messages: {
creditRptDegree: {
required: "請輸入信用報告分數或無法評分",
creditRptDegree: "請輪入分數或無法評分"
},
creditRptDate: {
required: "請選擇信用報告日期"
},
lifeRegisterId: {
required: "請輸入人身保險合格證號"
},
lifeRegStatus: {
required: "請勾選人身保險登錄狀況"
},
genRegStatus: {
required: "請勾選財產保險登錄狀況"
},
parentName: {
required: "請輸入親屬姓名"
},
parentRela: {
required: "請選擇親屬關係"
},
punishHistory: {
required: "請勾選是否曾違反業務人員管理規則而受懲處紀錄"
},
punishHisDetail: {
required: "請輸入受懲處紀錄詳細說明"
},
liaPunishHistory: {
required: "請勾選是否曾受公會懲處紀錄"
},
liaPunishHisDetail: {
required: "請輸入公會懲處紀錄詳細說明"
},
crimeHistory: {
required: "請勾選是否有刑事犯罪紀錄"
},
crimeDetail: {
required: "請輸入刑事犯罪紀錄詳細說明"
}
}
}));
},
showTabAlert() {
for (var form in this.alert) {
this.alert[`${form}`] = !$(`#${form}`).valid();
}
},
// generateKey(key, index) {
// if (index || $.isNumeric(index)) {
// return `${key}${index + 1}`;
// }
// return key;
// },
handleCreditRptDegree(event) {
if (/^0/.test(event.target.value)) {
this.userData.userBackground.creditRptDegree = event.target.value.substring(1);
}
},
handleDate(target, date) {
let form = $(target).closest("form").attr("id");
let element = $(target).attr("id");
switch (element) {
case "birthday":
this.userData.user.birthday = date;
break;
case "creditRptDate":
this.userData.userBackground.creditRptDate = date;
break;
default:
let index = element.substr(-1);
let work = this.userData[element.split('_')[0]][index];
if (!work){
work = {};
this.userData[element.split('_')[0]][index] = work;
}
work[element.split('_')[1]] = date;
if ($(target).prevAll('input.hasMonthpicker')) {
$(target).prevAll('input.hasMonthpicker').monthpicker("option", "maxDate", date);
}
if ($(target).nextAll('input.hasMonthpicker')) {
$(target).nextAll('input.hasMonthpicker').monthpicker("option", "minDate", date);
}
break;
}
},
handleDependency(event) {
var form = $(event.target).closest("form").attr("id");
var elements = Array.prototype.slice.call(arguments, 1)
elements.forEach(function(item, index) {
$(`#${form}`).validate().element(`#${item}`);
});
},
handleChange(e) {
let formId = $(e.target).closest("form").attr("id");
let el = e.target;
this.$nextTick(() => {
if (el) {
$(`#${formId}`).validate().element(el);
}
});
},
handleAddress(e){
let form = $(e.target).closest("form").attr("id");
let element = $(e.target).attr("id");
if (/\d/g.test(e.target.value)){
let tempStr = '';
for(let i=0;i<e.target.value.toString().length;i++){
let numCode = e.target.value.toString().charCodeAt(i);
if (numCode <= 0x007E && numCode >= 0x0021){
numCode += 0xFEE0;
}
tempStr += String.fromCharCode(numCode);
}
e.target.value = tempStr;
}
this.userData.userDetail[element] = e.target.value;
this.$nextTick(()=>$(`#${form}`).validate().element(`#${element}`));
},
handleWork(event){
let element = event.target.id;
let index = element.substr(-1);
let work = this.userData[element.split('_')[0]][index];
if (!work){
work = {};
this.userData[element.split('_')[0]][index] = work;
}
work[element.split('_')[1]] = event.target.value;
},
focusoutName(event) {
let formId = $(event.target).closest("form").attr("id");
let el = event.target;
switch (event.target.id) {
case 'userName':
this.userData.user.userName = event.target.value;
break;
case 'romanName':
this.userData.user.romanName = event.target.value;
break;
case 'criName':
this.userData.userDetail.criName = event.target.value;
break;
}
this.$nextTick(() => {
if (el) {
$(`#${formId}`).validate().element(el);
}
});
},
save(event) {
// 暫存
this.showTabAlert();
if (!ego.ajax.updateUserDataTemp(this.userData)) {
ego.dialog.error("暫存失敗,請稍候再試", window.location.href);
} else {
ego.dialog.alert("暫存成功", window.location.href);
}
},
handleFile(target, status) {
$(target).closest("form").validate().element(`#${$(target).attr("id")}`);
},
apply(event) {
this.showTabAlert();
for (var form in this.alert) {
if (!$(`#${form}`).valid()) {
ego.dialog.error("請確認報聘資料填寫完整,再行遞交申請。");
return;
}
}
if (!ego.ajax.updateUserDataTemp(this.userData)) { // 暫存
ego.dialog.error("遞交申請失敗,請稍候再試", window.location.href);
} else if (!ego.ajax.applyUserData(this.userData.user.sysCode)) { // 遞交申請
ego.dialog.error("遞交申請失敗,請稍候再試", window.location.href);
} else {
if (this.userData.user.commUnit.agentChannel == "A1") {
ego.dialog.alert(`恭喜您已完成報聘文件遞交,審核結果將會另行通知。 <br/><br/>以下正本文件請您交給各地區行政助理。<br/>1. 合約書<br/>2. 聯徵個人信用報告<br/>3. 二吋彩色照片1張<br/>4. 信用卡共銷承諾聲明書及試卷<br/>5. 自費參加團體保險申請書<br/>6. 報聘SR須另繳交行銷代表備忘錄、SR商品及法規課程訓練紀錄${"3" == this.userData.userBackground.genRegStatus ? "<br/>7. 人身保險業務員登錄申請書正本" : ""}`, url.user.portal);
} else {
if (this.userData.user.jobType == "A2S" ) {
ego.dialog.alert(`恭喜您已完成報聘文件遞交,審核結果將會另行通知。 <br/><br/>以下正本文件請您交給各地區行政助理。<br/>1. 合約書<br/>2. 聯徵個人信用報告<br/>3. 二吋彩色照片1張<br/>4. 信用卡共銷承諾聲明書及試卷${"3" == this.userData.userBackground.genRegStatus ? "<br/>5. 人身保險業務員登錄申請書正本" : ""}`, url.user.portal);
}
else {
ego.dialog.alert(`恭喜您已完成報聘文件遞交,審核結果將會另行通知。 <br/><br/>以下正本文件請您交給各地區行政助理。<br/>1. 合約書<br/>2. 聯徵個人信用報告<br/>3. 二吋彩色照片1張<br/>4. 信用卡共銷承諾聲明書及試卷<br/>5. 公費團體眷屬加入表(聘僱合約)${"3" == this.userData.userBackground.genRegStatus ? "<br/>6. 人身保險業務員登錄申請書正本" : ""}`, url.user.portal);
}
}
}
}
}
});
</script>
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHRoOmlubGluZT0iamF2YXNjcmlwdCIgbGF5b3V0OmZyYWdtZW50PSJjb250ZW50U2NyaXB0IgoKCQl0aDpvYmplY3Q9IiR7QHNlc3Npb25BY2Nlc3Nvci51c2VyfSI+CgoKCgkJdmFyIGFwcCA9IG5ldyBWdWUoewoKCQkJZWw6ICIjYXBwIiwKCgkJCWRhdGE6IHsKCgkJCQkvLyDmupblop7lk6Hos4fmlpkKCgkJCQl1c2VyRGF0YTogewoKCQkJCQlpc05ldzogdHJ1ZSwKCgkJCQkJLyog5paH5Lu25LiK5YKzICovCgoJCQkJCXVwbG9hZERlZmluZXM6IFsKCgkJCQkJCS8qCgoJCQkJCQl7CgoJCQkJCQkJam9iVHlwZTogIkExIiwKCgkJCQkJCQlmaWxlVHlwZTogIkhlYWQyaW5jaCIsCgoJCQkJCQkJZmlsZURlc2M6ICLkuozlkIvlvanoibLlpKfpoK3osrwiLAoKCQkJCQkJCWZpbGVIZWFkOiAi5LqM5ZCL5b2p6Imy5aSn6aCt6LK8IiwKCgkJCQkJCQl1cGxvYWRlZDogMSwKCgkJCQkJCQlhbGVydE1hcms6IG51bGwsCgoJCQkJCQkJbm90QWxlcnRNYXJrZWQ6IGZhbHNlLAoKCQkJCQkJCWFsZXJ0TWFya2VkOiBmYWxzZQoKCQkJCQkJfQoKCQkJCQkJKi8KCgkJCQkJXSwKCgkJCQkJLyog5Z+65pys6LOH5paZICovCgoJCQkJCS8vIOa6luWinuWToeS4u+aqlAoKCQkJCQl1c2VyOiB7CgoJCQkJCQkvLyDkvb/nlKjogIXns7vntbHnt6jomZ8gSW50ZWdlcgoKCQkJCQkJc3lzQ29kZTogIiIsCgoJCQkJCQkvLyDouqvliIborYnlrZfomZ8v5biz6JmfCgoJCQkJCQl1c2VySWQ6ICIiLAoKCQkJCQkJLy8g5aeT5ZCNCgoJCQkJCQl1c2VyTmFtZTogIiIsCgoJCQkJCQkvLyDnvoXppqzmi5rpn7MKCgkJCQkJCXJvbWFuTmFtZTogIiIsCgoJCQkJCQkvLyDpm7vlrZDpg7Xku7YKCgkJCQkJCWVtYWlsOiAiIiwKCgkJCQkJCS8vIOaJi+apn+iZn+eivAoKCQkJCQkJbW9iaWxlUGhvbmU6ICIiLAoKCQkJCQkJLy8g5Ye655Sf5pel5pyfIHl5eXlNTWRkCgoJCQkJCQliaXJ0aGRheTogIiIsCgoJCQkJCQkvLyDnm7TlsazkuLvnrqHnmbvpjITorYnomZ8KCgkJCQkJCWRzUmVnaXN0ZXJJZDogIiIsCgoJCQkJCQkvLyDnm7TlsazkuLvnrqEKCgkJCQkJCWRzQWdlbnQ6IHsKCgkJCQkJCQl1c2VySWQ6ICIiLAoKCQkJCQkJCXVzZXJOYW1lOiAiIiwKCgkJCQkJCQlhZ2VudENvZGU6ICIiLAoKCQkJCQkJCXJlZ2lzdGVyTm86ICIiLAoKCQkJCQkJCWxpbmVDb2RlOiAiIiwKCgkJCQkJCQlhZ2VudENoYW5uZWw6ICIiLAoKCQkJCQkJCW1vYmlsZVBob25lOiAiIiwKCgkJCQkJCQllbWFpbDogIiIsCgoJCQkJCQkJYnJhbmNoQ29kZTogIiIsCgoJCQkJCQkJYnJhbmNoTmFtZTogIiIsCgoJCQkJCQkJYnJhbmNoTWFuYWdlcjogIiIsCgoJCQkJCQkJYnJhbmNoTWFuYWdlckVtYWlsOiAiIiwKCgkJCQkJCQlicmFuY2hNYW5hZ2VyTW9iaWxlOiAiIiwKCgkJCQkJCQlicmFuY2hBc3Npc3RhbnQ6ICIiLAoKCQkJCQkJCWNlbnRlckNvZGU6ICIiLAoKCQkJCQkJCWNlbnRlck5hbWU6ICIiLAoKCQkJCQkJCWNlbnRlck1hbmFnZXI6ICIiLAoKCQkJCQkJCWNlbnRlck1hbmFnZXJFbWFpbDogIiIsCgoJCQkJCQkJY2VudGVyTWFuYWdlck1vYmlsZTogIiIsCgoJCQkJCQkJbGV2ZWxDb2RlOiAiIiwKCgkJCQkJCQlsZXZlbFRpdGxlOiAiIiwKCgkJCQkJCQlhZ2VudFN0YXR1c0NvZGU6ICIiLAoKCQkJCQkJCWFnZW50U3RhdHVzOiAiIiwKCgkJCQkJCQlsZWF2ZURhdGU6ICIiLAoKCQkJCQkJCWFndWlDZW50ZXI6ICIiLAoKCQkJCQkJCWFndWlNYW5hZ2VyOiAiIiwKCgkJCQkJCQlhZ3VpQ2VudGVyTmFtZTogIiIsCgoJCQkJCQkJY3JlYXRlVGltZTogIiIKCgkJCQkJCX0sCgoJCQkJCQkvLyDmjqjolqbkurrnmbvpjITorYnomZ8KCgkJCQkJCXJlZlJlZ2lzdGVySWQ6ICIiLAoKCQkJCQkJLy8g5o6o6Jam5Lq6CgoJCQkJCQlyZWZBZ2VudDogewoKCQkJCQkJCXVzZXJJZDogIiIsCgoJCQkJCQkJdXNlck5hbWU6ICIiLAoKCQkJCQkJCWFnZW50Q29kZTogIiIsCgoJCQkJCQkJcmVnaXN0ZXJObzogIiIsCgoJCQkJCQkJbGluZUNvZGU6ICIiLAoKCQkJCQkJCWFnZW50Q2hhbm5lbDogIiIsCgoJCQkJCQkJbW9iaWxlUGhvbmU6ICIiLAoKCQkJCQkJCWVtYWlsOiAiIiwKCgkJCQkJCQlicmFuY2hDb2RlOiAiIiwKCgkJCQkJCQlicmFuY2hOYW1lOiAiIiwKCgkJCQkJCQlicmFuY2hNYW5hZ2VyOiAiIiwKCgkJCQkJCQlicmFuY2hNYW5hZ2VyRW1haWw6ICIiLAoKCQkJCQkJCWJyYW5jaE1hbmFnZXJNb2JpbGU6ICIiLAoKCQkJCQkJCWJyYW5jaEFzc2lzdGFudDogIiIsCgoJCQkJCQkJY2VudGVyQ29kZTogIiIsCgoJCQkJCQkJY2VudGVyTmFtZTogIiIsCgoJCQkJCQkJY2VudGVyTWFuYWdlcjogIiIsCgoJCQkJCQkJY2VudGVyTWFuYWdlckVtYWlsOiAiIiwKCgkJCQkJCQljZW50ZXJNYW5hZ2VyTW9iaWxlOiAiIiwKCgkJCQkJCQlsZXZlbENvZGU6ICIiLAoKCQkJCQkJCWxldmVsVGl0bGU6ICIiLAoKCQkJCQkJCWFnZW50U3RhdHVzQ29kZTogIiIsCgoJCQkJCQkJYWdlbnRTdGF0dXM6ICIiLAoKCQkJCQkJCWxlYXZlRGF0ZTogIiIsCgoJCQkJCQkJYWd1aUNlbnRlcjogIiIsCgoJCQkJCQkJYWd1aU1hbmFnZXI6ICIiLAoKCQkJCQkJCWFndWlDZW50ZXJOYW1lOiAiIiwKCgkJCQkJCQljcmVhdGVUaW1lOiAiIgoKCQkJCQkJfSwKCgkJCQkJCS8vIOmAmuioiuiZleS7o+iZnwoKCQkJCQkJY29tbUNvZGU6ICIiLAoKCQkJCQkJLy8g6YCa6KiK6JmVCgoJCQkJCQljb21tVW5pdDogewoKCQkJCQkJCWFnZW50Q2hhbm5lbDogIiIsCgoJCQkJCQkJY29tbUNvZGU6ICIiLAoKCQkJCQkJCWNvbW1OYW1lOiAiIiwKCgkJCQkJCQlhcmVhQ2VudGVyOiB7CgoJCQkJCQkJCWFnZW50Q2hhbm5lbDogIiIsCgoJCQkJCQkJCWNlbnRlckNvZGU6ICIiLAoKCQkJCQkJCQljZW50ZXJOYW1lOiAiIiwKCgkJCQkJCQkJaXNEZWxldGU6IGZhbHNlCgoJCQkJCQkJfSwKCgkJCQkJCQlhc3Npc3RhbnQ6IHsKCgkJCQkJCQkJZW1wbG95ZWVObzogIiIsCgoJCQkJCQkJCWVtcGxveWVlTmFtZTogIiIsCgoJCQkJCQkJCWVuYWJsZVNlbmRTbXM6IGZhbHNlLAoKCQkJCQkJCQllbmFibGVTZW5kRW1haWw6IGZhbHNlLAoKCQkJCQkJCQllbWFpbDogIiIsCgoJCQkJCQkJCW1vYmlsZVBob25lOiAiIiwKCgkJCQkJCQkJbW9kaWZ5VGltZTogIiIKCgkJCQkJCQl9LAoKCQkJCQkJCWlzRGVsZXRlOiBmYWxzZQoKCQkJCQkJfSwKCgkJCQkJCS8vIOiBt+WLmeS7o+eivAoKCQkJCQkJam9iSWQ6ICIiLAoKCQkJCQkJLy8g6IG35YuZ6aGe5YilCgoJCQkJCQlqb2JUeXBlOiAiIiwKCgkJCQkJCS8vIOaWsOWinuaZgumWkyB5eXl5LU1NLWRkJ1QnSEg6bW06c3MKCgkJCQkJCWNyZWF0ZVRpbWU6ICIiLAoKCQkJCQkJLy8g5L+u5pS55pmC6ZaTIHl5eXktTU0tZGQnVCdISDptbTpzcwoKCQkJCQkJbW9kaWZ5VGltZTogIiIsCgoJCQkJCQkvLyDni4DmhYsKCgkJCQkJCXN0YXR1czogIiIsCgoJCQkJCQkvLyDmmK/lkKbntZDmoYgKCgkJCQkJCWlzQ2xvc2U6IGZhbHNlLAoKCQkJCQkJLy8g5piv5ZCm5bey57C9572y6IGy5piO5LqL6aCFCgoJCQkJCQlhZ3JlZW1lbnRTaWduZWQ6IGZhbHNlCgoJCQkJCX0sCgoJCQkJCS8vIOa6luWinuWToeips+e0sOizh+aWmeaqlAoKCQkJCQl1c2VyRGV0YWlsOiB7CgoJCQkJCQkvLyDmupblop7lk6HkuLvopoFrZXnlgLwKCgkJCQkJCXN5c0NvZGU6ICIiLAoKCQkJCQkJLy8g5paw5aKe5pmC6ZaTIHl5eXktTU0tZGQnVCdISDptbTpzcwoKCQkJCQkJYWRkRGF0ZTogIiIsCgoJCQkJCQkvLyDmm7TmlrDmmYLplpMgeXl5eS1NTS1kZCdUJ0hIOm1tOnNzCgoJCQkJCQl1cGREYXRlOiAiIiwKCgkJCQkJCS8vIAoKCQkJCQkJZW5OYW1lOiAiIiwKCgkJCQkJCS8vIOiLseaWh+Wnk+WQjQoKCQkJCQkJZWVnTmFtZTogIiIsCgoJCQkJCQkvLyDloLHogZjllq7kvY0v5o6o6Jam5Lq6L+WinuWToeiAhQoKCQkJCQkJbXlSZWZlcnJlcjogIiIsCgoJCQkJCQkvLyDlkIzmpa3ntpPmrbcKCgkJCQkJCW15U2FtZUV4cGVyaWVuY2U6ICIiLAoKCQkJCQkJLy8g5piv5ZCm5pyJ6Kaq5bGs5Zyo5pys5YWs5Y+45Lu76IG3CgoJCQkJCQlpc1dvcmtIZXJlOiAiIiwKCgkJCQkJCS8vIExpbmUgSUQKCgkJCQkJCWxpbmVJRDogIiIsCgoJCQkJCQkvLyDmgKfliKUKCgkJCQkJCXNleDogIiIsCgoJCQkJCQkvLyDlqZrlp7sKCgkJCQkJCW1hcnJ5OiAiIiwKCgkJCQkJCS8vIOihgOWeiwoKCQkJCQkJYmxvb2Q6ICIiLAoKCQkJCQkJLy8g5a2Q5aWz5Lq65pW4CgoJCQkJCQlicm9vZDogIiIsCgoJCQkJCQkvLyDkvY/lrrbpm7voqbEKCgkJCQkJCXRlbDE6ICIiLAoKCQkJCQkJLy8g6KGM5YuV6Zu76KmxCgoJCQkJCQl0ZWwyOiAiIiwKCgkJCQkJCS8vIOmbu+WtkOmDteS7tgoKCQkJCQkJbWFpbDogIiIsCgoJCQkJCQkvLyDljp/kvY/msJHlp5PlkI0KCgkJCQkJCXJvbWFuTmFtZTogIiIsCgoJCQkJCQkvLyDnt4rmgKXoga/ntaHkurrlp5PlkI0KCgkJCQkJCWNyaU5hbWU6ICIiLAoKCQkJCQkJLy8g57eK5oCl6IGv57Wh5Lq66Zec5L+CIDA66YWN5YG2IDE65a2Q5aWzIDI654i25q+NIDM65YWE5byf5aeQ5aa5IDQ65pyL5Y+LIDU65YW25LuWCgoJCQkJCQljcmlSZWw6ICIiLAoKCQkJCQkJLy8g57eK5oCl6IGv57Wh5Lq66Zu76KmxCgoJCQkJCQljcmlUZWw6ICIiLAoKCQkJCQkJLy8g5a245q23IDA65YW25LuWIDE656CU56m25omAIDI65aSn5a24IDM65bCI56eRIDQ66auY5LitL+iBtyA1OuWci+S4rSA2OuWwj+WtuAoKCQkJCQkJZGVncmVlOiAiIiwKCgkJCQkJCS8vIOacgOmrmOWtuOatt+WtuOagoeWQjeeosQoKCQkJCQkJc2Nob29sOiAiIiwKCgkJCQkJCS8vIOenkeezuwoKCQkJCQkJbWFqb3I6ICIiLAoKCQkJCQkJLy8g55Wi5qWtIDA655Wi5qWtIDE66IKE5qWtIDI65YW25LuWCgoJCQkJCQlncmFkZTogIiIsCgoJCQkJCQkvLyDlrbjmoKHnpL7lnJjntpPpqZcgMDrnhKEgMTrmnIkKCgkJCQkJCWFzc286ICIiLAoKCQkJCQkJLy8g5a245qCh56S+5ZyY5pOU5Lu75bm56YOo5ZCN56ixCgoJCQkJCQlhc3NvTmFtZTogIiIsCgoJCQkJCQkvLyDlhazlj7jlkI3nqLExCgoJCQkJCQljb20xOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjotbcpCgoJCQkJCQlmZGF0ZVkxOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjotbcpCgoJCQkJCQlmZGF0ZU0xOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjov4QpCgoJCQkJCQl0ZGF0ZVkxOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjov4QpCgoJCQkJCQl0ZGF0ZU0xOiAiIiwKCgkJCQkJCS8vIOW5tOizhyBleDoxLjIo5bm0KQoKCQkJCQkJZXhwdDE6ICIiLAoKCQkJCQkJLy8g6IG356ixCgoJCQkJCQl0aXRsZTE6ICIiLAoKCQkJCQkJLy8g5bel5L2c5bGs5oCnIDA65qWt5YuZ5oCnIDE66Z2e5qWt5YuZ5oCnCgoJCQkJCQlwcm9wZXJ0eTE6ICIiLAoKCQkJCQkJLy8g5bm05pS25YWlIOiQrOWFgwoKCQkJCQkJaW5jb21lMTogIiIsCgoJCQkJCQkvLyDooYzmpa3liKUgMDrkv53pmqrmpa0gMTrph5Hono3mpa0gMjrphqvnmYLmpa0gMzrlhbbku5booYzmpa0KCgkJCQkJCWluZHVzdHJ5MTogIiIsCgoJCQkJCQkvLyDlhazlj7jlkI3nqLEyCgoJCQkJCQljb20yOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjotbcpCgoJCQkJCQlmZGF0ZVkyOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjotbcpCgoJCQkJCQlmZGF0ZU0yOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjov4QpCgoJCQkJCQl0ZGF0ZVkyOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjov4QpCgoJCQkJCQl0ZGF0ZU0yOiAiIiwKCgkJCQkJCS8vIOW5tOizhyBleDoxLjIo5bm0KQoKCQkJCQkJZXhwdDI6ICIiLAoKCQkJCQkJLy8g6IG356ixCgoJCQkJCQl0aXRsZTI6ICIiLAoKCQkJCQkJLy8g5bel5L2c5bGs5oCnIDA65qWt5YuZ5oCnIDE66Z2e5qWt5YuZ5oCnCgoJCQkJCQlwcm9wZXJ0eTI6ICIiLAoKCQkJCQkJLy8g5bm05pS25YWlIOiQrOWFgwoKCQkJCQkJaW5jb21lMjogIiIsCgoJCQkJCQkvLyDooYzmpa3liKUgMDrkv53pmqrmpa0gMTrph5Hono3mpa0gMjrphqvnmYLmpa0gMzrlhbbku5booYzmpa0KCgkJCQkJCWluZHVzdHJ5MjogIiIsCgoJCQkJCQkvLyDlhazlj7jlkI3nqLEzCgoJCQkJCQljb20zOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjotbcpCgoJCQkJCQlmZGF0ZVkzOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjotbcpCgoJCQkJCQlmZGF0ZU0zOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+W5tCjov4QpCgoJCQkJCQl0ZGF0ZVkzOiAiIiwKCgkJCQkJCS8vIOS7u+iBt+acn+mWk+aciCjov4QpCgoJCQkJCQl0ZGF0ZU0zOiAiIiwKCgkJCQkJCS8vIOW5tOizhyBleDoxLjIo5bm0KQoKCQkJCQkJZXhwdDM6ICIiLAoKCQkJCQkJLy8g6IG356ixCgoJCQkJCQl0aXRsZTM6ICIiLAoKCQkJCQkJLy8g5bel5L2c5bGs5oCnIDA65qWt5YuZ5oCnIDE66Z2e5qWt5YuZ5oCnCgoJCQkJCQlwcm9wZXJ0eTM6ICIiLAoKCQkJCQkJLy8g5bm05pS25YWlIOiQrOWFgwoKCQkJCQkJaW5jb21lMzogIiIsCgoJCQkJCQkvLyDooYzmpa3liKUgMDrkv53pmqrmpa0gMTrph5Hono3mpa0gMjrphqvnmYLmpa0gMzrlhbbku5booYzmpa0KCgkJCQkJCWluZHVzdHJ5MzogIiIsCgoJCQkJCQkvLyDphY3lgbbogbfmpa0KCgkJCQkJCXBhcnRuZXJKb2I6ICIiLAoKCQkJCQkJLy8g5aO96Zqq6K2J54WnCgoJCQkJCQljZXJ0MTogIiIsCgoJCQkJCQkvLyDnlKLpmqrorYnnhacKCgkJCQkJCWNlcnQyOiAiIiwKCgkJCQkJCS8vIOaKleizh+Wei+itieeFpwoKCQkJCQkJY2VydDM6ICIiLAoKCQkJCQkJLy8g6YWN5YG25YW25LuWCgoJCQkJCQljZXJ0RWxzZTogIiIsCgoJCQkJCQkvLyDlpJbluaPorYnnhacKCgkJCQkJCWNlcnQ0OiAiIiwKCgkJCQkJCS8vIOi6q+S7veitieWtl+iZnwoKCQkJCQkJcGlkOiAiIiwKCgkJCQkJCS8vIOaItuexjeWcsOWdgAoKCQkJCQkJYWRkcjE6ICIiLAoKCQkJCQkJLy8g5oi257GN5Zyw5Z2ALemDtemBnuWNgOiZnwoKCQkJCQkJYWRkcjFQb3N0YWxDb2RlOiAiIiwKCgkJCQkJCS8vIOaItuexjeWcsOWdgC3nuKPluIIKCgkJCQkJCWFkZHIxQ2l0eTogIiIsCgoJCQkJCQkvLyDmiLbnsY3lnLDlnYAt6YSJ6Y6u5biC5Y2ACgoJCQkJCQlhZGRyMVRvd25zOiAiIiwKCgkJCQkJCS8vIOaItuexjeWcsOWdgC3ot68v5q61L+mBky/ooZcv5p2RL+mHjAoKCQkJCQkJYWRkcjFWaWxsYWdlOiAiIiwKCgkJCQkJCS8vIOaItuexjeWcsOWdgC3phLAKCgkJCQkJCWFkZHIxUm9hZFN0cmVldDogIiIsCgoJCQkJCQkvLyDmiLbnsY3lnLDlnYAt5be3CgoJCQkJCQlhZGRyMUxhbmU6ICIiLAoKCQkJCQkJLy8g5oi257GN5Zyw5Z2ALeW8hAoKCQkJCQkJYWRkcjFBbGxleTogIiIsCgoJCQkJCQkvLyDmiLbnsY3lnLDlnYAt6KGWCgoJCQkJCQlhZGRyMVNlY3Rpb246ICIiLAoKCQkJCQkJLy8g5oi257GN5Zyw5Z2ALeiZnwoKCQkJCQkJYWRkcjFOdW1iZXI6ICIiLAoKCQkJCQkJLy8g5oi257GN5Zyw5Z2ALeaokwoKCQkJCQkJYWRkcjFGbG9vcjogIiIsCgoJCQkJCQkvLyDmiLbnsY3lnLDlnYAt5YKZ6Ki7CgoJCQkJCQlhZGRyMVJlbWFyazogIiIsCgoJCQkJCQkvLyDpgJroqIrlnLDlnYAKCgkJCQkJCWFkZHIyOiAiIiwKCgkJCQkJCS8vIOmAmuioiuWcsOWdgC3pg7XpgZ7ljYDomZ8KCgkJCQkJCWFkZHIyUG9zdGFsQ29kZTogIiIsCgoJCQkJCQkvLyDpgJroqIrlnLDlnYAt57ij5biCCgoJCQkJCQlhZGRyMkNpdHk6ICIiLAoKCQkJCQkJLy8g6YCa6KiK5Zyw5Z2ALemEiemOruW4guWNgAoKCQkJCQkJYWRkcjJUb3duczogIiIsCgoJCQkJCQkvLyDpgJroqIrlnLDlnYAt6LevL+autS/pgZMv6KGXL+adkS/ph4wKCgkJCQkJCWFkZHIyVmlsbGFnZTogIiIsCgoJCQkJCQkvLyDpgJroqIrlnLDlnYAt6YSwCgoJCQkJCQlhZGRyMlJvYWRTdHJlZXQ6ICIiLAoKCQkJCQkJLy8g6YCa6KiK5Zyw5Z2ALeW3twoKCQkJCQkJYWRkcjJMYW5lOiAiIiwKCgkJCQkJCS8vIOmAmuioiuWcsOWdgC3lvIQKCgkJCQkJCWFkZHIyQWxsZXk6ICIiLAoKCQkJCQkJLy8g6YCa6KiK5Zyw5Z2ALeihlgoKCQkJCQkJYWRkcjJTZWN0aW9uOiAiIiwKCgkJCQkJCS8vIOmAmuioiuWcsOWdgC3omZ8KCgkJCQkJCWFkZHIyTnVtYmVyOiAiIiwKCgkJCQkJCS8vIOmAmuioiuWcsOWdgC3mqJMKCgkJCQkJCWFkZHIyRmxvb3I6ICIiLAoKCQkJCQkJLy8g6YCa6KiK5Zyw5Z2ALeWCmeiouwoKCQkJCQkJYWRkcjJSZW1hcms6ICIiLAoKCQkJCQkJLy8g5YW15b256Kq/5p+lCgoJCQkJCQlhcm15OiAiIiwKCgkJCQkJCS8vIOS4reS/oemKgOWPsOW5o+W4s+WLmS3liIbooYzlkI3nqLEKCgkJCQkJCWN0YmNBY2NvdW50QnJhbmNoOiAiIiwKCgkJCQkJCS8vIOS4reS/oemKgOWPsOW5o+W4s+aIti3luLPomZ/omZ/norwKCgkJCQkJCWN0YmNBY2NvdW50QWNjb3VudE51bWJlcjogIiIsCgoJCQkJCQkvLyDmmK/lkKbmnInlhbbku5blt6XkvZzntpPmrbcgWU4KCgkJCQkJCXdvcmtPdGhlcjogIiIsCgoJCQkJCQkvLyDmmK/lkKbmk5Tku7vpgY7mpa3li5nkurrlk6EKCgkJCQkJCXVzZWR0b2JlQWdlbnQ6ICIiLAoKCQkJCQkJLy8g5piv5ZCm5pu+5Lu76IG35pys5YWs5Y+45qWt5YuZ5ZOhKOWMheWQq+WPsOeBoy/lro/liKkv5aSn6YO95pyD5Lq65aO9KQoKCQkJCQkJdXNlZHRvYmVBZ2VudFRXOiAiIgoKCQkJCQl9LAoKCQkJCQkvKiDlrbjntpPmrbcgKi8KCgkJCQkJLy8g5bel5L2c57aT6amXCgoJCQkJCXVzZXJXb3JrczogWwoKCQkJCQkJLyoKCgkJCQkJCXsKCgkJCQkJCQkvLyDmtYHmsLTomZ8KCgkJCQkJCQlzZXE6IEludGVnZXIsCgoJCQkJCQkJLy8g5rqW5aKe5ZOh5Li76KaBa2V55YC8CgoJCQkJCQkJc3lzQ29kZTogSW50ZWdlciwKCgkJCQkJCQkvLyDlhazlj7jlkI3nqLEKCgkJCQkJCQljb21wYW55TmFtZTogU3RyaW5nLAoKCQkJCQkJCS8vIOW3peS9nOacn+mWky3otbcgWVlZWS1NTS1ERAoKCQkJCQkJCXdvcmtTdGFydERhdGU6IFN0cmluZywKCgkJCQkJCQkvLyDlt6XkvZzmnJ/plpMt6L+EIFlZWVktTU0tREQKCgkJCQkJCQl3b3JrRW5kRGF0ZTogU3RyaW5nLAoKCQkJCQkJCS8vIOmAmuioiuiZleWQjeeosS3pnZ7lv4XloasKCgkJCQkJCQlicmFuY2hOYW1lOiBTdHJpbmcKCgkJCQkJCX0KCgkJCQkJCSovCgoJCQkJCV0sCgoJCQkJCS8vIOWFtuS7luW3peS9nOe2k+attwoKCQkJCQl1c2VyV29ya090aGVyczogWwoKCQkJCQkJLyoKCgkJCQkJCXsKCgkJCQkJCQkvLyDmtYHmsLTomZ8KCgkJCQkJCQlzZXE6IEludGVnZXIsCgoJCQkJCQkJLy8g5rqW5aKe5ZOh5Li76KaBa2V55YC8CgoJCQkJCQkJc3lzQ29kZTogSW50ZWdlciwKCgkJCQkJCQkvLyDlhazlj7jlkI3nqLEKCgkJCQkJCQljb21wYW55TmFtZTogU3RyaW5nLAoKCQkJCQkJCS8vIOW3peS9nOacn+mWky3otbcgWVlZWS1NTS1ERAoKCQkJCQkJCXdvcmtTdGFydERhdGU6IFN0cmluZywKCgkJCQkJCQkvLyDlt6XkvZzmnJ/plpMt6L+EIFlZWVktTU0tREQKCgkJCQkJCQl3b3JrRW5kRGF0ZTogU3RyaW5nLAoKCQkJCQkJCS8vIOiBt+eosQoKCQkJCQkJCXRpdGxlOiBTdHJpbmcsCgoJCQkJCQkJLy8g6KGM5qWt5YilCgoJCQkJCQkJam9ia2luZDogU3RyaW5nLAoKCQkJCQkJCS8vIOW3peS9nOWFp+WuuQoKCQkJCQkJCWpvYkRlc2M6IFN0cmluZwoKCQkJCQkJfQoKCQkJCQkJKi8KCgkJCQkJXSwKCgkJCQkJLyog6IOM5pmv6IGy5piOICovCgoJCQkJCXVzZXJCYWNrZ3JvdW5kOiB7CgoJCQkJCQkvLyDmupblop7lk6HllK/kuIDlgLwKCgkJCQkJCXN5c0NvZGU6ICIiLAoKCQkJCQkJLy8g5L+h55So5aCx5ZGK5YiG5pW4IEludGVnZXIKCgkJCQkJCWNyZWRpdFJwdERlZ3JlZTogIiIsCgoJCQkJCQkvLyDkv6HnlKjloLHlkYrml6XmnJ8geXl5eS1NTS1kZCdUJ0hIOm1tOnNzCgoJCQkJCQljcmVkaXRScHREYXRlOiAiIiwKCgkJCQkJCS8vIOS6uui6q+S/nemaquWQiOagvOitieiZnwoKCQkJCQkJbGlmZVJlZ2lzdGVySWQ6ICIiLAoKCQkJCQkJLy8g5Lq66Lqr5L+d6Zqq55m76YyE54uA5rOBIEludGVnZXIKCgkJCQkJCWxpZmVSZWdTdGF0dXM6ICIiLAoKCQkJCQkJLy8g6YeR6J6N5bi46K2Y5ZCI5qC86K2J6JmfCgoJCQkJCQlmaW5jUmVnaXN0ZXJJZDogIiIsCgoJCQkJCQkvLyDosqHnlKLnmbvpjITni4Dms4EoVGFibGVMIFN5c3RlbUNvZGVEZWYsQ29kZVR5cGU6R2VuUmVnU3RhdHVzKQoKCQkJCQkJZ2VuUmVnU3RhdHVzOiAiIiwKCgkJCQkJCS8vIOaYr+WQpuacieimquWxrOWcqOacrOWFrOWPuOaTlOS7u+alreWLmeWToVlOCgoJCQkJCQlwYXJlbnRBZ2VudDogIiIsCgoJCQkJCQkvLyDopqrlsazlp5PlkI0KCgkJCQkJCXBhcmVudE5hbWU6ICIiLAoKCQkJCQkJLy8g6Kaq5bGs6Zec5L+CKFRhYmxlTCBTeXN0ZW1Db2RlRGVmLENvZGVUeXBlOlBhcmVudFJlYWwpCgoJCQkJCQlwYXJlbnRSZWxhOiAiIiwKCgkJCQkJCS8vIOalreWLmeS6uuWToeeuoeeQhuimj+WJh+aHsuiZlee0gOmMhChZOiDmnIkgTjrnhKEpCgoJCQkJCQlwdW5pc2hIaXN0b3J5OiAiIiwKCgkJCQkJCS8vIOalreWLmeS6uuWToeeuoeeQhuimj+WJh+aHsuiZlee0gOmMhOips+e0sOiqquaYjgoKCQkJCQkJcHVuaXNoSGlzRGV0YWlsOiAiIiwKCgkJCQkJCS8vIOaYr+WQpuacieeKr+e9que0gOmMhChZOiDmnIkgTjrnhKEpCgoJCQkJCQljcmltZUhpc3Rvcnk6ICIiLAoKCQkJCQkJLy8g54qv572q57SA6YyE6Kmz57Sw6Kqq5piOCgoJCQkJCQljcmltZURldGFpbDogIiIsCgoJCQkJCQkvLyDlhazmnIPmh7LomZXntIDpjIQgKFk6IOaciSBOOueEoSkKCgkJCQkJCWxpYVB1bmlzaEhpc3Rvcnk6ICIiLAoKCQkJCQkJLy8g5YWs5pyD5oey6JmV57SA6YyE6Kmz57Sw6Kqq5piOCgoJCQkJCQlsaWFQdW5pc2hIaXNEZXRhaWw6ICIiCgoJCQkJCX0KCgkJCQl9LAoKLy8gCQkJCWhhc1dvcmtFeHA6IGZhbHNlLAoKLy8gCQkJCWhhc1dvcmtPdGhlckV4cDogZmFsc2UsCgoJCQkJYWxlcnQ6IHsKCgkJCQkJZm9ybTAxOiBmYWxzZSwKCgkJCQkJZm9ybTAyOiBmYWxzZSwKCgkJCQkJZm9ybTAzOiBmYWxzZSwKCgkJCQkJZm9ybTA0OiBmYWxzZQoKCQkJCX0sCgoJCQkJbGluazogewoKCQkJCQkvLyDlo73pmqrlhazmnIPpgKPntZAKCgkJCQkJbGlmZU9yZzogImh0dHA6Ly9wdWJsaWMubGlhcm9jLm9yZy50dy9saWEtcHVibGljL2luZGV4VXNyLmpzcCIsCgoJCQkJCS8vIOeUoumaquWFrOacg+mAo+e1kAoKCQkJCQlnZW5lcmFsT3JnOiAiaHR0cDovL3NhbGVzaW5mby5ubGlhLm9yZy50dy9pbmRleC5waHAiCgoJCQkJfQoKCQkJfSwKCgkJCWJlZm9yZU1vdW50KCkgewoKCQkJCS8vIOa6luWinuWToeizh+aWmQoKCQkJCXZhciB2bSA9IHRoaXM7CgoJCQkJdmFyIHVzZXJEYXRhID0gLypbWyR7QHJlcXVlc3RBY2Nlc3Nvci5nZXRBdHRyaWJ1dGUoVChjb20udGFpd2FubGlmZS5yZWNydWl0LmVudW1zLk1vZGVsS2V5KS5VU0VSX0RBVEEpfV1dKi8ge307CgoJCQkJLy8g5Yid5aeL5YC8CgoJCQkJdmFyIG5lc3RlZEVtcHR5VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewoKCQkJCQlpZiAoJC5pc0FycmF5KHZhbHVlKSkgewoKCQkJCQkJZm9yICh2YXIgdmFsIG9mIHZhbHVlKSB7CgoJCQkJCQkJaWYgKCJzdHJpbmciID09PSB0eXBlb2YodmFsKSkgewoKCQkJCQkJCQl2YWwgPSB2YWwgfHwgIiI7CgoJCQkJCQkJfSBlbHNlIHsKCgkJCQkJCQkJbmVzdGVkRW1wdHlWYWx1ZSh2YWwpOwoKCQkJCQkJCX0KCgkJCQkJCX0KCgkJCQkJfSBlbHNlIGlmICgkLmlzUGxhaW5PYmplY3QodmFsdWUpKSB7CgoJCQkJCQlmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHsKCgkJCQkJCQlpZiAoInN0cmluZyIgPT09IHR5cGVvZih2YWx1ZVtrZXldKSB8fCB1bmRlZmluZWQgPT0gdmFsdWVba2V5XSB8fCBudWxsID09IHZhbHVlW2tleV0pIHsKCgkJCQkJCQkJdmFsdWVba2V5XSA9IHZhbHVlW2tleV0gfHwgIiI7CgoJCQkJCQkJfSBlbHNlIHsKCgkJCQkJCQkJbmVzdGVkRW1wdHlWYWx1ZSh2YWx1ZVtrZXldKTsKCgkJCQkJCQl9CgoJCQkJCQl9CgoJCQkJCX0KCgkJCQl9OwoKCQkJCW5lc3RlZEVtcHR5VmFsdWUodXNlckRhdGEpOwoKCQkJCXRoaXMudXNlckRhdGEgPSAkLmV4dGVuZCh0cnVlLCB7fSwgdGhpcy51c2VyRGF0YSwgdXNlckRhdGEpOwoKLy8gCQkJCWlmICh0aGlzLnVzZXJEYXRhLnVzZXJXb3JrcyAmJiB0aGlzLnVzZXJEYXRhLnVzZXJXb3Jrcy5sZW5ndGggPiAwKSB7CgovLyAJCQkJCXRoaXMuaGFzV29ya0V4cCA9IHRydWU7CgovLyAJCQkJfQoKCQkJCWlmICghdGhpcy51c2VyRGF0YS51c2VyRGV0YWlsLndvcmtPdGhlcikgewoKCQkJCQlpZiAodGhpcy51c2VyRGF0YS51c2VyV29ya090aGVycyAmJiB0aGlzLnVzZXJEYXRhLnVzZXJXb3JrT3RoZXJzLmxlbmd0aCA+IDApIHsKCgkJCQkJCXRoaXMudXNlckRhdGEudXNlckRldGFpbC53b3JrT3RoZXIgPSAiWSI7CgoJCQkJCX0gZWxzZSB7CgoJCQkJCQl0aGlzLnVzZXJEYXRhLnVzZXJEZXRhaWwud29ya090aGVyID0gIk4iOwoKCQkJCQl9CgoJCQkJfQoKLy8gCQkJCXRoaXMuaGFzV29ya090aGVyRXhwID0gIlkiID09IHRoaXMudXNlckRhdGEudXNlckRldGFpbC53b3JrT3RoZXI7CgoJCQl9LAoKCQkJbW91bnRlZCgpIHsKCgkJCQlzZXRUYWIoInRhYmxpc3QiKTsKCgkJCQl0aGlzLmluaXQoKTsKCgkJCX0sCgoJCQltZXRob2RzOiB7CgoJCQkJaW5pdCgpIHsKCgkJCQkJdGhpcy5pbml0UnVsZSgpOwoKCQkJCQlpZiAoZmFsc2UgPT09IHRoaXMudXNlckRhdGEuaXNOZXcpIHsKCgkJCQkJCXRoaXMuc2hvd1RhYkFsZXJ0KCk7CgoJCQkJCX0KCgkJCQl9LAoKCQkJCWluaXRSdWxlKCkgewoKCQkJCQl2YXIgZXJyb3JQbGFjZW1lbnQgPSBmdW5jdGlvbiAoZXJyb3IsIGVsZW1lbnQpIHsKCgkJCQkJCXZhciBlbmFtZSA9IGVsZW1lbnQuYXR0cigibmFtZSIpOwoKCQkJCQkJaWYgKC9edXBsb2FkRmlsZS8udGVzdChlbmFtZSkpIHsKCgkJCQkJCQkkKGVsZW1lbnQpLmNsb3Nlc3QoInRhYmxlIikubmV4dCgpLmFwcGVuZChlcnJvcik7CgoJCQkJCQl9IGVsc2UgaWYgKC9eYWRkci8udGVzdChlbmFtZSkgfHwgL0hpc3RvcnkvLnRlc3QoZW5hbWUpIHx8IC9ecGFyZW50W05hbWV8UmVsYV0vLnRlc3QoZW5hbWUpKSB7CgoJCQkJCQkJJChlbGVtZW50KS5jbG9zZXN0KCJ0ZCIpLnBhcmVudCgpLmNoaWxkcmVuKCkubGFzdCgpLmFwcGVuZChlcnJvcik7CgoJCQkJCQl9IGVsc2UgewoKCQkJCQkJCSQoZWxlbWVudCkucGFyZW50KCkuY2hpbGRyZW4oKS5sYXN0KCkuYWZ0ZXIoZXJyb3IpOwoKCQkJCQkJfQoKCQkJCQl9OwoKCQkJCQl2YXIgZGVmYXVsdFNldHRpbmdzID0gewoKCQkJCQkJZXJyb3JFbGVtZW50OiAiZGl2IiwKCgkJCQkJCWVycm9yUGxhY2VtZW50OiBlcnJvclBsYWNlbWVudAoKCQkJCQl9CgoJCQkJCXZhciBmb3JtMDFTZXR0aW5ncyA9IHsKCgkJCQkJCXJ1bGVzOiB7fSwKCgkJCQkJCW1lc3NhZ2VzOiB7fQoKCQkJCQl9OwoKCQkJCQlmb3IgKHZhciBpbmRleCBpbiB0aGlzLnVzZXJEYXRhLnVwbG9hZERlZmluZXMpIHsKCgkJCQkJCWlmICh0aGlzLnVzZXJEYXRhLnVwbG9hZERlZmluZXNbaW5kZXhdLm11c3RGbGFnID09ICJZIikgewoKCQkJCQkJCWZvcm0wMVNldHRpbmdzLnJ1bGVzW2B1cGxvYWRGaWxlJHtwYXJzZUludChpbmRleCkgKyAxfWBdID0gewoKCQkJCQkJCQkJcmVxdWlyZWQ6IHsKCgkJCQkJCQkJCQlkZXBlbmRzOiBmdW5jdGlvbihlbGVtZW50KSB7CgoJCQkJCQkJCQkJCXJldHVybiAiMCIgPT0gJChlbGVtZW50KS5wcmV2KCkudmFsKCk7CgoJCQkJCQkJCQkJfQoKCQkJCQkJCQkJfQoKCQkJCQkJCQl9OwoKCQkJCQkJCQlmb3JtMDFTZXR0aW5ncy5tZXNzYWdlc1tgdXBsb2FkRmlsZSR7cGFyc2VJbnQoaW5kZXgpICsgMX1gXSA9IHsgcmVxdWlyZWQ6IGDoq4vkuIrlgrMke3RoaXMudXNlckRhdGEudXBsb2FkRGVmaW5lc1tpbmRleF0uZmlsZUhlYWR9JHsiSGVhZDJpbmNoIiA9PSB0aGlzLnVzZXJEYXRhLnVwbG9hZERlZmluZXNbaW5kZXhdLmZpbGVUeXBlID8gIijkuIrlgrPmoLzlvI/pmZAgSlBHKSIgOiAiIn1gIH07CgoJCQkJCQkJCgoJCQkJCQl9CgoJCQkJCX0KCgkJCQkJJCgiI2Zvcm0wMSIpLnZhbGlkYXRlKCQuZXh0ZW5kKHRydWUsIHt9LCBkZWZhdWx0U2V0dGluZ3MsIGZvcm0wMVNldHRpbmdzKSk7CgoJCQkJCSQoIiNmb3JtMDIiKS52YWxpZGF0ZSgkLmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdFNldHRpbmdzLCB7CgoJCQkJCQlydWxlczogewoKCQkJCQkJCXVzZXJOYW1lOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlLAoKCQkJCQkJCQltYXhsZW5ndGg6IDIwMAoKCQkJCQkJCX0sCgoJCQkJCQkJcm9tYW5OYW1lOiB7CgoJCQkJCQkJCW1heGxlbmd0aDogMjAwLAoKCQkJCQkJCQlmb3JtYXQ6IGVnby52YWxpZGF0b3IucGF0dGVybi5yb21hbk5hbWUKCgkJCQkJCQl9LAoKCQkJCQkJCWJpcnRoZGF5OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlLAoKCQkJCQkJCQltYXhsZW5ndGg6IDgKCgkJCQkJCQl9LAoKCQkJCQkJCW1vYmlsZVBob25lOiB7CgoJCQkJCQkJCW1heGxlbmd0aDogMjAsCgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlLAoKCQkJCQkJCQltb2JpbGVQaG9uZTogdHJ1ZQoKCQkJCQkJCX0sCgoJCQkJCQkJdGVsMTogewoKCQkJCQkJCQltYXhsZW5ndGg6IDIwLAoKCQkJCQkJCQlmb3JtYXQ6IGVnby52YWxpZGF0b3IucGF0dGVybi50ZWxlcGhvbmUKCgkJCQkJCQl9LAoKCQkJCQkJCWVtYWlsOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlLAoKCQkJCQkJCQllbWFpbDogdHJ1ZSwKCgkJCQkJCQkJYmxvY2tFbWFpbDogdHJ1ZSwKCgkJCQkJCQkJbWF4bGVuZ3RoOiA1MAoKCQkJCQkJCX0sCgoJCQkJCQkJYXJteTogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZQoKCQkJCQkJCX0sCgoJCQkJCQkJY3RiY0FjY291bnRCcmFuY2g6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHRydWUKCgkJCQkJCQl9LAoKCQkJCQkJCWN0YmNBY2NvdW50QWNjb3VudE51bWJlcjogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZSwKCgkJCQkJCQkJZGlnaXRzOiB0cnVlLAoKCQkJCQkJCQlmb3JtYXQ6IGVnby52YWxpZGF0b3IucGF0dGVybi5hY2NvdW50TnVtYmVyCgoJCQkJCQkJfQoKCQkJCQkJfSwgbWVzc2FnZXM6IHsKCgkJCQkJCQl1c2VyTmFtZTogewoKCQkJCQkJCQlyZXF1aXJlZDogIuiri+i8uOWFpeWnk+WQjSIsCgoJCQkJCQkJfSwKCgkJCQkJCQlyb21hbk5hbWU6IHsKCgkJCQkJCQkJZm9ybWF0OiAi5Y6f5L2P5rCR5aeT5ZCN5LiN56ym5ZCI5qKd5Lu277yM6KuL6YeN5paw6Ly45YWlIiwKCgkJCQkJCQl9LAoKCQkJCQkJCWJpcnRoZGF5OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6YG45pOH5Ye655Sf5bm05pyI5pelIgoKCQkJCQkJCX0sCgoJCQkJCQkJbW9iaWxlUGhvbmU6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vovLjlhaXmiYvmqZ/omZ/norwiLAoKCQkJCQkJCQltb2JpbGVQaG9uZTogIuaJi+apn+iZn+eivOS4jeespuWQiOaineS7tu+8jOiri+mHjeaWsOi8uOWFpSIsCgoJCQkJCQkJfSwKCgkJCQkJCQl0ZWwxOiB7CgoJCQkJCQkJCWZvcm1hdDogIuS9j+Wutumbu+ipseS4jeespuWQiOaineS7tu+8jOiri+mHjeaWsOi8uOWFpSIKCgkJCQkJCQl9LAoKCQkJCQkJCWVtYWlsOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6Ly45YWl6Zu75a2Q6YO15Lu2IiwKCgkJCQkJCQkJZW1haWw6ICLpm7vlrZDpg7Xku7bkuI3nrKblkIjmop3ku7bvvIzoq4vph43mlrDovLjlhaUiCgoJCQkJCQkJfSwKCgkJCQkJCQlhcm15OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6YG45pOH5YW15b256Kq/5p+lIiwKCgkJCQkJCQl9LAoKCQkJCQkJCWN0YmNBY2NvdW50QnJhbmNoOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6Ly45YWl5Lit5L+h6YqA5Y+w5bmj6YqA6KGM5biz5oi2LeWIhuihjCIsCgoJCQkJCQkJfSwKCgkJCQkJCQljdGJjQWNjb3VudEFjY291bnROdW1iZXI6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vovLjlhaXkuK3kv6HpioDlj7DluaPpioDooYzluLPmiLYt5biz6JmfIiwKCgkJCQkJCQkJZGlnaXRzOiAi5Lit5L+h6YqA5Y+w5bmj6YqA6KGM5biz5oi2LeW4s+iZn+S4jeespuWQiOaineS7tu+8jOiri+mHjeaWsOi8uOWFpSIsCgoJCQkJCQkJCWZvcm1hdDogIuS4reS/oemKgOWPsOW5o+mKgOihjOW4s+aIti3luLPomZ/kuI3nrKblkIjmop3ku7bvvIzoq4vph43mlrDovLjlhaUiCgoJCQkJCQkJfQoKCQkJCQkJfQoKCQkJCQl9KSk7CgoJCQkJCSQoIiNmb3JtMDQiKS52YWxpZGF0ZSgkLmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdFNldHRpbmdzLCB7CgoJCQkJCQlydWxlczogewoKCQkJCQkJCWNyZWRpdFJwdERlZ3JlZTogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZSwKCgkJCQkJCQkJY3JlZGl0UnB0RGVncmVlOiB0cnVlCgoJCQkJCQkJfSwKCgkJCQkJCQljcmVkaXRScHREYXRlOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB0cnVlCgoJCQkJCQkJfSwKCgkJCQkJCQlsaWZlUmVnaXN0ZXJJZDogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZSwKCgkJCQkJCQkJZm9ybWF0OiBlZ28udmFsaWRhdG9yLnBhdHRlcm4ubGlmZVJlZ2lzdGVySWQKCgkJCQkJCQl9LAoKCQkJCQkJCWxpZmVSZWdTdGF0dXM6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHRydWUKCgkJCQkJCQl9LAoKCQkJCQkJCWdlblJlZ1N0YXR1czogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZQoKCQkJCQkJCX0sCgoJCQkJCQkJcGFyZW50TmFtZTogewoKCQkJCQkJCQlyZXF1aXJlZDogewoKCQkJCQkJCQkJZGVwZW5kczogZnVuY3Rpb24oZWxlbWVudCkgewoKCQkJCQkJCQkJCXJldHVybiAiWSIgPT0gJCgiaW5wdXRbbmFtZT1wYXJlbnRBZ2VudF06Y2hlY2tlZCIpLnZhbCgpOwoKCQkJCQkJCQkJfQoKCQkJCQkJCQl9CgoJCQkJCQkJfSwKCgkJCQkJCQlwYXJlbnRSZWxhOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiB7CgoJCQkJCQkJCQlkZXBlbmRzOiBmdW5jdGlvbihlbGVtZW50KSB7CgoJCQkJCQkJCQkJcmV0dXJuICJZIiA9PSAkKCJpbnB1dFtuYW1lPXBhcmVudEFnZW50XTpjaGVja2VkIikudmFsKCk7CgoJCQkJCQkJCQl9CgoJCQkJCQkJCX0KCgkJCQkJCQl9LAoKCQkJCQkJCXB1bmlzaEhpc3Rvcnk6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHRydWUKCgkJCQkJCQl9LAoKCQkJCQkJCXB1bmlzaEhpc0RldGFpbDogewoKCQkJCQkJCQlyZXF1aXJlZDogewoKCQkJCQkJCQkJZGVwZW5kczogZnVuY3Rpb24oZWxlbWVudCkgewoKCQkJCQkJCQkJCXJldHVybiAiWSIgPT0gJCgiaW5wdXRbbmFtZT1wdW5pc2hIaXN0b3J5XTpjaGVja2VkIikudmFsKCk7CgoJCQkJCQkJCQl9CgoJCQkJCQkJCX0KCgkJCQkJCQl9LAoKCQkJCQkJCWxpYVB1bmlzaEhpc3Rvcnk6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHRydWUKCgkJCQkJCQl9LAoKCQkJCQkJCWxpYVB1bmlzaEhpc0RldGFpbDogewoKCQkJCQkJCQlyZXF1aXJlZDogewoKCQkJCQkJCQkJZGVwZW5kczogZnVuY3Rpb24oZWxlbWVudCkgewoKCQkJCQkJCQkJCXJldHVybiAiWSIgPT0gJCgiaW5wdXRbbmFtZT1saWFQdW5pc2hIaXN0b3J5XTpjaGVja2VkIikudmFsKCk7CgoJCQkJCQkJCQl9CgoJCQkJCQkJCX0KCgkJCQkJCQl9LAoKCQkJCQkJCWNyaW1lSGlzdG9yeTogewoKCQkJCQkJCQlyZXF1aXJlZDogdHJ1ZQoKCQkJCQkJCX0sCgoJCQkJCQkJY3JpbWVEZXRhaWw6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6IHsKCgkJCQkJCQkJCWRlcGVuZHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKCgkJCQkJCQkJCQlyZXR1cm4gIlkiID09ICQoImlucHV0W25hbWU9Y3JpbWVIaXN0b3J5XTpjaGVja2VkIikudmFsKCk7CgoJCQkJCQkJCQl9CgoJCQkJCQkJCX0KCgkJCQkJCQl9CgoJCQkJCQl9LCBtZXNzYWdlczogewoKCQkJCQkJCWNyZWRpdFJwdERlZ3JlZTogewoKCQkJCQkJCQlyZXF1aXJlZDogIuiri+i8uOWFpeS/oeeUqOWgseWRiuWIhuaVuOaIlueEoeazleipleWIhiIsCgoJCQkJCQkJCWNyZWRpdFJwdERlZ3JlZTogIuiri+i8quWFpeWIhuaVuOaIlueEoeazleipleWIhiIKCgkJCQkJCQl9LAoKCQkJCQkJCWNyZWRpdFJwdERhdGU6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vpgbjmk4fkv6HnlKjloLHlkYrml6XmnJ8iCgoJCQkJCQkJfSwKCgkJCQkJCQlsaWZlUmVnaXN0ZXJJZDogewoKCQkJCQkJCQlyZXF1aXJlZDogIuiri+i8uOWFpeS6uui6q+S/nemaquWQiOagvOitieiZnyIKCgkJCQkJCQl9LAoKCQkJCQkJCWxpZmVSZWdTdGF0dXM6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vli77pgbjkurrouqvkv53pmqrnmbvpjITni4Dms4EiCgoJCQkJCQkJfSwKCgkJCQkJCQlnZW5SZWdTdGF0dXM6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vli77pgbjosqHnlKLkv53pmqrnmbvpjITni4Dms4EiCgoJCQkJCQkJfSwKCgkJCQkJCQlwYXJlbnROYW1lOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6Ly45YWl6Kaq5bGs5aeT5ZCNIgoKCQkJCQkJCX0sCgoJCQkJCQkJcGFyZW50UmVsYTogewoKCQkJCQkJCQlyZXF1aXJlZDogIuiri+mBuOaTh+imquWxrOmXnOS/giIKCgkJCQkJCQl9LAoKCQkJCQkJCXB1bmlzaEhpc3Rvcnk6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vli77pgbjmmK/lkKbmm77pgZXlj43mpa3li5nkurrlk6HnrqHnkIbopo/liYfogIzlj5fmh7LomZXntIDpjIQiCgoJCQkJCQkJfSwKCgkJCQkJCQlwdW5pc2hIaXNEZXRhaWw6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vovLjlhaXlj5fmh7LomZXntIDpjIToqbPntLDoqqrmmI4iCgoJCQkJCQkJfSwKCgkJCQkJCQlsaWFQdW5pc2hIaXN0b3J5OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL5Yu+6YG45piv5ZCm5pu+5Y+X5YWs5pyD5oey6JmV57SA6YyEIgoKCQkJCQkJCX0sCgoJCQkJCQkJbGlhUHVuaXNoSGlzRGV0YWlsOiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL6Ly45YWl5YWs5pyD5oey6JmV57SA6YyE6Kmz57Sw6Kqq5piOIgoKCQkJCQkJCX0sCgoJCQkJCQkJY3JpbWVIaXN0b3J5OiB7CgoJCQkJCQkJCXJlcXVpcmVkOiAi6KuL5Yu+6YG45piv5ZCm5pyJ5YiR5LqL54qv572q57SA6YyEIgoKCQkJCQkJCX0sCgoJCQkJCQkJY3JpbWVEZXRhaWw6IHsKCgkJCQkJCQkJcmVxdWlyZWQ6ICLoq4vovLjlhaXliJHkuovniq/nvarntIDpjIToqbPntLDoqqrmmI4iCgoJCQkJCQkJfQoKCQkJCQkJfQoKCQkJCQl9KSk7CgoJCQkJfSwKCgkJCQlzaG93VGFiQWxlcnQoKSB7CgoJCQkJCWZvciAodmFyIGZvcm0gaW4gdGhpcy5hbGVydCkgewoKCQkJCQkJdGhpcy5hbGVydFtgJHtmb3JtfWBdID0gISQoYCMke2Zvcm19YCkudmFsaWQoKTsKCgkJCQkJfQoKCQkJCX0sCgovLyAJCQkJZ2VuZXJhdGVLZXkoa2V5LCBpbmRleCkgewoKLy8gCQkJCQlpZiAoaW5kZXggfHwgJC5pc051bWVyaWMoaW5kZXgpKSB7CgovLyAJCQkJCQlyZXR1cm4gYCR7a2V5fSR7aW5kZXggKyAxfWA7CgovLyAJCQkJCX0KCi8vIAkJCQkJcmV0dXJuIGtleTsKCi8vIAkJCQl9LAoKCQkJCWhhbmRsZUNyZWRpdFJwdERlZ3JlZShldmVudCkgewoKCQkJCQlpZiAoL14wLy50ZXN0KGV2ZW50LnRhcmdldC52YWx1ZSkpIHsKCgkJCQkJCXRoaXMudXNlckRhdGEudXNlckJhY2tncm91bmQuY3JlZGl0UnB0RGVncmVlID0gZXZlbnQudGFyZ2V0LnZhbHVlLnN1YnN0cmluZygxKTsKCgkJCQkJfQoKCQkJCX0sCgoJCQkJaGFuZGxlRGF0ZSh0YXJnZXQsIGRhdGUpIHsKCgkJCQkJbGV0IGZvcm0gPSAkKHRhcmdldCkuY2xvc2VzdCgiZm9ybSIpLmF0dHIoImlkIik7CgoJCQkJCWxldCBlbGVtZW50ID0gJCh0YXJnZXQpLmF0dHIoImlkIik7CgoJCQkJCXN3aXRjaCAoZWxlbWVudCkgewoKCQkJCQkJY2FzZSAiYmlydGhkYXkiOgoKCQkJCQkJCXRoaXMudXNlckRhdGEudXNlci5iaXJ0aGRheSA9IGRhdGU7CgoJCQkJCQkJYnJlYWs7CgoJCQkJCQljYXNlICJjcmVkaXRScHREYXRlIjoKCgkJCQkJCQl0aGlzLnVzZXJEYXRhLnVzZXJCYWNrZ3JvdW5kLmNyZWRpdFJwdERhdGUgPSBkYXRlOwoKCQkJCQkJCWJyZWFrOwoKCQkJCQkJZGVmYXVsdDoKCgkJCQkJCQlsZXQgaW5kZXggPSBlbGVtZW50LnN1YnN0cigtMSk7CgoJCQkJCQkJbGV0IHdvcmsgPSB0aGlzLnVzZXJEYXRhW2VsZW1lbnQuc3BsaXQoJ18nKVswXV1baW5kZXhdOwoKCQkJCQkJCWlmICghd29yayl7CgoJCQkJCQkJCXdvcmsgPSB7fTsKCgkJCQkJCQkJdGhpcy51c2VyRGF0YVtlbGVtZW50LnNwbGl0KCdfJylbMF1dW2luZGV4XSA9IHdvcms7CgoJCQkJCQkJfQoKCQkJCQkJCXdvcmtbZWxlbWVudC5zcGxpdCgnXycpWzFdXSA9IGRhdGU7CgoJCQkJCQkJaWYgKCQodGFyZ2V0KS5wcmV2QWxsKCdpbnB1dC5oYXNNb250aHBpY2tlcicpKSB7CgoJCQkJCQkJCSQodGFyZ2V0KS5wcmV2QWxsKCdpbnB1dC5oYXNNb250aHBpY2tlcicpLm1vbnRocGlja2VyKCJvcHRpb24iLCAibWF4RGF0ZSIsIGRhdGUpOwoKCQkJCQkJCX0KCgkJCQkJCQlpZiAoJCh0YXJnZXQpLm5leHRBbGwoJ2lucHV0Lmhhc01vbnRocGlja2VyJykpIHsKCgkJCQkJCQkJJCh0YXJnZXQpLm5leHRBbGwoJ2lucHV0Lmhhc01vbnRocGlja2VyJykubW9udGhwaWNrZXIoIm9wdGlvbiIsICJtaW5EYXRlIiwgZGF0ZSk7CgoJCQkJCQkJfQoKCQkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJfSwKCgkJCQloYW5kbGVEZXBlbmRlbmN5KGV2ZW50KSB7CgoJCQkJCXZhciBmb3JtID0gJChldmVudC50YXJnZXQpLmNsb3Nlc3QoImZvcm0iKS5hdHRyKCJpZCIpOwoKCQkJCQl2YXIgZWxlbWVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpCgoJCQkJCWVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHsKCgkJCQkJCSQoYCMke2Zvcm19YCkudmFsaWRhdGUoKS5lbGVtZW50KGAjJHtpdGVtfWApOwoKCQkJCQl9KTsKCgkJCQl9LAoKCQkJCWhhbmRsZUNoYW5nZShlKSB7CgoJCQkJCWxldCBmb3JtSWQgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCJmb3JtIikuYXR0cigiaWQiKTsKCgkJCQkJbGV0IGVsID0gZS50YXJnZXQ7CgoJCQkJCXRoaXMuJG5leHRUaWNrKCgpID0+IHsKCgkJCQkJCWlmIChlbCkgewoKCQkJCQkgICAgCSQoYCMke2Zvcm1JZH1gKS52YWxpZGF0ZSgpLmVsZW1lbnQoZWwpOwoKCQkJCQkgICAgfQoKCQkJCQl9KTsKCgkJCQl9LAoKCQkJCWhhbmRsZUFkZHJlc3MoZSl7CgoJCQkJCWxldCBmb3JtID0gJChlLnRhcmdldCkuY2xvc2VzdCgiZm9ybSIpLmF0dHIoImlkIik7CgoJCQkJCWxldCBlbGVtZW50ID0gJChlLnRhcmdldCkuYXR0cigiaWQiKTsKCgkJCQkJaWYgKC9cZC9nLnRlc3QoZS50YXJnZXQudmFsdWUpKXsKCgkJCQkJCWxldCB0ZW1wU3RyID0gJyc7CgoJCQkJCQlmb3IobGV0IGk9MDtpPGUudGFyZ2V0LnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoO2krKyl7CgoJCQkJCQkJbGV0IG51bUNvZGUgPSBlLnRhcmdldC52YWx1ZS50b1N0cmluZygpLmNoYXJDb2RlQXQoaSk7CgoJCQkJCQkJaWYgKG51bUNvZGUgPD0gMHgwMDdFICYmIG51bUNvZGUgPj0gMHgwMDIxKXsKCgkJCQkJCQkJbnVtQ29kZSArPSAweEZFRTA7CgoJCQkJCQkJfQoKCQkJCQkJCXRlbXBTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShudW1Db2RlKTsKCgkJCQkJCX0KCgkJCQkJCWUudGFyZ2V0LnZhbHVlID0gdGVtcFN0cjsKCgkJCQkJfQoKCQkJCQl0aGlzLnVzZXJEYXRhLnVzZXJEZXRhaWxbZWxlbWVudF0gPSBlLnRhcmdldC52YWx1ZTsKCgkJCQkJdGhpcy4kbmV4dFRpY2soKCk9PiQoYCMke2Zvcm19YCkudmFsaWRhdGUoKS5lbGVtZW50KGAjJHtlbGVtZW50fWApKTsKCgkJCQl9LAoKCQkJCWhhbmRsZVdvcmsoZXZlbnQpewoKCQkJCQlsZXQgZWxlbWVudCA9IGV2ZW50LnRhcmdldC5pZDsKCgkJCQkJbGV0IGluZGV4ID0gZWxlbWVudC5zdWJzdHIoLTEpOwoKCQkJCQlsZXQgd29yayA9IHRoaXMudXNlckRhdGFbZWxlbWVudC5zcGxpdCgnXycpWzBdXVtpbmRleF07CgoJCQkJCWlmICghd29yayl7CgoJCQkJCQl3b3JrID0ge307CgoJCQkJCQl0aGlzLnVzZXJEYXRhW2VsZW1lbnQuc3BsaXQoJ18nKVswXV1baW5kZXhdID0gd29yazsKCgkJCQkJfQoKCQkJCQl3b3JrW2VsZW1lbnQuc3BsaXQoJ18nKVsxXV0gPSBldmVudC50YXJnZXQudmFsdWU7CgoJCQkJfSwKCgkJCQlmb2N1c291dE5hbWUoZXZlbnQpIHsKCgkJCQkJbGV0IGZvcm1JZCA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCJmb3JtIikuYXR0cigiaWQiKTsKCgkJCQkJbGV0IGVsID0gZXZlbnQudGFyZ2V0OwoKCQkJCQlzd2l0Y2ggKGV2ZW50LnRhcmdldC5pZCkgewoKCQkJCQkJY2FzZSAndXNlck5hbWUnOgoKCQkJCQkgICAgCXRoaXMudXNlckRhdGEudXNlci51c2VyTmFtZSA9IGV2ZW50LnRhcmdldC52YWx1ZTsKCgkJCQkJICAgIAlicmVhazsKCgkJCQkJICAgIGNhc2UgJ3JvbWFuTmFtZSc6CgoJCQkJCSAgICAJdGhpcy51c2VyRGF0YS51c2VyLnJvbWFuTmFtZSA9IGV2ZW50LnRhcmdldC52YWx1ZTsKCgkJCQkJICAgIAlicmVhazsKCgkJCQkJICAgIGNhc2UgJ2NyaU5hbWUnOgoKCQkJCQkgICAgCXRoaXMudXNlckRhdGEudXNlckRldGFpbC5jcmlOYW1lID0gZXZlbnQudGFyZ2V0LnZhbHVlOwoKCQkJCQkgICAgCWJyZWFrOwoKCQkJCQl9CgoJCQkJCXRoaXMuJG5leHRUaWNrKCgpID0+IHsKCgkJCQkJCWlmIChlbCkgewoKCQkJCQkgICAgCSQoYCMke2Zvcm1JZH1gKS52YWxpZGF0ZSgpLmVsZW1lbnQoZWwpOwoKCQkJCQkgICAgfQoKCQkJCQl9KTsKCgkJCQl9LAoKCQkJCXNhdmUoZXZlbnQpIHsKCgkJCQkJLy8g5pqr5a2YCgoJCQkJCXRoaXMuc2hvd1RhYkFsZXJ0KCk7CgoJCQkJCWlmICghZWdvLmFqYXgudXBkYXRlVXNlckRhdGFUZW1wKHRoaXMudXNlckRhdGEpKSB7CgoJCQkJCQllZ28uZGlhbG9nLmVycm9yKCLmmqvlrZjlpLHmlZfvvIzoq4vnqI3lgJnlho3oqaYiLCB3aW5kb3cubG9jYXRpb24uaHJlZik7CgoJCQkJCX0gZWxzZSB7CgoJCQkJCQllZ28uZGlhbG9nLmFsZXJ0KCLmmqvlrZjmiJDlip8iLCB3aW5kb3cubG9jYXRpb24uaHJlZik7CgoJCQkJCX0KCgkJCQl9LAoKCQkJCWhhbmRsZUZpbGUodGFyZ2V0LCBzdGF0dXMpIHsKCgkJCQkJJCh0YXJnZXQpLmNsb3Nlc3QoImZvcm0iKS52YWxpZGF0ZSgpLmVsZW1lbnQoYCMkeyQodGFyZ2V0KS5hdHRyKCJpZCIpfWApOwoKCQkJCX0sCgoJCQkJYXBwbHkoZXZlbnQpIHsKCgkJCQkJdGhpcy5zaG93VGFiQWxlcnQoKTsKCgkJCQkJZm9yICh2YXIgZm9ybSBpbiB0aGlzLmFsZXJ0KSB7CgoJCQkJCQlpZiAoISQoYCMke2Zvcm19YCkudmFsaWQoKSkgewoKCQkJCQkJCWVnby5kaWFsb2cuZXJyb3IoIuiri+eiuuiqjeWgseiBmOizh+aWmeWhq+Wvq+WujOaVtO+8jOWGjeihjOmBnuS6pOeUs+iri+OAgiIpOwoKCQkJCQkJCXJldHVybjsKCgkJCQkJCX0KCgkJCQkJfQoKCQkJCQlpZiAoIWVnby5hamF4LnVwZGF0ZVVzZXJEYXRhVGVtcCh0aGlzLnVzZXJEYXRhKSkgeyAvLyDmmqvlrZgKCgkJCQkJCWVnby5kaWFsb2cuZXJyb3IoIumBnuS6pOeUs+iri+WkseaVl++8jOiri+eojeWAmeWGjeippiIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKCgkJCQkJfSBlbHNlIGlmICghZWdvLmFqYXguYXBwbHlVc2VyRGF0YSh0aGlzLnVzZXJEYXRhLnVzZXIuc3lzQ29kZSkpIHsgLy8g6YGe5Lqk55Sz6KuLCgoJCQkJCQllZ28uZGlhbG9nLmVycm9yKCLpgZ7kuqTnlLPoq4vlpLHmlZfvvIzoq4vnqI3lgJnlho3oqaYiLCB3aW5kb3cubG9jYXRpb24uaHJlZik7CgoJCQkJCX0gZWxzZSB7CgoJCQkJCQlpZiAodGhpcy51c2VyRGF0YS51c2VyLmNvbW1Vbml0LmFnZW50Q2hhbm5lbCA9PSAiQTEiKSB7CgoJCQkJCQkJZWdvLmRpYWxvZy5hbGVydChg5oGt5Zac5oKo5bey5a6M5oiQ5aCx6IGY5paH5Lu26YGe5Lqk77yM5a+p5qC457WQ5p6c5bCH5pyD5Y+m6KGM6YCa55+l44CCIDxici8+PGJyLz7ku6XkuIvmraPmnKzmlofku7boq4vmgqjkuqTntablkITlnLDljYDooYzmlL/liqnnkIbjgII8YnIvPjEuIOWQiOe0hOabuDxici8+Mi4g6IGv5b615YCL5Lq65L+h55So5aCx5ZGKPGJyLz4zLiDkuozlkIvlvanoibLnhafniYcx5by1PGJyLz40LiDkv6HnlKjljaHlhbHpirfmib/oq77ogbLmmI7mm7jlj4roqabljbc8YnIvPjUuIOiHquiyu+WPg+WKoOWcmOmrlOS/nemaqueUs+iri+abuDxici8+Ni4g5aCx6IGYU1LpoIjlj6bnubPkuqTooYzpirfku6Pooajlgpnlv5jpjITjgIFTUuWVhuWTgeWPiuazleimj+iqsueoi+iok+e3tOe0gOmMhCR7IjMiID09IHRoaXMudXNlckRhdGEudXNlckJhY2tncm91bmQuZ2VuUmVnU3RhdHVzID8gIjxici8+Ny4g5Lq66Lqr5L+d6Zqq5qWt5YuZ5ZOh55m76YyE55Sz6KuL5pu45q2j5pysIiA6ICIifWAsIHVybC51c2VyLnBvcnRhbCk7CQkJCQkJCQoKCQkJCQkJfSBlbHNlIHsKCgkJCQkJCQlpZiAodGhpcy51c2VyRGF0YS51c2VyLmpvYlR5cGUgPT0gIkEyUyIgKSB7CgoJCQkJCQkJCWVnby5kaWFsb2cuYWxlcnQoYOaBreWWnOaCqOW3suWujOaIkOWgseiBmOaWh+S7tumBnuS6pO+8jOWvqeaguOe1kOaenOWwh+acg+WPpuihjOmAmuefpeOAgiA8YnIvPjxici8+5Lul5LiL5q2j5pys5paH5Lu26KuL5oKo5Lqk57Wm5ZCE5Zyw5Y2A6KGM5pS/5Yqp55CG44CCPGJyLz4xLiDlkIjntITmm7g8YnIvPjIuIOiBr+W+teWAi+S6uuS/oeeUqOWgseWRijxici8+My4g5LqM5ZCL5b2p6Imy54Wn54mHMeW8tTxici8+NC4g5L+h55So5Y2h5YWx6Yq35om/6Ku+6IGy5piO5pu45Y+K6Kmm5Y23JHsiMyIgPT0gdGhpcy51c2VyRGF0YS51c2VyQmFja2dyb3VuZC5nZW5SZWdTdGF0dXMgPyAiPGJyLz41LiDkurrouqvkv53pmqrmpa3li5nlk6HnmbvpjITnlLPoq4vmm7jmraPmnKwiIDogIiJ9YCwgdXJsLnVzZXIucG9ydGFsKTsKCgkJCQkJCQl9CgoJCQkJCQkJZWxzZSB7CgoJCQkJCQkJCWVnby5kaWFsb2cuYWxlcnQoYOaBreWWnOaCqOW3suWujOaIkOWgseiBmOaWh+S7tumBnuS6pO+8jOWvqeaguOe1kOaenOWwh+acg+WPpuihjOmAmuefpeOAgiA8YnIvPjxici8+5Lul5LiL5q2j5pys5paH5Lu26KuL5oKo5Lqk57Wm5ZCE5Zyw5Y2A6KGM5pS/5Yqp55CG44CCPGJyLz4xLiDlkIjntITmm7g8YnIvPjIuIOiBr+W+teWAi+S6uuS/oeeUqOWgseWRijxici8+My4g5LqM5ZCL5b2p6Imy54Wn54mHMeW8tTxici8+NC4g5L+h55So5Y2h5YWx6Yq35om/6Ku+6IGy5piO5pu45Y+K6Kmm5Y23PGJyLz41LiDlhazosrvlnJjpq5TnnLflsazliqDlhaXooago6IGY5YOx5ZCI57SEKSR7IjMiID09IHRoaXMudXNlckRhdGEudXNlckJhY2tncm91bmQuZ2VuUmVnU3RhdHVzID8gIjxici8+Ni4g5Lq66Lqr5L+d6Zqq5qWt5YuZ5ZOh55m76YyE55Sz6KuL5pu45q2j5pysIiA6ICIifWAsIHVybC51c2VyLnBvcnRhbCk7CQoKCQkJCQkJCX0KCgkJCQkJCX0KCgkJCQkJfQoKCQkJCX0KCgkJCX0KCgkJfSk7CgoJPC9zY3JpcHQ+Cg==