tin-spa 2.9.6 → 2.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -105,4 +105,4 @@ export class FinAccount {
105
105
  this.currency = "";
106
106
  }
107
107
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jbGFzc2VzL0NsYXNzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFOLElBQVksVUFNWDtBQU5ELFdBQVksVUFBVTtJQUNwQiwyQ0FBUSxDQUFBO0lBQ1IsMkNBQVEsQ0FBQTtJQUNSLDJDQUFRLENBQUE7SUFDUiwrQ0FBVSxDQUFBO0lBQ1YsMkNBQVEsQ0FBQTtBQUNWLENBQUMsRUFOVyxVQUFVLEtBQVYsVUFBVSxRQU1yQjtBQUVELE1BQU0sQ0FBTixJQUFZLGFBQXdCO0FBQXBDLFdBQVksYUFBYTtJQUFFLCtDQUFHLENBQUE7SUFBRSwrQ0FBRyxDQUFBO0FBQUEsQ0FBQyxFQUF4QixhQUFhLEtBQWIsYUFBYSxRQUFXO0FBRXBDLE1BQU0sT0FBTyxhQUFhO0NBR3pCO0FBRUQsTUFBTSxPQUFPLG1CQUFtQjtDQWMvQjtBQUlELE1BQU0sT0FBTyxNQUFNO0NBT2xCO0FBT0QsTUFBTSxPQUFPLFlBQVk7Q0FLeEI7QUFJRCxNQUFNLE9BQU8sY0FBYztDQUcxQjtBQTZERCxNQUFNLE9BQU8sWUFBWTtDQUl4QjtBQUVELE1BQU0sT0FBTyxhQUFhO0NBR3pCO0FBRUQsTUFBTSxPQUFPLFVBQVU7Q0FldEI7QUF5Q0QsTUFBTSxPQUFPLFVBQVU7Q0FLdEI7QUFFRCxNQUFNLE9BQU8sSUFBSTtDQUtoQjtBQUNELE1BQU0sT0FBTyxVQUFVO0NBS3RCO0FBaUNELE1BQU0sT0FBTyxXQUFXO0NBZ0N2QjtBQUVELE1BQU0sT0FBTyxVQUFVO0NBSXRCO0FBS0QsWUFBWTtBQUVaLE1BQU0sT0FBTyxXQUFXO0NBSXZCO0FBRUQsTUFBTSxPQUFPLFNBQVM7O0FBQ0csbUJBQVMsR0FBRyxHQUFHLENBQUM7QUFDaEIsbUJBQVMsR0FBRyxHQUFHLENBQUM7QUFDaEIsb0JBQVUsR0FBRyxHQUFHLENBQUM7QUFDakIsb0JBQVUsR0FBRyxHQUFHLENBQUM7QUFDakIsMkJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLDBCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUdoRCxNQUFNLE9BQU8sZ0JBQWdCO0NBSTVCO0FBRUQsTUFBTSxPQUFPLE9BQU87SUFFbEI7UUFDRSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRXRCLENBQUM7Q0FnQkY7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUNwQjtRQUNFLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLDhCQUE4QixDQUFDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsc0JBQXNCLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFFMUIsQ0FBQztDQXFCRjtBQUtELDJCQUEyQjtBQUMzQixNQUFNLE9BQU8sV0FBVztJQUV0QjtRQUNFLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBV0Y7QUFFRCxNQUFNLE9BQU8sVUFBVTtJQUVyQjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFFckIsQ0FBQztDQVFGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGVudW0gUm9sZUFjY2VzcyB7XHJcbiAgTm9uZSA9IDAsXHJcbiAgVmlldyA9IDEsXHJcbiAgRWRpdCA9IDIsXHJcbiAgQ3JlYXRlID0gMyxcclxuICBGdWxsID0gNFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBEZXRhaWxzU291cmNlIHtSb3csIFVybH1cclxuXHJcbmV4cG9ydCBjbGFzcyBkaWFsb2dPcHRpb25zIHtcclxuICB3aWR0aD86IHN0cmluZztcclxuICBoZWlnaHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxzRGlhbG9nQ29uZmlnIHtcclxuXHJcbiAgc3RlcENvbmZpZz8gOiBTdGVwQ29uZmlnO1xyXG4gIGZvcm1Db25maWc6IEZvcm1Db25maWc7XHJcbiAgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZztcclxuICB0YWJsZUNvbmZpZ3M/OiBUYWJsZUNvbmZpZ1tdO1xyXG4gIGJ1dHRvbnM/OiBCdXR0b25bXTtcclxuICBkZXRhaWxzPyA6IGFueVxyXG4gIGhlcm9GaWVsZD8gOiBhbnlcclxuICBoZXJvVmFsdWU/OiBhbnlcclxuICBtb2RlPzogJ2NyZWF0ZScgfCAnZWRpdCcgfCAndmlldydcclxuICB3aWR0aD86IHN0cmluZ1xyXG4gIGRldGFpbHNTb3VyY2U/OiBEZXRhaWxzU291cmNlXHJcbiAgb3B0aW9ucz86IGRpYWxvZ09wdGlvbnNcclxufVxyXG5cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQWN0aW9ue1xyXG4gIG1ldGhvZD86ICdnZXQnIHwgJ3Bvc3QnXHJcbiAgdXJsOiBzdHJpbmc7XHJcbiAgcGFyYW1zPyA6IGFueVtdXHJcbiAgc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmdcclxuICBpc0Zvcm1EYXRhPzogYm9vbGVhblxyXG4gIHNraXBDYWNoZT86IGJvb2xlYW5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoRmllbGQgZXh0ZW5kcyBGaWVsZCB7XHJcbiAgc2hvdz86IGJvb2xlYW5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlYXJjaENvbmZpZyB7XHJcbiAgZmllbGRzOiBTZWFyY2hGaWVsZFtdXHJcbiAgc2VhcmNoQWN0aW9uPzogQWN0aW9uXHJcbiAgZW1haWxSZXN1bHRzPzogYm9vbGVhblxyXG4gIHRpbGVDb25maWc/OiBUaWxlQ29uZmlnXHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFNlY3VyaXR5Q29uZmlnIHtcclxuICBhbGxvdz86IENhcEl0ZW1bXTtcclxuICBkZW55PzogQ2FwSXRlbVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENoaWxkRmllbGQge1xyXG4gIGNoaWxkRmllbGQ/OiBzdHJpbmdcclxuICBjaGlsZFZhbHVlRmllbGQ/OiBzdHJpbmdcclxufVxyXG5cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkIHtcclxuICBzZWN1cml0eUNvbmZpZz86IFNlY3VyaXR5Q29uZmlnO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiAndGV4dCcgfCAnbXVsdGktdGV4dCcgfCAncGFzc3dvcmQnIHwgJ2RhdGUnIHwgJ2RhdGV0aW1lJyB8ICdkYXRldGltZXNlYycgfCAnY2hlY2tib3gnIHwgJ3NlbGVjdCcgfCAnbXVsdGktc2VsZWN0JyB8ICdtb25leScgfCAnbnVtYmVyJyB8ICdzZWN0aW9uJyB8ICdibGFuaycgfCAnY2hpcCcgfCAnZmlsZScgfCAnZmlsZS12aWV3JyB8ICdpY29uJyB8ICdzcGlubmVyJyB8ICdidXR0b24nIHwgJ2xhYmVsJyB8ICdlbWFpbCcgfCAnY29tcG9zaXRlJyB8ICdzdHJpbmcnO1xyXG4gIGFsaWFzPzogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBhbnlbXTtcclxuICBvcHRpb25EaXNwbGF5Pzogc3RyaW5nXHJcbiAgb3B0aW9uVmFsdWU/OiBzdHJpbmdcclxuICBtYXN0ZXJPcHRpb25WYWx1ZT86IHN0cmluZ1xyXG4gIGRlZmF1bHRWYWx1ZT86IGFueVxyXG4gIGRlZmF1bHRGaXJzdFZhbHVlPzogYm9vbGVhblxyXG4gIHJlcXVpcmVkPzogYm9vbGVhblxyXG4gIG1pbj86IGFueVxyXG4gIG1heD86IGFueVxyXG4gIHJvd3M/OiBudW1iZXJcclxuICBzcGFuPzogYm9vbGVhblxyXG4gIHdpZHRoPzogc3RyaW5nXHJcbiAgc2l6ZT86IHN0cmluZ1xyXG4gIHJlYWRvbmx5PzogYm9vbGVhblxyXG4gIGhpZGRlbj86IGJvb2xlYW5cclxuICBzdHJpY3Q/OiBib29sZWFuXHJcbiAgcGF0aD86IHN0cmluZ1xyXG4gIGtleUZpZWxkPzogc3RyaW5nXHJcbiAgaGludD86IHN0cmluZ1xyXG4gIG1hc3RlckZpZWxkPzogc3RyaW5nXHJcbiAgLy8gY2hpbGQ/OiBDaGlsZEZpZWxkXHJcbiAgY2hpbGRyZW4/OiBDaGlsZEZpZWxkW11cclxuICBtYXN0ZXJPcHRpb25zPzogYW55W11cclxuICBudWxsYWJsZT86IGJvb2xlYW5cclxuICBjb3B5Q29udGVudD86IGJvb2xlYW5cclxuICBjbGVhckNvbnRlbnQ/OiBib29sZWFuXHJcbiAgZm9ybWF0PzogJ3RleHQnIHwgJ21vbmV5JyB8ICdkYXRlJyB8ICdkYXRldGltZScgfCAnbnVtYmVyJ1xyXG4gIGhpZGVPbkNyZWF0ZT86IGJvb2xlYW5cclxuICBoaWRlT25FeGlzdHM/OiBib29sZWFuXHJcbiAgaGlkZGVuQ29uZGl0aW9uPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbiAgcmVhZG9ubHlDb25kaXRpb24/OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbjtcclxuICBkZXRhaWxzQ29uZmlnPzogRGV0YWlsc0RpYWxvZ0NvbmZpZztcclxuICBsb2FkQWN0aW9uPzogQWN0aW9uXHJcbiAgbG9hZElERmllbGQ/OiBzdHJpbmc7XHJcbiAgaW5mb01lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgc3VmZml4Pzogc3RyaW5nO1xyXG4gIHN1YmZpZWxkcz86IEZpZWxkW107XHJcbiAgb3B0aW9uc1N1YmplY3Q/OiBCZWhhdmlvclN1YmplY3Q8YW55W10+O1xyXG4gIHNlY3Rpb24/OiBzdHJpbmc7XHJcbiAgZmlsZU9wdGlvbnM/OiB7XHJcbiAgICBhbGxvd2VkRXh0ZW5zaW9ucz86IHN0cmluZ1tdO1xyXG4gICAgbWF4U2l6ZU1CPzogbnVtYmVyO1xyXG4gICAgY29tcHJlc3NJbWFnZXM/OiBib29sZWFuO1xyXG4gIH07XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQWxlcnRNZXNzYWdlIHtcclxuICB0eXBlPzogJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2NyaXRpY2FsJ1xyXG4gIGNvbnRlbnQ6IHN0cmluZ1xyXG4gIGhpZGRlbkNvbmRpdGlvbj86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWxlcnRNZXNzYWdlcyB7XHJcbiAgc3ViamVjdD86IHN0cmluZ1xyXG4gIG1lc3NhZ2VzOiBBbGVydE1lc3NhZ2VbXVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRm9ybUNvbmZpZyB7XHJcbiAgdGl0bGU/OiBzdHJpbmdcclxuICBmaXhlZFRpdGxlPzogYm9vbGVhblxyXG4gIGFsZXJ0TWVzc2FnZXM/OiBBbGVydE1lc3NhZ2VzXHJcbiAgZmllbGRzOiBGaWVsZFtdXHJcbiAgbW9kZT86ICdjcmVhdGUnIHwgJ2VkaXQnIHwgJ3ZpZXcnXHJcbiAgYnV0dG9uPyA6IEJ1dHRvblxyXG4gIG11bHRpQ29sdW1uPzogYm9vbGVhblxyXG4gIHJlc2V0PzogYm9vbGVhblxyXG4gIGxvYWRBY3Rpb24/OiBBY3Rpb25cclxuICBoZXJvRmllbGQ/OiBhbnlcclxuICBoZXJvVmFsdWU/OiBhbnlcclxuICBzZWN1cml0eT86IFNlY3VyaXR5Q29uZmlnO1xyXG4gIGluY2x1ZGVBdWRpdD86IGJvb2xlYW5cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlybSB7XHJcbiAgbWVzc2FnZTogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQnV0dG9ue1xyXG4gIG5hbWU6IHN0cmluZ1xyXG4gIHZpc2libGU/OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbjtcclxuICBkaXNwbGF5Pzogc3RyaW5nO1xyXG4gIGljb24/OiBJY29uO1xyXG4gIGRpc2FibGVkPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbiAgY29sb3I/OiBzdHJpbmc7XHJcbiAgdGlwPzogc3RyaW5nXHJcbiAgZGlhbG9nPzogYm9vbGVhblxyXG4gIGFjdGlvbj86IEFjdGlvblxyXG4gIGNvbmZpcm0/OiBDb25maXJtXHJcbiAgaW5EaWFsb2c/OiBib29sZWFuXHJcbiAgaW5IZWFkZXI/OiBib29sZWFuXHJcbiAgZGV0YWlsc0NvbmZpZz86IERldGFpbHNEaWFsb2dDb25maWdcclxuICBzZXRIZXJvRmllbGQ/OiBib29sZWFuO1xyXG4gIGlnbm9yZUFwcHJvdmFsPzogYm9vbGVhbjtcclxufVxyXG5cclxuXHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUaWxlIHtcclxuXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFsaWFzPzogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG4gIGNvbG9yPzogc3RyaW5nO1xyXG4gIHNlbGVjdGVkVGlsZT86IHN0cmluZztcclxuICBoaWRkZW4/OiBib29sZWFuO1xyXG4gIGluZm8/OiBzdHJpbmc7XHJcbiAgcHJlZml4Pzogc3RyaW5nO1xyXG4gIHN1ZmZpeD86IHN0cmluZztcclxuICBhY3Rpb24/OiBBY3Rpb247XHJcbiAgaGlkZGVuQ29uZGl0aW9uPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGNsYXNzIFRpbGVDb25maWcge1xyXG4gIHRpbGVzOiBUaWxlW11cclxuICBsb2FkQWN0aW9uPzogQWN0aW9uXHJcbiAgbG9hZEluaXQ/OiBib29sZWFuXHJcbiAgY2xpY2thYmxlPzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3RlcCB7XHJcbiAgbmFtZTogc3RyaW5nXHJcbiAgdmFsdWU/OiBhbnlcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIGhpZGRlbkNvbmRpdGlvbj86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBTdGVwQ29uZmlnIHtcclxuICBzdGVwczogU3RlcFtdXHJcbiAgdmFsdWVGaWVsZD86IHN0cmluZ1xyXG4gIGxvYWRBY3Rpb24/OiBBY3Rpb247XHJcbiAgbG9hZElERmllbGQ/OiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJY29uIHtcclxuICBuYW1lOiBzdHJpbmdcclxuICBjb2xvcj86IHN0cmluZ1xyXG4gIHRpcD86IHN0cmluZ1xyXG4gIHRpcEZpZWxkPzogc3RyaW5nXHJcbiAgYmFubmVyRmllbGQ/OiBzdHJpbmdcclxuICBjb25kaXRpb24/OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb2xvciB7XHJcbiAgbmFtZTogc3RyaW5nXHJcbiAgY29uZGl0aW9uPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZT86ICd0ZXh0JyB8ICdkYXRlJyB8ICdkYXRldGltZScgfCAnZGF0ZXRpbWVzZWMnIHwgJ2NoZWNrYm94JyB8ICdzZWxlY3QnIHwgJ21vbmV5JyB8ICdudW1iZXInIHwgJ2NoaXAnIHwgJ2ljb24nIHwgJ3NwaW5uZXInIHwgJ2J1dHRvbic7XHJcbiAgYWxpYXM/OiBzdHJpbmc7XHJcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG4gIGljb24/OiBJY29uO1xyXG4gIGNvbG9yPzogQ29sb3I7XHJcbiAgY29sb3JzPzogQ29sb3JbXTtcclxuICBpY29ucz86IEljb25bXTtcclxuICBvcHRpb25zPzogYW55W107XHJcbiAgb3B0aW9uRGlzcGxheT86IHN0cmluZ1xyXG4gIG9wdGlvblZhbHVlPzogc3RyaW5nXHJcbiAgZGV0YWlsc0NvbmZpZz86IERldGFpbHNEaWFsb2dDb25maWdcclxuICBoaWRkZW5Db25kaXRpb24/OiAocGFyZW50RGF0YTogYW55KSA9PiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29uZmlne1xyXG4gIHRhYlRpdGxlPzogc3RyaW5nXHJcbiAgbm9EYXRhTWVzc2FnZSA/OiBzdHJpbmdcclxuICBjb2x1bW5zPyA6IENvbHVtbltdXHJcbiAgbWluQ29sdW1ucz86IHN0cmluZ1tdXHJcbiAgc2hvd0ZpbHRlcj86IGJvb2xlYW5cclxuICBzaG93RmlsdGVyQnV0dG9uPzogYm9vbGVhblxyXG4gIGhvbGRGaWx0ZXJTcGFjZT86IGJvb2xlYW5cclxuICBob2xkSGVhZGVyQnV0dG9uU3BhY2U/OiBib29sZWFuXHJcbiAgZWxldmF0aW9uPzogJ25vbmUnIHwgJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJ1xyXG4gIGZvcm1Db25maWc/OiBGb3JtQ29uZmlnXHJcbiAgc2VhcmNoQ29uZmlnPzogU2VhcmNoQ29uZmlnXHJcbiAgdGlsZUNvbmZpZz86IFRpbGVDb25maWdcclxuICBzdGVwQ29uZmlnPzogU3RlcENvbmZpZ1xyXG4gIGJ1dHRvbnM/OiBCdXR0b25bXVxyXG4gIG1pbkJ1dHRvbnM/OiBzdHJpbmdbXVxyXG4gIGxvYWRBY3Rpb24/OiBBY3Rpb25cclxuICBsb2FkSURGaWVsZCA/OiBzdHJpbmdcclxuICBsb2FkQ3JpdGVyaWE/OiBzdHJpbmdcclxuICBsb2dSZXNwb25zZT86IGJvb2xlYW5cclxuICBmbGF0QnV0dG9ucz86IGJvb2xlYW5cclxuICBncmV5T3V0PzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbiAgaGVyb0ZpZWxkPzogYW55XHJcbiAgaGVyb1ZhbHVlPzogYW55XHJcbiAgY29sbGFwc2VCdXR0b25zPzogYm9vbGVhblxyXG4gIHBhcmVudERhdGEgPyA6IGFueVxyXG4gIHBhZ2VTaXplcz86IG51bWJlcltdXHJcbiAgbWF4QnV0dG9uc0NvdW50PzogbnVtYmVyXHJcbiAgaGlkZVRhYkNvbmRpdGlvbj86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuO1xyXG5cclxuICBkb3dubG9hZD86IHsgY29sdW1uczogc3RyaW5nW10sIGZpbGVOYW1lPzogc3RyaW5nLCBoaWRkZW5Db25kaXRpb24/OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbjsgfVxyXG4gIHVwbG9hZD86IHsgYWN0aW9uOiBBY3Rpb24sIG1lc3NhZ2VzPzogQWxlcnRNZXNzYWdlW10sIGhpZGRlbkNvbmRpdGlvbj86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlQ29uZmlnIHtcclxuICB0aXRsZT86IHN0cmluZztcclxuICB0YWJsZUNvbmZpZz86IFRhYmxlQ29uZmlnO1xyXG4gIHNlYXJjaFRhYmxlQ29uZmlnPzogVGFibGVDb25maWc7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbi8vLS0tQmFzZS0tLVxyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlIHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBkYXRhO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzIHtcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVEhfVVNFUiA9ICdhJztcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVEhfTkFNRSA9ICdiJztcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVEhfUk9MRVMgPSAnYyc7XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRIX1RPS0VOID0gJ2QnO1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUSF9UT0tFTl9FWFBJUkUgPSAnZSc7XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRIX1RFTkFOVF9OQU1FID0gJ2YnO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdERpYWxvZ0NvbmZpZyB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgbGlzdE5hbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhcEl0ZW0ge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwiXCI7XHJcbiAgICB0aGlzLmRpc3BsYXkgPSBcIk5ldyBDYXAgSXRlbVwiO1xyXG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnR5cGUgPSBcIlwiO1xyXG4gICAgdGhpcy5uZXdMaW5lID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dNZW51ID0gdHJ1ZTtcclxuICAgIHRoaXMuaWdub3JlU3Vic0Rpc3BsYXkgPSBmYWxzZTtcclxuICAgIHRoaXMubGluayA9IFwiXCI7XHJcbiAgICB0aGlzLmljb24gPSBcIm5hdmlnYXRlX25leHRcIjtcclxuICAgIHRoaXMuY29sb3IgPSBcImJsYWNrXCI7XHJcbiAgICB0aGlzLmlzQm9vbCA9IGZhbHNlO1xyXG5cclxuICB9XHJcblxyXG4gIG5hbWU6IHN0cmluZztcclxuICBkaXNwbGF5OiBzdHJpbmc7XHJcbiAgZW5hYmxlZDogYm9vbGVhbjtcclxuICBzaG93TWVudTogYm9vbGVhbjtcclxuXHJcbiAgaWdub3JlU3Vic0Rpc3BsYXk6IGJvb2xlYW47XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG5ld0xpbmU6IGJvb2xlYW47XHJcbiAgbGluazogc3RyaW5nO1xyXG4gIGljb246IHN0cmluZztcclxuICBjYXBTdWJJdGVtczogQ2FwSXRlbVtdO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgaXNCb29sIDogYm9vbGVhbjtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBcHBDb25maWcge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5hcHBOYW1lID0gXCJBcHAgTmFtZVwiO1xyXG4gICAgdGhpcy5sb2dvID0gXCJcIjtcclxuICAgIHRoaXMubG9nb1NpemUgPSBcIm5vcm1hbFwiO1xyXG4gICAgdGhpcy5BREF1dGggPSB0cnVlO1xyXG4gICAgdGhpcy5sb2NhbEF1dGggPSB0cnVlO1xyXG4gICAgdGhpcy5nb29nbGVBdXRoID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGZTZXJ2aWNlID0gZmFsc2U7XHJcbiAgICB0aGlzLm11bHRpdGVuYW50ID0gZmFsc2U7XHJcbiAgICB0aGlzLm5hdmlnYXRpb24gPSAndG9wJztcclxuICAgIHRoaXMucHJvZ3Jlc3NMaW5lID0gZmFsc2U7XHJcbiAgICB0aGlzLmxvZ2luU3R5bGUgPSAnZGVmYXVsdCc7XHJcbiAgICB0aGlzLnRlcm1zVXJsID0gXCJodHRwczovL3lvdXJzaXRlLmNvbS90ZXJtc1wiO1xyXG4gICAgdGhpcy5wcml2YWN5VXJsID0gXCJodHRwczovL3lvdXJzaXRlLmNvbS9wcml2YWN5XCI7XHJcbiAgICB0aGlzLnNpdGVVcmwgPSBcImh0dHBzOi8veW91cnNpdGUuY29tXCI7XHJcbiAgICB0aGlzLm5hdldpZHRoID0gJzIwMHB4JztcclxuXHJcbiAgfVxyXG4gIGFwcE5hbWU6IHN0cmluZztcclxuICBsb2dvOiBzdHJpbmc7XHJcbiAgbG9nb1NpemU6IHN0cmluZztcclxuICBBREF1dGg6IGJvb2xlYW47XHJcbiAgbG9jYWxBdXRoOiBib29sZWFuO1xyXG4gIGdvb2dsZUF1dGg6IGJvb2xlYW47XHJcbiAgc2VsZlNlcnZpY2U6IGJvb2xlYW47XHJcbiAgY2FwSXRlbXM6IENhcEl0ZW1bXTtcclxuICBtdWx0aXRlbmFudCA6IGJvb2xlYW47XHJcbiAgbmF2aWdhdGlvbiA6ICd0b3AnIHwgJ3NpZGUnXHJcbiAgcHJvZ3Jlc3NMaW5lOiBib29sZWFuO1xyXG4gIGRvY3NCYXNlVXJsIDogc3RyaW5nO1xyXG4gIGxvZ2luU3R5bGUgOiBzdHJpbmc7XHJcbiAgbG9naW5UaXRsZSA6IHN0cmluZztcclxuICBsb2dpbk1lc3NhZ2UgOiBzdHJpbmc7XHJcbiAgdGVybXNVcmw6IHN0cmluZztcclxuICBwcml2YWN5VXJsOiBzdHJpbmc7XHJcbiAgc2l0ZVVybDogc3RyaW5nO1xyXG4gIG5hdldpZHRoOiBzdHJpbmc7XHJcblxyXG59XHJcblxyXG5cclxuXHJcblxyXG4vLy0tLS0tLS0tLS0tTW92ZSBvdXQtLS0tLS1cclxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uSUQgPSAwO1xyXG4gICAgdGhpcy5uYXJyYXRpb24gPSBcIlwiO1xyXG4gICAgdGhpcy5hbW91bnQgPSAnMCc7XHJcbiAgICB0aGlzLnR5cGUgPSAwO1xyXG4gICAgdGhpcy5kYXRlID0gXCJcIjtcclxuICAgIHRoaXMuYWNjb3VudElEID0gMDtcclxuICAgIHRoaXMuZGVzdGluYXRpb25JRCA9IDA7XHJcbiAgICB0aGlzLmNhdGVnb3J5SUQgPSAwO1xyXG4gIH1cclxuXHJcbiAgdHJhbnNhY3Rpb25JRCA6IG51bWJlcjtcclxuICBuYXJyYXRpb24gOiBzdHJpbmc7XHJcbiAgYW1vdW50IDogc3RyaW5nO1xyXG4gIHR5cGU6IG51bWJlcjtcclxuICBkYXRlIDogc3RyaW5nO1xyXG4gIGFjY291bnRJRCA6IG51bWJlcjtcclxuICBkZXN0aW5hdGlvbklEIDogbnVtYmVyO1xyXG4gIGNhdGVnb3J5SUQgOiBudW1iZXI7XHJcblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRmluQWNjb3VudCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCl7XHJcbiAgICB0aGlzLmFjY291bnRJRCA9IDA7XHJcbiAgICB0aGlzLm5hbWUgPSBcIlwiO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICB0aGlzLmN1cnJlbmN5ID0gXCJcIjtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgYWNjb3VudElEOiBudW1iZXJcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICBjdXJyZW5jeTogc3RyaW5nO1xyXG5cclxufVxyXG5cclxuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jbGFzc2VzL0NsYXNzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxDQUFOLElBQVksVUFNWDtBQU5ELFdBQVksVUFBVTtJQUNwQiwyQ0FBUSxDQUFBO0lBQ1IsMkNBQVEsQ0FBQTtJQUNSLDJDQUFRLENBQUE7SUFDUiwrQ0FBVSxDQUFBO0lBQ1YsMkNBQVEsQ0FBQTtBQUNWLENBQUMsRUFOVyxVQUFVLEtBQVYsVUFBVSxRQU1yQjtBQUVELE1BQU0sQ0FBTixJQUFZLGFBQXdCO0FBQXBDLFdBQVksYUFBYTtJQUFFLCtDQUFHLENBQUE7SUFBRSwrQ0FBRyxDQUFBO0FBQUEsQ0FBQyxFQUF4QixhQUFhLEtBQWIsYUFBYSxRQUFXO0FBRXBDLE1BQU0sT0FBTyxhQUFhO0NBR3pCO0FBRUQsTUFBTSxPQUFPLG1CQUFtQjtDQWMvQjtBQUlELE1BQU0sT0FBTyxNQUFNO0NBT2xCO0FBT0QsTUFBTSxPQUFPLFlBQVk7Q0FLeEI7QUFJRCxNQUFNLE9BQU8sY0FBYztDQUcxQjtBQStERCxNQUFNLE9BQU8sWUFBWTtDQUl4QjtBQUVELE1BQU0sT0FBTyxhQUFhO0NBR3pCO0FBRUQsTUFBTSxPQUFPLFVBQVU7Q0FldEI7QUF5Q0QsTUFBTSxPQUFPLFVBQVU7Q0FLdEI7QUFFRCxNQUFNLE9BQU8sSUFBSTtDQUtoQjtBQUNELE1BQU0sT0FBTyxVQUFVO0NBS3RCO0FBaUNELE1BQU0sT0FBTyxXQUFXO0NBZ0N2QjtBQUVELE1BQU0sT0FBTyxVQUFVO0NBSXRCO0FBS0QsWUFBWTtBQUVaLE1BQU0sT0FBTyxXQUFXO0NBSXZCO0FBRUQsTUFBTSxPQUFPLFNBQVM7O0FBQ0csbUJBQVMsR0FBRyxHQUFHLENBQUM7QUFDaEIsbUJBQVMsR0FBRyxHQUFHLENBQUM7QUFDaEIsb0JBQVUsR0FBRyxHQUFHLENBQUM7QUFDakIsb0JBQVUsR0FBRyxHQUFHLENBQUM7QUFDakIsMkJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLDBCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUdoRCxNQUFNLE9BQU8sZ0JBQWdCO0NBSTVCO0FBRUQsTUFBTSxPQUFPLE9BQU87SUFFbEI7UUFDRSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRXRCLENBQUM7Q0FnQkY7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUNwQjtRQUNFLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLDhCQUE4QixDQUFDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsc0JBQXNCLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFFMUIsQ0FBQztDQXFCRjtBQUtELDJCQUEyQjtBQUMzQixNQUFNLE9BQU8sV0FBVztJQUV0QjtRQUNFLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBV0Y7QUFFRCxNQUFNLE9BQU8sVUFBVTtJQUVyQjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFFckIsQ0FBQztDQVFGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCaXR3aXNlT3B0aW9uIHtcclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIHZhbHVlOiBudW1iZXI7XHJcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgaWNvbj86IEljb247XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJvbGVBY2Nlc3Mge1xyXG4gIE5vbmUgPSAwLFxyXG4gIFZpZXcgPSAxLFxyXG4gIEVkaXQgPSAyLFxyXG4gIENyZWF0ZSA9IDMsXHJcbiAgRnVsbCA9IDRcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRGV0YWlsc1NvdXJjZSB7Um93LCBVcmx9XHJcblxyXG5leHBvcnQgY2xhc3MgZGlhbG9nT3B0aW9ucyB7XHJcbiAgd2lkdGg/OiBzdHJpbmc7XHJcbiAgaGVpZ2h0Pzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGV0YWlsc0RpYWxvZ0NvbmZpZyB7XHJcblxyXG4gIHN0ZXBDb25maWc/IDogU3RlcENvbmZpZztcclxuICBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIHRhYmxlQ29uZmlnPzogVGFibGVDb25maWc7XHJcbiAgdGFibGVDb25maWdzPzogVGFibGVDb25maWdbXTtcclxuICBidXR0b25zPzogQnV0dG9uW107XHJcbiAgZGV0YWlscz8gOiBhbnlcclxuICBoZXJvRmllbGQ/IDogYW55XHJcbiAgaGVyb1ZhbHVlPzogYW55XHJcbiAgbW9kZT86ICdjcmVhdGUnIHwgJ2VkaXQnIHwgJ3ZpZXcnXHJcbiAgd2lkdGg/OiBzdHJpbmdcclxuICBkZXRhaWxzU291cmNlPzogRGV0YWlsc1NvdXJjZVxyXG4gIG9wdGlvbnM/OiBkaWFsb2dPcHRpb25zXHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEFjdGlvbntcclxuICBtZXRob2Q/OiAnZ2V0JyB8ICdwb3N0J1xyXG4gIHVybDogc3RyaW5nO1xyXG4gIHBhcmFtcz8gOiBhbnlbXVxyXG4gIHN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nXHJcbiAgaXNGb3JtRGF0YT86IGJvb2xlYW5cclxuICBza2lwQ2FjaGU/OiBib29sZWFuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEZpZWxkIGV4dGVuZHMgRmllbGQge1xyXG4gIHNob3c/OiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hDb25maWcge1xyXG4gIGZpZWxkczogU2VhcmNoRmllbGRbXVxyXG4gIHNlYXJjaEFjdGlvbj86IEFjdGlvblxyXG4gIGVtYWlsUmVzdWx0cz86IGJvb2xlYW5cclxuICB0aWxlQ29uZmlnPzogVGlsZUNvbmZpZ1xyXG59XHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTZWN1cml0eUNvbmZpZyB7XHJcbiAgYWxsb3c/OiBDYXBJdGVtW107XHJcbiAgZGVueT86IENhcEl0ZW1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGlsZEZpZWxkIHtcclxuICBjaGlsZEZpZWxkPzogc3RyaW5nXHJcbiAgY2hpbGRWYWx1ZUZpZWxkPzogc3RyaW5nXHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWVsZCB7XHJcbiAgc2VjdXJpdHlDb25maWc/OiBTZWN1cml0eUNvbmZpZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogJ3RleHQnIHwgJ211bHRpLXRleHQnIHwgJ3Bhc3N3b3JkJyB8ICdkYXRlJyB8ICdkYXRldGltZScgfCAnZGF0ZXRpbWVzZWMnIHwgJ2NoZWNrYm94JyB8ICdzZWxlY3QnIHwgJ211bHRpLXNlbGVjdCcgfCAnbW9uZXknIHwgJ251bWJlcicgfCAnc2VjdGlvbicgfCAnYmxhbmsnIHwgJ2NoaXAnIHwgJ2ZpbGUnIHwgJ2ZpbGUtdmlldycgfCAnaWNvbicgfCAnc3Bpbm5lcicgfCAnYnV0dG9uJyB8ICdsYWJlbCcgfCAnZW1haWwnIHwgJ2NvbXBvc2l0ZScgfCAnc3RyaW5nJztcclxuICBhbGlhcz86IHN0cmluZztcclxuICBvcHRpb25zPzogYW55W107XHJcbiAgb3B0aW9uRGlzcGxheT86IHN0cmluZ1xyXG4gIG9wdGlvblZhbHVlPzogc3RyaW5nXHJcbiAgbWFzdGVyT3B0aW9uVmFsdWU/OiBzdHJpbmdcclxuICBkZWZhdWx0VmFsdWU/OiBhbnlcclxuICBkZWZhdWx0Rmlyc3RWYWx1ZT86IGJvb2xlYW5cclxuICByZXF1aXJlZD86IGJvb2xlYW5cclxuICBtaW4/OiBhbnlcclxuICBtYXg/OiBhbnlcclxuICByb3dzPzogbnVtYmVyXHJcbiAgc3Bhbj86IGJvb2xlYW5cclxuICB3aWR0aD86IHN0cmluZ1xyXG4gIHNpemU/OiBzdHJpbmdcclxuICByZWFkb25seT86IGJvb2xlYW5cclxuICBoaWRkZW4/OiBib29sZWFuXHJcbiAgc3RyaWN0PzogYm9vbGVhblxyXG4gIHBhdGg/OiBzdHJpbmdcclxuICBrZXlGaWVsZD86IHN0cmluZ1xyXG4gIGhpbnQ/OiBzdHJpbmdcclxuICBtYXN0ZXJGaWVsZD86IHN0cmluZ1xyXG4gIC8vIGNoaWxkPzogQ2hpbGRGaWVsZFxyXG4gIGNoaWxkcmVuPzogQ2hpbGRGaWVsZFtdXHJcbiAgbWFzdGVyT3B0aW9ucz86IGFueVtdXHJcbiAgbnVsbGFibGU/OiBib29sZWFuXHJcbiAgY29weUNvbnRlbnQ/OiBib29sZWFuXHJcbiAgY2xlYXJDb250ZW50PzogYm9vbGVhblxyXG4gIGZvcm1hdD86ICd0ZXh0JyB8ICdtb25leScgfCAnZGF0ZScgfCAnZGF0ZXRpbWUnIHwgJ251bWJlcidcclxuICBoaWRlT25DcmVhdGU/OiBib29sZWFuXHJcbiAgaGlkZU9uRXhpc3RzPzogYm9vbGVhblxyXG4gIGhpZGRlbkNvbmRpdGlvbj86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuO1xyXG4gIHJlYWRvbmx5Q29uZGl0aW9uPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbiAgZGV0YWlsc0NvbmZpZz86IERldGFpbHNEaWFsb2dDb25maWc7XHJcbiAgbG9hZEFjdGlvbj86IEFjdGlvblxyXG4gIGxvYWRJREZpZWxkPzogc3RyaW5nO1xyXG4gIGluZm9NZXNzYWdlPzogc3RyaW5nO1xyXG4gIHN1ZmZpeD86IHN0cmluZztcclxuICBzdWJmaWVsZHM/OiBGaWVsZFtdO1xyXG4gIG9wdGlvbnNTdWJqZWN0PzogQmVoYXZpb3JTdWJqZWN0PGFueVtdPjtcclxuICBzZWN0aW9uPzogc3RyaW5nO1xyXG4gIGZpbGVPcHRpb25zPzoge1xyXG4gICAgYWxsb3dlZEV4dGVuc2lvbnM/OiBzdHJpbmdbXTtcclxuICAgIG1heFNpemVNQj86IG51bWJlcjtcclxuICAgIGNvbXByZXNzSW1hZ2VzPzogYm9vbGVhbjtcclxuICB9O1xyXG4gIGNvbGxhcHNlZD86IGJvb2xlYW47XHJcbiAgY29sbGFwc2VkQ29uZGl0aW9uPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQWxlcnRNZXNzYWdlIHtcclxuICB0eXBlPzogJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2NyaXRpY2FsJ1xyXG4gIGNvbnRlbnQ6IHN0cmluZ1xyXG4gIGhpZGRlbkNvbmRpdGlvbj86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWxlcnRNZXNzYWdlcyB7XHJcbiAgc3ViamVjdD86IHN0cmluZ1xyXG4gIG1lc3NhZ2VzOiBBbGVydE1lc3NhZ2VbXVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRm9ybUNvbmZpZyB7XHJcbiAgdGl0bGU/OiBzdHJpbmdcclxuICBmaXhlZFRpdGxlPzogYm9vbGVhblxyXG4gIGFsZXJ0TWVzc2FnZXM/OiBBbGVydE1lc3NhZ2VzXHJcbiAgZmllbGRzOiBGaWVsZFtdXHJcbiAgbW9kZT86ICdjcmVhdGUnIHwgJ2VkaXQnIHwgJ3ZpZXcnXHJcbiAgYnV0dG9uPyA6IEJ1dHRvblxyXG4gIG11bHRpQ29sdW1uPzogYm9vbGVhblxyXG4gIHJlc2V0PzogYm9vbGVhblxyXG4gIGxvYWRBY3Rpb24/OiBBY3Rpb25cclxuICBoZXJvRmllbGQ/OiBhbnlcclxuICBoZXJvVmFsdWU/OiBhbnlcclxuICBzZWN1cml0eT86IFNlY3VyaXR5Q29uZmlnO1xyXG4gIGluY2x1ZGVBdWRpdD86IGJvb2xlYW5cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlybSB7XHJcbiAgbWVzc2FnZTogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQnV0dG9ue1xyXG4gIG5hbWU6IHN0cmluZ1xyXG4gIHZpc2libGU/OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbjtcclxuICBkaXNwbGF5Pzogc3RyaW5nO1xyXG4gIGljb24/OiBJY29uO1xyXG4gIGRpc2FibGVkPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbiAgY29sb3I/OiBzdHJpbmc7XHJcbiAgdGlwPzogc3RyaW5nXHJcbiAgZGlhbG9nPzogYm9vbGVhblxyXG4gIGFjdGlvbj86IEFjdGlvblxyXG4gIGNvbmZpcm0/OiBDb25maXJtXHJcbiAgaW5EaWFsb2c/OiBib29sZWFuXHJcbiAgaW5IZWFkZXI/OiBib29sZWFuXHJcbiAgZGV0YWlsc0NvbmZpZz86IERldGFpbHNEaWFsb2dDb25maWdcclxuICBzZXRIZXJvRmllbGQ/OiBib29sZWFuO1xyXG4gIGlnbm9yZUFwcHJvdmFsPzogYm9vbGVhbjtcclxufVxyXG5cclxuXHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUaWxlIHtcclxuXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFsaWFzPzogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG4gIGNvbG9yPzogc3RyaW5nO1xyXG4gIHNlbGVjdGVkVGlsZT86IHN0cmluZztcclxuICBoaWRkZW4/OiBib29sZWFuO1xyXG4gIGluZm8/OiBzdHJpbmc7XHJcbiAgcHJlZml4Pzogc3RyaW5nO1xyXG4gIHN1ZmZpeD86IHN0cmluZztcclxuICBhY3Rpb24/OiBBY3Rpb247XHJcbiAgaGlkZGVuQ29uZGl0aW9uPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGNsYXNzIFRpbGVDb25maWcge1xyXG4gIHRpbGVzOiBUaWxlW11cclxuICBsb2FkQWN0aW9uPzogQWN0aW9uXHJcbiAgbG9hZEluaXQ/OiBib29sZWFuXHJcbiAgY2xpY2thYmxlPzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3RlcCB7XHJcbiAgbmFtZTogc3RyaW5nXHJcbiAgdmFsdWU/OiBhbnlcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIGhpZGRlbkNvbmRpdGlvbj86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBTdGVwQ29uZmlnIHtcclxuICBzdGVwczogU3RlcFtdXHJcbiAgdmFsdWVGaWVsZD86IHN0cmluZ1xyXG4gIGxvYWRBY3Rpb24/OiBBY3Rpb247XHJcbiAgbG9hZElERmllbGQ/OiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJY29uIHtcclxuICBuYW1lOiBzdHJpbmdcclxuICBjb2xvcj86IHN0cmluZ1xyXG4gIHRpcD86IHN0cmluZ1xyXG4gIHRpcEZpZWxkPzogc3RyaW5nXHJcbiAgYmFubmVyRmllbGQ/OiBzdHJpbmdcclxuICBjb25kaXRpb24/OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb2xvciB7XHJcbiAgbmFtZTogc3RyaW5nXHJcbiAgY29uZGl0aW9uPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZT86ICd0ZXh0JyB8ICdkYXRlJyB8ICdkYXRldGltZScgfCAnZGF0ZXRpbWVzZWMnIHwgJ2NoZWNrYm94JyB8ICdzZWxlY3QnIHwgJ21vbmV5JyB8ICdudW1iZXInIHwgJ2NoaXAnIHwgJ2ljb24nIHwgJ3NwaW5uZXInIHwgJ2J1dHRvbic7XHJcbiAgYWxpYXM/OiBzdHJpbmc7XHJcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG4gIGljb24/OiBJY29uO1xyXG4gIGNvbG9yPzogQ29sb3I7XHJcbiAgY29sb3JzPzogQ29sb3JbXTtcclxuICBpY29ucz86IEljb25bXTtcclxuICBvcHRpb25zPzogYW55W107XHJcbiAgb3B0aW9uRGlzcGxheT86IHN0cmluZ1xyXG4gIG9wdGlvblZhbHVlPzogc3RyaW5nXHJcbiAgZGV0YWlsc0NvbmZpZz86IERldGFpbHNEaWFsb2dDb25maWdcclxuICBoaWRkZW5Db25kaXRpb24/OiAocGFyZW50RGF0YTogYW55KSA9PiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29uZmlne1xyXG4gIHRhYlRpdGxlPzogc3RyaW5nXHJcbiAgbm9EYXRhTWVzc2FnZSA/OiBzdHJpbmdcclxuICBjb2x1bW5zPyA6IENvbHVtbltdXHJcbiAgbWluQ29sdW1ucz86IHN0cmluZ1tdXHJcbiAgc2hvd0ZpbHRlcj86IGJvb2xlYW5cclxuICBzaG93RmlsdGVyQnV0dG9uPzogYm9vbGVhblxyXG4gIGhvbGRGaWx0ZXJTcGFjZT86IGJvb2xlYW5cclxuICBob2xkSGVhZGVyQnV0dG9uU3BhY2U/OiBib29sZWFuXHJcbiAgZWxldmF0aW9uPzogJ25vbmUnIHwgJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJ1xyXG4gIGZvcm1Db25maWc/OiBGb3JtQ29uZmlnXHJcbiAgc2VhcmNoQ29uZmlnPzogU2VhcmNoQ29uZmlnXHJcbiAgdGlsZUNvbmZpZz86IFRpbGVDb25maWdcclxuICBzdGVwQ29uZmlnPzogU3RlcENvbmZpZ1xyXG4gIGJ1dHRvbnM/OiBCdXR0b25bXVxyXG4gIG1pbkJ1dHRvbnM/OiBzdHJpbmdbXVxyXG4gIGxvYWRBY3Rpb24/OiBBY3Rpb25cclxuICBsb2FkSURGaWVsZCA/OiBzdHJpbmdcclxuICBsb2FkQ3JpdGVyaWE/OiBzdHJpbmdcclxuICBsb2dSZXNwb25zZT86IGJvb2xlYW5cclxuICBmbGF0QnV0dG9ucz86IGJvb2xlYW5cclxuICBncmV5T3V0PzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW47XHJcbiAgaGVyb0ZpZWxkPzogYW55XHJcbiAgaGVyb1ZhbHVlPzogYW55XHJcbiAgY29sbGFwc2VCdXR0b25zPzogYm9vbGVhblxyXG4gIHBhcmVudERhdGEgPyA6IGFueVxyXG4gIHBhZ2VTaXplcz86IG51bWJlcltdXHJcbiAgbWF4QnV0dG9uc0NvdW50PzogbnVtYmVyXHJcbiAgaGlkZVRhYkNvbmRpdGlvbj86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuO1xyXG5cclxuICBkb3dubG9hZD86IHsgY29sdW1uczogc3RyaW5nW10sIGZpbGVOYW1lPzogc3RyaW5nLCBoaWRkZW5Db25kaXRpb24/OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbjsgfVxyXG4gIHVwbG9hZD86IHsgYWN0aW9uOiBBY3Rpb24sIG1lc3NhZ2VzPzogQWxlcnRNZXNzYWdlW10sIGhpZGRlbkNvbmRpdGlvbj86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlQ29uZmlnIHtcclxuICB0aXRsZT86IHN0cmluZztcclxuICB0YWJsZUNvbmZpZz86IFRhYmxlQ29uZmlnO1xyXG4gIHNlYXJjaFRhYmxlQ29uZmlnPzogVGFibGVDb25maWc7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbi8vLS0tQmFzZS0tLVxyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlIHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBkYXRhO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzIHtcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVEhfVVNFUiA9ICdhJztcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVEhfTkFNRSA9ICdiJztcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVEhfUk9MRVMgPSAnYyc7XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRIX1RPS0VOID0gJ2QnO1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUSF9UT0tFTl9FWFBJUkUgPSAnZSc7XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRIX1RFTkFOVF9OQU1FID0gJ2YnO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdERpYWxvZ0NvbmZpZyB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgbGlzdE5hbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhcEl0ZW0ge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwiXCI7XHJcbiAgICB0aGlzLmRpc3BsYXkgPSBcIk5ldyBDYXAgSXRlbVwiO1xyXG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnR5cGUgPSBcIlwiO1xyXG4gICAgdGhpcy5uZXdMaW5lID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dNZW51ID0gdHJ1ZTtcclxuICAgIHRoaXMuaWdub3JlU3Vic0Rpc3BsYXkgPSBmYWxzZTtcclxuICAgIHRoaXMubGluayA9IFwiXCI7XHJcbiAgICB0aGlzLmljb24gPSBcIm5hdmlnYXRlX25leHRcIjtcclxuICAgIHRoaXMuY29sb3IgPSBcImJsYWNrXCI7XHJcbiAgICB0aGlzLmlzQm9vbCA9IGZhbHNlO1xyXG5cclxuICB9XHJcblxyXG4gIG5hbWU6IHN0cmluZztcclxuICBkaXNwbGF5OiBzdHJpbmc7XHJcbiAgZW5hYmxlZDogYm9vbGVhbjtcclxuICBzaG93TWVudTogYm9vbGVhbjtcclxuXHJcbiAgaWdub3JlU3Vic0Rpc3BsYXk6IGJvb2xlYW47XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG5ld0xpbmU6IGJvb2xlYW47XHJcbiAgbGluazogc3RyaW5nO1xyXG4gIGljb246IHN0cmluZztcclxuICBjYXBTdWJJdGVtczogQ2FwSXRlbVtdO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgaXNCb29sIDogYm9vbGVhbjtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBcHBDb25maWcge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5hcHBOYW1lID0gXCJBcHAgTmFtZVwiO1xyXG4gICAgdGhpcy5sb2dvID0gXCJcIjtcclxuICAgIHRoaXMubG9nb1NpemUgPSBcIm5vcm1hbFwiO1xyXG4gICAgdGhpcy5BREF1dGggPSB0cnVlO1xyXG4gICAgdGhpcy5sb2NhbEF1dGggPSB0cnVlO1xyXG4gICAgdGhpcy5nb29nbGVBdXRoID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGZTZXJ2aWNlID0gZmFsc2U7XHJcbiAgICB0aGlzLm11bHRpdGVuYW50ID0gZmFsc2U7XHJcbiAgICB0aGlzLm5hdmlnYXRpb24gPSAndG9wJztcclxuICAgIHRoaXMucHJvZ3Jlc3NMaW5lID0gZmFsc2U7XHJcbiAgICB0aGlzLmxvZ2luU3R5bGUgPSAnZGVmYXVsdCc7XHJcbiAgICB0aGlzLnRlcm1zVXJsID0gXCJodHRwczovL3lvdXJzaXRlLmNvbS90ZXJtc1wiO1xyXG4gICAgdGhpcy5wcml2YWN5VXJsID0gXCJodHRwczovL3lvdXJzaXRlLmNvbS9wcml2YWN5XCI7XHJcbiAgICB0aGlzLnNpdGVVcmwgPSBcImh0dHBzOi8veW91cnNpdGUuY29tXCI7XHJcbiAgICB0aGlzLm5hdldpZHRoID0gJzIwMHB4JztcclxuXHJcbiAgfVxyXG4gIGFwcE5hbWU6IHN0cmluZztcclxuICBsb2dvOiBzdHJpbmc7XHJcbiAgbG9nb1NpemU6IHN0cmluZztcclxuICBBREF1dGg6IGJvb2xlYW47XHJcbiAgbG9jYWxBdXRoOiBib29sZWFuO1xyXG4gIGdvb2dsZUF1dGg6IGJvb2xlYW47XHJcbiAgc2VsZlNlcnZpY2U6IGJvb2xlYW47XHJcbiAgY2FwSXRlbXM6IENhcEl0ZW1bXTtcclxuICBtdWx0aXRlbmFudCA6IGJvb2xlYW47XHJcbiAgbmF2aWdhdGlvbiA6ICd0b3AnIHwgJ3NpZGUnXHJcbiAgcHJvZ3Jlc3NMaW5lOiBib29sZWFuO1xyXG4gIGRvY3NCYXNlVXJsIDogc3RyaW5nO1xyXG4gIGxvZ2luU3R5bGUgOiBzdHJpbmc7XHJcbiAgbG9naW5UaXRsZSA6IHN0cmluZztcclxuICBsb2dpbk1lc3NhZ2UgOiBzdHJpbmc7XHJcbiAgdGVybXNVcmw6IHN0cmluZztcclxuICBwcml2YWN5VXJsOiBzdHJpbmc7XHJcbiAgc2l0ZVVybDogc3RyaW5nO1xyXG4gIG5hdldpZHRoOiBzdHJpbmc7XHJcblxyXG59XHJcblxyXG5cclxuXHJcblxyXG4vLy0tLS0tLS0tLS0tTW92ZSBvdXQtLS0tLS1cclxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uSUQgPSAwO1xyXG4gICAgdGhpcy5uYXJyYXRpb24gPSBcIlwiO1xyXG4gICAgdGhpcy5hbW91bnQgPSAnMCc7XHJcbiAgICB0aGlzLnR5cGUgPSAwO1xyXG4gICAgdGhpcy5kYXRlID0gXCJcIjtcclxuICAgIHRoaXMuYWNjb3VudElEID0gMDtcclxuICAgIHRoaXMuZGVzdGluYXRpb25JRCA9IDA7XHJcbiAgICB0aGlzLmNhdGVnb3J5SUQgPSAwO1xyXG4gIH1cclxuXHJcbiAgdHJhbnNhY3Rpb25JRCA6IG51bWJlcjtcclxuICBuYXJyYXRpb24gOiBzdHJpbmc7XHJcbiAgYW1vdW50IDogc3RyaW5nO1xyXG4gIHR5cGU6IG51bWJlcjtcclxuICBkYXRlIDogc3RyaW5nO1xyXG4gIGFjY291bnRJRCA6IG51bWJlcjtcclxuICBkZXN0aW5hdGlvbklEIDogbnVtYmVyO1xyXG4gIGNhdGVnb3J5SUQgOiBudW1iZXI7XHJcblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRmluQWNjb3VudCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCl7XHJcbiAgICB0aGlzLmFjY291bnRJRCA9IDA7XHJcbiAgICB0aGlzLm5hbWUgPSBcIlwiO1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICB0aGlzLmN1cnJlbmN5ID0gXCJcIjtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgYWNjb3VudElEOiBudW1iZXJcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICBjdXJyZW5jeTogc3RyaW5nO1xyXG5cclxufVxyXG5cclxuIl19
@@ -7,19 +7,20 @@ import * as i2 from "../../services/datalib.service";
7
7
  import * as i3 from "../../services/auth.service";
8
8
  import * as i4 from "@angular/common";
9
9
  import * as i5 from "@angular/material/button";
10
- import * as i6 from "../text/text.component";
11
- import * as i7 from "../check/check.component";
12
- import * as i8 from "../date/date.component";
13
- import * as i9 from "../datetime/datetime.component";
14
- import * as i10 from "../label/label.component";
15
- import * as i11 from "../money/money.component";
16
- import * as i12 from "../attach/attach.component";
17
- import * as i13 from "../number/number.component";
18
- import * as i14 from "../viewer/viewer.component";
19
- import * as i15 from "../email/email.component";
20
- import * as i16 from "../multi-text/multi-text.component";
21
- import * as i17 from "../multi-select/multi-select.component";
22
- import * as i18 from "../../pipes/camelToWords.pipe";
10
+ import * as i6 from "@angular/material/icon";
11
+ import * as i7 from "../text/text.component";
12
+ import * as i8 from "../check/check.component";
13
+ import * as i9 from "../date/date.component";
14
+ import * as i10 from "../datetime/datetime.component";
15
+ import * as i11 from "../label/label.component";
16
+ import * as i12 from "../money/money.component";
17
+ import * as i13 from "../attach/attach.component";
18
+ import * as i14 from "../number/number.component";
19
+ import * as i15 from "../viewer/viewer.component";
20
+ import * as i16 from "../email/email.component";
21
+ import * as i17 from "../multi-text/multi-text.component";
22
+ import * as i18 from "../multi-select/multi-select.component";
23
+ import * as i19 from "../../pipes/camelToWords.pipe";
23
24
  export class FormComponent {
24
25
  constructor(messageService, dataService, authService) {
25
26
  this.messageService = messageService;
@@ -107,11 +108,40 @@ export class FormComponent {
107
108
  return Core.getVisibleSubfields(this.config, this.data, field, this.authService.currentRoleSource.value);
108
109
  }
109
110
  getVisibleFields() {
110
- return this.fields?.filter(x => Core.testVisible(this.config, this.data, x, this.authService.currentRoleSource.value));
111
+ let visibleFields = this.fields?.filter(x => Core.testVisible(this.config, this.data, x, this.authService.currentRoleSource.value)) ?? [];
112
+ // Filter out fields under collapsed sections
113
+ return visibleFields.filter(field => {
114
+ if (field.type === 'section')
115
+ return true;
116
+ if (field.section) {
117
+ const sectionField = this.fields.find(f => f.type === 'section' && f.name === field.section);
118
+ return !sectionField?.collapsed;
119
+ }
120
+ return true;
121
+ });
111
122
  }
112
123
  testReadOnly(field) {
113
124
  return Core.testReadOnly(this.config, this.data, field);
114
125
  }
126
+ toggleSection(field) {
127
+ if (field.type === 'section') {
128
+ field.collapsed = !field.collapsed;
129
+ }
130
+ }
131
+ hasSectionFields(sectionName) {
132
+ return this.fields?.some(field => field.section === sectionName &&
133
+ Core.testVisible(this.config, this.data, field, this.authService.currentRoleSource.value)) ?? false;
134
+ }
135
+ shouldSectionCollapse(field) {
136
+ if (field.collapsedCondition) {
137
+ return field.collapsedCondition(this.data);
138
+ }
139
+ return field.collapsed ?? false;
140
+ }
141
+ onInfoClick(event, infoMessage) {
142
+ event.stopPropagation();
143
+ this.messageService.info(infoMessage);
144
+ }
115
145
  selectChanged(field) {
116
146
  this.inputChanged(field, this.data[field.name]);
117
147
  }
@@ -213,10 +243,10 @@ export class FormComponent {
213
243
  }
214
244
  }
215
245
  FormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormComponent, deps: [{ token: i1.MessageService }, { token: i2.DataServiceLib }, { token: i3.AuthService }], target: i0.ɵɵFactoryTarget.Component });
216
- FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FormComponent, selector: "spa-form", inputs: { files: "files", data: "data", config: "config" }, outputs: { buttonClick: "buttonClick", inputChange: "inputChange" }, queries: [{ propertyName: "dynamicSelectTemplate", first: true, predicate: ["dynamicSelect"], descendants: true }], ngImport: i0, template: "\r\n<div [ngClass]=\"multiColumn ? 'tin-grid' : 'tin-col'\" >\r\n\r\n <div *ngIf=\"!hasAccess\" class=\"tin-center\">\r\n <p><em>Access Restricted</em></p>\r\n </div>\r\n\r\n <div [ngClass]=\"field.span || field.type =='section' || field.type =='file' || field.type =='file-view' ? 'span-col' : ''\" *ngFor=\"let field of getVisibleFields()\">\r\n\r\n <ng-container >\r\n\r\n <ng-container [ngSwitch]=\"field.type\" class=\"highlight\">\r\n\r\n <div *ngSwitchCase=\"'section'\" class=\"title\">\r\n <label style=\"font-size: larger;\">{{field.alias ?? field.name | camelToWords}}</label>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <div class=\"mt-1 mb-2\" *ngIf=\"config.mode !='view'\">\r\n <spa-attach [message]=\"field.alias ?? 'Drag and Drop files here'\" [(files)]=\"files\" [fileOptions]=\"field.fileOptions\"></spa-attach>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'file-view'\">\r\n <div class=\"mt-1 mb-2\" *ngIf=\"config.mode && config.mode !='create'\">\r\n <spa-viewer [fileAction]=\"field.loadAction\" [path]=\"field.path\" [folderName]=\"data[field.keyField]\" ></spa-viewer>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <label *ngSwitchCase=\"'blank'\"></label>\r\n\r\n <label *ngSwitchCase=\"'string'\" [ngStyle]=\"{'font-size':field.size ?? '14px'}\" >{{data[field.name] ?? field.alias ?? field.name}} {{field.suffix ?? ''}}</label>\r\n\r\n <spa-label *ngSwitchCase=\"'label'\" [display]=\"field.alias ?? field.name | camelToWords\" [value]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [format]=\"field.format ?? 'text'\" [suffix]=\"field.suffix\"></spa-label>\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [infoMessage]=\"field.infoMessage\" ></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [min]=\"field?.min\" [max]=\"field?.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" ></spa-date>\r\n\r\n <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [min]=\"field.min\" [max]=\"field.max\" [infoMessage]=\"field.infoMessage\" ></spa-datetime>\r\n\r\n <spa-email *ngSwitchCase=\"'email'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-email>\r\n\r\n <spa-text *ngSwitchCase=\"'password'\" [format]=\"'password'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionValue]=\"field.optionValue ?? 'value'\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-text>\r\n\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n $implicit: field,\r\n field: field,\r\n data: data,\r\n testReadOnly: testReadOnly.bind(this),\r\n selectChanged: selectChanged.bind(this)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <spa-multi-select *ngSwitchCase=\"'multi-select'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\">\r\n </spa-multi-select>\r\n\r\n <spa-multi-text *ngSwitchCase=\"'multi-text'\" [strict]=\"field.strict\" [display]=\"field.alias ?? field.name | camelToWords\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\"></spa-multi-text>\r\n\r\n\r\n\r\n <ng-container *ngSwitchCase=\"'composite'\">\r\n <div class=\"composite-field-container\">\r\n <div class=\"composite-field-group\">\r\n <ng-container *ngFor=\"let subfield of getVisibleSubfields(field)\">\r\n <ng-container [ngSwitch]=\"subfield.type\">\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [infoMessage]=\"subfield.infoMessage\" ></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" ></spa-date>\r\n\r\n <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [infoMessage]=\"subfield.infoMessage\" ></spa-datetime>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n $implicit: field,\r\n field: field,\r\n data: data,\r\n testReadOnly: testReadOnly.bind(this),\r\n selectChanged: selectChanged.bind(this)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <spa-text *ngSwitchDefault [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [options]=\"subfield.options\" [optionDisplay]=\"subfield.optionDisplay ?? 'name'\" [optionValue]=\"subfield.optionValue ?? 'value'\" [rows]=\"subfield.rows\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\" [loadAction]=\"subfield.loadAction\"></spa-text>\r\n\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <spa-text *ngSwitchDefault [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\"></spa-text>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"span-col-center\" *ngIf=\"config.button\">\r\n <button mat-raised-button color=\"primary\" (click)=\"buttonClicked()\" cdkFocusInitial>{{buttonDisplay}}</button>\r\n </div>\r\n\r\n\r\n</div>\r\n", styles: [".title{margin-top:1em;font-size:larger;font-weight:300}.composite-field-group{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.TextComponent, selector: "spa-text", inputs: ["appearance", "readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "copyContent", "clearContent", "options", "optionDisplay", "optionValue", "loadAction", "required", "min", "max", "regex", "suffix", "infoMessage"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "component", type: i7.CheckComponent, selector: "spa-check", inputs: ["readonly", "display", "value", "infoMessage"], outputs: ["valueChange", "click", "check", "uncheck", "infoClick"] }, { kind: "component", type: i8.DateComponent, selector: "spa-date", inputs: ["required", "min", "max", "readonly", "hint", "value", "display", "placeholder", "width", "infoMessage"], outputs: ["valueChange", "infoClick"] }, { kind: "component", type: i9.DatetimeComponent, selector: "spa-datetime", inputs: ["display", "value", "readonly", "width", "min", "max", "infoMessage"], outputs: ["valueChange", "infoClick"] }, { kind: "component", type: i10.LabelComponent, selector: "spa-label", inputs: ["display", "value", "format", "suffix"] }, { kind: "component", type: i11.MoneyComponent, selector: "spa-money", inputs: ["readonly", "hint", "display", "placeholder", "value", "width", "currency", "required", "min", "max", "infoMessage", "copyContent", "clearContent", "suffix"], outputs: ["valueChange", "leave", "enterPress", "infoClick"] }, { kind: "component", type: i12.AttachComponent, selector: "spa-attach", inputs: ["fileOptions", "message", "files", "enableUpload"], outputs: ["filesChange", "upload"] }, { kind: "component", type: i13.NumberComponent, selector: "spa-number", inputs: ["readonly", "hint", "display", "placeholder", "value", "width", "required", "min", "max", "step", "suffix", "infoMessage", "copyContent", "clearContent"], outputs: ["valueChange", "leave", "enterPress", "infoClick"] }, { kind: "component", type: i14.ViewerComponent, selector: "spa-viewer", inputs: ["fileAction", "path", "folderName", "fileNames", "removable", "display", "title"], outputs: ["remove"] }, { kind: "component", type: i15.EmailComponent, selector: "spa-email", inputs: ["display", "value", "readonly", "required", "hint", "suffix", "infoMessage", "copyContent", "clearContent", "options", "optionValue"], outputs: ["valueChange"] }, { kind: "component", type: i16.MultiTextComponent, selector: "spa-multi-text", inputs: ["display", "value", "readonly", "required", "hint", "strict", "suffix", "infoMessage", "copyContent", "clearContent", "options", "optionDisplay", "optionValue", "loadAction"], outputs: ["valueChange", "hoverChange"] }, { kind: "component", type: i17.MultiSelectComponent, selector: "spa-multi-select", inputs: ["display", "value", "readonly", "required", "hint", "options", "optionDisplay", "optionValue", "infoMessage", "copyContent", "clearContent", "nullable", "placeholder", "width", "suffix", "loadAction"], outputs: ["valueChange", "hoverChange"] }, { kind: "pipe", type: i18.CamelToWordsPipe, name: "camelToWords" }] });
246
+ FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FormComponent, selector: "spa-form", inputs: { files: "files", data: "data", config: "config" }, outputs: { buttonClick: "buttonClick", inputChange: "inputChange" }, queries: [{ propertyName: "dynamicSelectTemplate", first: true, predicate: ["dynamicSelect"], descendants: true }], ngImport: i0, template: "\r\n<div [ngClass]=\"multiColumn ? 'tin-grid' : 'tin-col'\" >\r\n\r\n <div *ngIf=\"!hasAccess\" class=\"tin-center\">\r\n <p><em>Access Restricted</em></p>\r\n </div>\r\n\r\n <div [ngClass]=\"field.span || field.type =='section' || field.type =='file' || field.type =='file-view' ? 'span-col' : ''\" *ngFor=\"let field of getVisibleFields()\">\r\n\r\n <ng-container>\r\n\r\n <ng-container [ngSwitch]=\"field.type\" class=\"highlight\">\r\n\r\n <div *ngSwitchCase=\"'section'\" class=\"title d-flex align-items-center\" (click)=\"toggleSection(field)\" style=\"cursor: pointer;\">\r\n <label style=\"font-size: larger;margin-right: 10px;\">{{field.alias ?? field.name | camelToWords}}</label>\r\n <mat-icon *ngIf=\"field.infoMessage\" (click)=\"onInfoClick($event, field.infoMessage)\" style=\"color: steelblue; font-size: 14px;\">info</mat-icon>\r\n <!-- <button mat-icon-button class=\"info-icon-button\" matTooltip=\"Info\" matTooltipPosition=\"above\">\r\n\r\n </button> -->\r\n <mat-icon *ngIf=\"hasSectionFields(field.name)\">{{shouldSectionCollapse(field) ? 'expand_more' : 'expand_less'}}</mat-icon>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <div class=\"mt-1 mb-2\" *ngIf=\"config.mode !='view'\">\r\n <spa-attach [message]=\"field.alias ?? 'Drag and Drop files here'\" [(files)]=\"files\" [fileOptions]=\"field.fileOptions\"></spa-attach>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'file-view'\">\r\n <div class=\"mt-1 mb-2\" *ngIf=\"config.mode && config.mode !='create'\">\r\n <spa-viewer [fileAction]=\"field.loadAction\" [path]=\"field.path\" [folderName]=\"data[field.keyField]\" ></spa-viewer>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <label *ngSwitchCase=\"'blank'\"></label>\r\n\r\n <label *ngSwitchCase=\"'string'\" [ngStyle]=\"{'font-size':field.size ?? '14px'}\" >{{data[field.name] ?? field.alias ?? field.name}} {{field.suffix ?? ''}}</label>\r\n\r\n <spa-label *ngSwitchCase=\"'label'\" [display]=\"field.alias ?? field.name | camelToWords\" [value]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [format]=\"field.format ?? 'text'\" [suffix]=\"field.suffix\"></spa-label>\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [infoMessage]=\"field.infoMessage\" ></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [min]=\"field?.min\" [max]=\"field?.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" ></spa-date>\r\n\r\n <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [min]=\"field.min\" [max]=\"field.max\" [infoMessage]=\"field.infoMessage\" ></spa-datetime>\r\n\r\n <spa-email *ngSwitchCase=\"'email'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-email>\r\n\r\n <spa-text *ngSwitchCase=\"'password'\" [format]=\"'password'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionValue]=\"field.optionValue ?? 'value'\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-text>\r\n\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n $implicit: field,\r\n field: field,\r\n data: data,\r\n testReadOnly: testReadOnly.bind(this),\r\n selectChanged: selectChanged.bind(this)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <spa-multi-select *ngSwitchCase=\"'multi-select'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\">\r\n </spa-multi-select>\r\n\r\n <spa-multi-text *ngSwitchCase=\"'multi-text'\" [strict]=\"field.strict\" [display]=\"field.alias ?? field.name | camelToWords\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\"></spa-multi-text>\r\n\r\n\r\n\r\n <ng-container *ngSwitchCase=\"'composite'\">\r\n <div class=\"composite-field-container\">\r\n <div class=\"composite-field-group\">\r\n <ng-container *ngFor=\"let subfield of getVisibleSubfields(field)\">\r\n <ng-container [ngSwitch]=\"subfield.type\">\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [infoMessage]=\"subfield.infoMessage\" ></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" ></spa-date>\r\n\r\n <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [infoMessage]=\"subfield.infoMessage\" ></spa-datetime>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n $implicit: field,\r\n field: field,\r\n data: data,\r\n testReadOnly: testReadOnly.bind(this),\r\n selectChanged: selectChanged.bind(this)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <spa-text *ngSwitchDefault [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [options]=\"subfield.options\" [optionDisplay]=\"subfield.optionDisplay ?? 'name'\" [optionValue]=\"subfield.optionValue ?? 'value'\" [rows]=\"subfield.rows\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\" [loadAction]=\"subfield.loadAction\"></spa-text>\r\n\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <spa-text *ngSwitchDefault [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\"></spa-text>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"span-col-center\" *ngIf=\"config.button\">\r\n <button mat-raised-button color=\"primary\" (click)=\"buttonClicked()\" cdkFocusInitial>{{buttonDisplay}}</button>\r\n </div>\r\n\r\n\r\n</div>\r\n", styles: [".title{margin-top:1em;font-size:larger;font-weight:300}.composite-field-group{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.TextComponent, selector: "spa-text", inputs: ["appearance", "readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "copyContent", "clearContent", "options", "optionDisplay", "optionValue", "loadAction", "required", "min", "max", "regex", "suffix", "infoMessage"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "component", type: i8.CheckComponent, selector: "spa-check", inputs: ["readonly", "display", "value", "infoMessage"], outputs: ["valueChange", "click", "check", "uncheck", "infoClick"] }, { kind: "component", type: i9.DateComponent, selector: "spa-date", inputs: ["required", "min", "max", "readonly", "hint", "value", "display", "placeholder", "width", "infoMessage"], outputs: ["valueChange", "infoClick"] }, { kind: "component", type: i10.DatetimeComponent, selector: "spa-datetime", inputs: ["display", "value", "readonly", "width", "min", "max", "infoMessage"], outputs: ["valueChange", "infoClick"] }, { kind: "component", type: i11.LabelComponent, selector: "spa-label", inputs: ["display", "value", "format", "suffix"] }, { kind: "component", type: i12.MoneyComponent, selector: "spa-money", inputs: ["readonly", "hint", "display", "placeholder", "value", "width", "currency", "required", "min", "max", "infoMessage", "copyContent", "clearContent", "suffix"], outputs: ["valueChange", "leave", "enterPress", "infoClick"] }, { kind: "component", type: i13.AttachComponent, selector: "spa-attach", inputs: ["fileOptions", "message", "files", "enableUpload"], outputs: ["filesChange", "upload"] }, { kind: "component", type: i14.NumberComponent, selector: "spa-number", inputs: ["readonly", "hint", "display", "placeholder", "value", "width", "required", "min", "max", "step", "suffix", "infoMessage", "copyContent", "clearContent"], outputs: ["valueChange", "leave", "enterPress", "infoClick"] }, { kind: "component", type: i15.ViewerComponent, selector: "spa-viewer", inputs: ["fileAction", "path", "folderName", "fileNames", "removable", "display", "title"], outputs: ["remove"] }, { kind: "component", type: i16.EmailComponent, selector: "spa-email", inputs: ["display", "value", "readonly", "required", "hint", "suffix", "infoMessage", "copyContent", "clearContent", "options", "optionValue"], outputs: ["valueChange"] }, { kind: "component", type: i17.MultiTextComponent, selector: "spa-multi-text", inputs: ["display", "value", "readonly", "required", "hint", "strict", "suffix", "infoMessage", "copyContent", "clearContent", "options", "optionDisplay", "optionValue", "loadAction"], outputs: ["valueChange", "hoverChange"] }, { kind: "component", type: i18.MultiSelectComponent, selector: "spa-multi-select", inputs: ["display", "value", "readonly", "required", "hint", "options", "optionDisplay", "optionValue", "infoMessage", "copyContent", "clearContent", "nullable", "placeholder", "width", "suffix", "loadAction"], outputs: ["valueChange", "hoverChange"] }, { kind: "pipe", type: i19.CamelToWordsPipe, name: "camelToWords" }] });
217
247
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FormComponent, decorators: [{
218
248
  type: Component,
219
- args: [{ selector: 'spa-form', template: "\r\n<div [ngClass]=\"multiColumn ? 'tin-grid' : 'tin-col'\" >\r\n\r\n <div *ngIf=\"!hasAccess\" class=\"tin-center\">\r\n <p><em>Access Restricted</em></p>\r\n </div>\r\n\r\n <div [ngClass]=\"field.span || field.type =='section' || field.type =='file' || field.type =='file-view' ? 'span-col' : ''\" *ngFor=\"let field of getVisibleFields()\">\r\n\r\n <ng-container >\r\n\r\n <ng-container [ngSwitch]=\"field.type\" class=\"highlight\">\r\n\r\n <div *ngSwitchCase=\"'section'\" class=\"title\">\r\n <label style=\"font-size: larger;\">{{field.alias ?? field.name | camelToWords}}</label>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <div class=\"mt-1 mb-2\" *ngIf=\"config.mode !='view'\">\r\n <spa-attach [message]=\"field.alias ?? 'Drag and Drop files here'\" [(files)]=\"files\" [fileOptions]=\"field.fileOptions\"></spa-attach>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'file-view'\">\r\n <div class=\"mt-1 mb-2\" *ngIf=\"config.mode && config.mode !='create'\">\r\n <spa-viewer [fileAction]=\"field.loadAction\" [path]=\"field.path\" [folderName]=\"data[field.keyField]\" ></spa-viewer>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <label *ngSwitchCase=\"'blank'\"></label>\r\n\r\n <label *ngSwitchCase=\"'string'\" [ngStyle]=\"{'font-size':field.size ?? '14px'}\" >{{data[field.name] ?? field.alias ?? field.name}} {{field.suffix ?? ''}}</label>\r\n\r\n <spa-label *ngSwitchCase=\"'label'\" [display]=\"field.alias ?? field.name | camelToWords\" [value]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [format]=\"field.format ?? 'text'\" [suffix]=\"field.suffix\"></spa-label>\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [infoMessage]=\"field.infoMessage\" ></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [min]=\"field?.min\" [max]=\"field?.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" ></spa-date>\r\n\r\n <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [min]=\"field.min\" [max]=\"field.max\" [infoMessage]=\"field.infoMessage\" ></spa-datetime>\r\n\r\n <spa-email *ngSwitchCase=\"'email'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-email>\r\n\r\n <spa-text *ngSwitchCase=\"'password'\" [format]=\"'password'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionValue]=\"field.optionValue ?? 'value'\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-text>\r\n\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n $implicit: field,\r\n field: field,\r\n data: data,\r\n testReadOnly: testReadOnly.bind(this),\r\n selectChanged: selectChanged.bind(this)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <spa-multi-select *ngSwitchCase=\"'multi-select'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\">\r\n </spa-multi-select>\r\n\r\n <spa-multi-text *ngSwitchCase=\"'multi-text'\" [strict]=\"field.strict\" [display]=\"field.alias ?? field.name | camelToWords\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\"></spa-multi-text>\r\n\r\n\r\n\r\n <ng-container *ngSwitchCase=\"'composite'\">\r\n <div class=\"composite-field-container\">\r\n <div class=\"composite-field-group\">\r\n <ng-container *ngFor=\"let subfield of getVisibleSubfields(field)\">\r\n <ng-container [ngSwitch]=\"subfield.type\">\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [infoMessage]=\"subfield.infoMessage\" ></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" ></spa-date>\r\n\r\n <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [infoMessage]=\"subfield.infoMessage\" ></spa-datetime>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n $implicit: field,\r\n field: field,\r\n data: data,\r\n testReadOnly: testReadOnly.bind(this),\r\n selectChanged: selectChanged.bind(this)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <spa-text *ngSwitchDefault [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [options]=\"subfield.options\" [optionDisplay]=\"subfield.optionDisplay ?? 'name'\" [optionValue]=\"subfield.optionValue ?? 'value'\" [rows]=\"subfield.rows\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\" [loadAction]=\"subfield.loadAction\"></spa-text>\r\n\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <spa-text *ngSwitchDefault [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\"></spa-text>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"span-col-center\" *ngIf=\"config.button\">\r\n <button mat-raised-button color=\"primary\" (click)=\"buttonClicked()\" cdkFocusInitial>{{buttonDisplay}}</button>\r\n </div>\r\n\r\n\r\n</div>\r\n", styles: [".title{margin-top:1em;font-size:larger;font-weight:300}.composite-field-group{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}\n"] }]
249
+ args: [{ selector: 'spa-form', template: "\r\n<div [ngClass]=\"multiColumn ? 'tin-grid' : 'tin-col'\" >\r\n\r\n <div *ngIf=\"!hasAccess\" class=\"tin-center\">\r\n <p><em>Access Restricted</em></p>\r\n </div>\r\n\r\n <div [ngClass]=\"field.span || field.type =='section' || field.type =='file' || field.type =='file-view' ? 'span-col' : ''\" *ngFor=\"let field of getVisibleFields()\">\r\n\r\n <ng-container>\r\n\r\n <ng-container [ngSwitch]=\"field.type\" class=\"highlight\">\r\n\r\n <div *ngSwitchCase=\"'section'\" class=\"title d-flex align-items-center\" (click)=\"toggleSection(field)\" style=\"cursor: pointer;\">\r\n <label style=\"font-size: larger;margin-right: 10px;\">{{field.alias ?? field.name | camelToWords}}</label>\r\n <mat-icon *ngIf=\"field.infoMessage\" (click)=\"onInfoClick($event, field.infoMessage)\" style=\"color: steelblue; font-size: 14px;\">info</mat-icon>\r\n <!-- <button mat-icon-button class=\"info-icon-button\" matTooltip=\"Info\" matTooltipPosition=\"above\">\r\n\r\n </button> -->\r\n <mat-icon *ngIf=\"hasSectionFields(field.name)\">{{shouldSectionCollapse(field) ? 'expand_more' : 'expand_less'}}</mat-icon>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <div class=\"mt-1 mb-2\" *ngIf=\"config.mode !='view'\">\r\n <spa-attach [message]=\"field.alias ?? 'Drag and Drop files here'\" [(files)]=\"files\" [fileOptions]=\"field.fileOptions\"></spa-attach>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'file-view'\">\r\n <div class=\"mt-1 mb-2\" *ngIf=\"config.mode && config.mode !='create'\">\r\n <spa-viewer [fileAction]=\"field.loadAction\" [path]=\"field.path\" [folderName]=\"data[field.keyField]\" ></spa-viewer>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <label *ngSwitchCase=\"'blank'\"></label>\r\n\r\n <label *ngSwitchCase=\"'string'\" [ngStyle]=\"{'font-size':field.size ?? '14px'}\" >{{data[field.name] ?? field.alias ?? field.name}} {{field.suffix ?? ''}}</label>\r\n\r\n <spa-label *ngSwitchCase=\"'label'\" [display]=\"field.alias ?? field.name | camelToWords\" [value]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [format]=\"field.format ?? 'text'\" [suffix]=\"field.suffix\"></spa-label>\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [infoMessage]=\"field.infoMessage\" ></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [min]=\"field?.min\" [max]=\"field?.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" ></spa-date>\r\n\r\n <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [readonly]=\"testReadOnly(field)\" [min]=\"field.min\" [max]=\"field.max\" [infoMessage]=\"field.infoMessage\" ></spa-datetime>\r\n\r\n <spa-email *ngSwitchCase=\"'email'\" [display]=\"field.alias ?? field.name | camelToWords\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-email>\r\n\r\n <spa-text *ngSwitchCase=\"'password'\" [format]=\"'password'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionValue]=\"field.optionValue ?? 'value'\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-text>\r\n\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n $implicit: field,\r\n field: field,\r\n data: data,\r\n testReadOnly: testReadOnly.bind(this),\r\n selectChanged: selectChanged.bind(this)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <spa-multi-select *ngSwitchCase=\"'multi-select'\" [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field, data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\">\r\n </spa-multi-select>\r\n\r\n <spa-multi-text *ngSwitchCase=\"'multi-text'\" [strict]=\"field.strict\" [display]=\"field.alias ?? field.name | camelToWords\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\"></spa-multi-text>\r\n\r\n\r\n\r\n <ng-container *ngSwitchCase=\"'composite'\">\r\n <div class=\"composite-field-container\">\r\n <div class=\"composite-field-group\">\r\n <ng-container *ngFor=\"let subfield of getVisibleSubfields(field)\">\r\n <ng-container [ngSwitch]=\"subfield.type\">\r\n\r\n <spa-number *ngSwitchCase=\"'number'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\"></spa-number>\r\n\r\n <spa-money *ngSwitchCase=\"'money'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\"></spa-money>\r\n\r\n <spa-check *ngSwitchCase=\"'checkbox'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [infoMessage]=\"subfield.infoMessage\" ></spa-check>\r\n\r\n <spa-date *ngSwitchCase=\"'date'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" ></spa-date>\r\n\r\n <spa-datetime *ngSwitchCase=\"'datetime'\" [display]=\"subfield.alias ?? subfield.name | camelToWords\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [min]=\"subfield.min\" [max]=\"subfield.max\" [infoMessage]=\"subfield.infoMessage\" ></spa-datetime>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ng-container *ngTemplateOutlet=\"dynamicSelectTemplate; context: {\r\n $implicit: field,\r\n field: field,\r\n data: data,\r\n testReadOnly: testReadOnly.bind(this),\r\n selectChanged: selectChanged.bind(this)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <spa-text *ngSwitchDefault [display]=\"subfield.alias ?? subfield.name | camelToWords\" [width]=\"subfield.width\" [options]=\"subfield.options\" [optionDisplay]=\"subfield.optionDisplay ?? 'name'\" [optionValue]=\"subfield.optionValue ?? 'value'\" [rows]=\"subfield.rows\" [(value)]=\"data[subfield.name]\" (valueChange)=\"inputChanged(subfield, $event)\" [required]=\"subfield.required\" [min]=\"subfield.min\" [max]=\"subfield.max\" [readonly]=\"testReadOnly(field) || testReadOnly(subfield)\" [hint]=\"subfield.hint\" [infoMessage]=\"subfield.infoMessage\" [suffix]=\"subfield.suffix\" [copyContent]=\"subfield.copyContent\" [clearContent]=\"subfield.clearContent\" [loadAction]=\"subfield.loadAction\"></spa-text>\r\n\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <spa-text *ngSwitchDefault [display]=\"field.alias ?? field.name | camelToWords\" [width]=\"field.width\" [options]=\"field.options\" [optionDisplay]=\"field.optionDisplay ?? 'name'\" [optionValue]=\"field.optionValue ?? 'value'\" [rows]=\"field.rows\" [(value)]=\"data[field.name]\" (valueChange)=\"inputChanged(field,data[field.name])\" [required]=\"field.required\" [min]=\"field.min\" [max]=\"field.max\" [readonly]=\"testReadOnly(field)\" [hint]=\"field.hint\" [infoMessage]=\"field.infoMessage\" [suffix]=\"field.suffix\" [copyContent]=\"field.copyContent\" [clearContent]=\"field.clearContent\" [loadAction]=\"field.loadAction\"></spa-text>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"span-col-center\" *ngIf=\"config.button\">\r\n <button mat-raised-button color=\"primary\" (click)=\"buttonClicked()\" cdkFocusInitial>{{buttonDisplay}}</button>\r\n </div>\r\n\r\n\r\n</div>\r\n", styles: [".title{margin-top:1em;font-size:larger;font-weight:300}.composite-field-group{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}\n"] }]
220
250
  }], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.DataServiceLib }, { type: i3.AuthService }]; }, propDecorators: { dynamicSelectTemplate: [{
221
251
  type: ContentChild,
222
252
  args: ['dynamicSelect']
@@ -231,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
231
261
  }], inputChange: [{
232
262
  type: Output
233
263
  }] } });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBRTFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVN2QyxNQUFNLE9BQU8sYUFBYTtJQUV4QixZQUFvQixjQUE4QixFQUFVLFdBQTJCLEVBQVUsV0FBd0I7UUFBckcsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUE4R3pILGNBQVMsR0FBRyxLQUFLLENBQUM7UUFJVCxVQUFLLEdBQVUsRUFBRSxDQUFDO1FBRTNCLGtCQUFhLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLGlCQUFZLEdBQWEsS0FBSyxDQUFDO1FBQy9CLGdCQUFXLEdBQWEsS0FBSyxDQUFDO1FBTXBCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUE3SGtGLENBQUM7SUFFOUgsUUFBUTtRQUVOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0YsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsd0VBQXdFO1lBQ3hFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1lBQ3pELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtZQUN2RCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRWpDLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQixJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtnQkFDbkUsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBUSxFQUFFLENBQUMsQ0FBQztnQkFFdEQsK0JBQStCO2dCQUMvQixLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDMUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7b0JBRTNCLGdEQUFnRDtvQkFDaEQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUM3RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNyQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFHSCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUE7U0FDM0M7YUFBSTtZQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1NBQzFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUM7WUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDakQ7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQTtRQUV4RCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3RHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBRTdDO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUd6RCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMvQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQy9ELElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BDO2lCQUFJO2dCQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdEM7UUFFSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUduQyxDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDakQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO3dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUMzRDtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBYTtRQUMvQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0csQ0FBQztJQUdELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3hILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBWTtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFzQkQsYUFBYSxDQUFDLEtBQVk7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUUsQ0FBQTtJQUNsRCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWEsRUFBRSxLQUFLO1FBRS9CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtRQUVwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBR25DLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUM7WUFDakQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ25DLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ3hILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFFSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsZUFBdUI7UUFFeEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLGVBQWUsQ0FBQyxDQUFBO1FBQ3hFLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUVqQixtQkFBbUI7WUFHbkIsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFDO2dCQUN0QixLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7YUFDM0g7aUJBQUk7Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO2FBQ3hDO1NBRUY7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsS0FBWTtRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRTlCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUF3QixFQUFFLEVBQUU7WUFDaEYsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUV2QixLQUFLLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxhQUFhO1FBRVgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRWhDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPO1NBQ1I7UUFFRCxZQUFZO1FBQ1osSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFDO1lBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDL0IsT0FBTztTQUNSO1FBSUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUcsUUFBUSxFQUFFO1lBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDbkQsT0FBTztTQUNSO1FBR0QsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFDO1lBRWpCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM1RSxJQUFJLE1BQU0sSUFBSSxLQUFLLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7aUJBQ3pCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FFSjthQUFJO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUN6QjtJQUtILENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYztRQUV4QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFBRSxPQUFNO1FBRTFCLElBQUksT0FBTyxDQUFDO1FBRVosSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBQztZQUUzQixJQUFJLFFBQVEsR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0RTtZQUVELFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFHbkQsT0FBTyxHQUFHLFFBQVEsQ0FBQTtTQUNuQjthQUFJO1lBRUgsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7U0FDcEI7UUFLRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3pFLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO1lBRXpCLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFFdkIsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDekQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3hDO2dCQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2lCQUNqQjthQUdGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDNUQ7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO0lBTVgsQ0FBQzs7MEdBcFJVLGFBQWE7OEZBQWIsYUFBYSxxU0NkMUIsMnhXQTBIQTsyRkQ1R2EsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxVQUFVOzRKQWtIVyxxQkFBcUI7c0JBQW5ELFlBQVk7dUJBQUMsZUFBZTtnQkFNcEIsS0FBSztzQkFBYixLQUFLO2dCQVFHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29uZmlnLCBGaWVsZCwgQnV0dG9uLCBBcGlSZXNwb25zZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RpbkNvcmUnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdGhpcy5oYXNBY2Nlc3MgPSBDb3JlLmhhc0Zvcm1BY2Nlc3ModGhpcy5jb25maWcsIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWUpO1xyXG5cclxuICAgIGlmICghdGhpcy5oYXNBY2Nlc3MpIHtcclxuICAgICAgLy8gdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCgnQWNjZXNzIGRlbmllZCcpOyAvLyBPcHRpb25hbCAtIG5vdGlmeSB1c2VyXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmZpZWxkcyl7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgQ29uZmlndXJlIEZvcm0gRmllbGRzXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZGF0YSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIENvbmZpZ3VyZSBGb3JtIERhdGFcIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmllbGRzID0gdGhpcy5jb25maWcuZmllbGRzO1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgQmVoYXZpb3JTdWJqZWN0cyBmb3IgZmllbGRzIHdpdGggbG9hZEFjdGlvbnNcclxuICAgIHRoaXMuZmllbGRzPy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLmxvYWRBY3Rpb24gJiYgIWZpZWxkLm9wdGlvbnNTdWJqZWN0ICYmICFmaWVsZC5tYXN0ZXJGaWVsZCkge1xyXG4gICAgICAgIGZpZWxkLm9wdGlvbnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG5cclxuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gb3B0aW9ucyBjaGFuZ2VzXHJcbiAgICAgICAgZmllbGQub3B0aW9uc1N1YmplY3Quc3Vic2NyaWJlKG5ld09wdGlvbnMgPT4ge1xyXG4gICAgICAgICAgZmllbGQub3B0aW9ucyA9IG5ld09wdGlvbnM7XHJcblxyXG4gICAgICAgICAgLy8gVXBkYXRlIGNoaWxkIGZpZWxkcyB0aGF0IGRlcGVuZCBvbiB0aGlzIGZpZWxkXHJcbiAgICAgICAgICBpZiAodGhpcy5jaGlsZEZpZWxkcz8uc29tZSh4ID0+IHgubWFzdGVyRmllbGQgPT09IGZpZWxkLm5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hpbGRPcHRpb25zKGZpZWxkLm5hbWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLm11bHRpQ29sdW1uKXtcclxuICAgICAgdGhpcy5tdWx0aUNvbHVtbiA9IHRoaXMuY29uZmlnLm11bHRpQ29sdW1uXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5tdWx0aUNvbHVtbiA9IHRoaXMuZmllbGRzLmxlbmd0aCA+IDJcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWc/LmJ1dHRvbj8uZGlzcGxheSl7XHJcbiAgICAgIHRoaXMuYnV0dG9uRGlzcGxheSA9IHRoaXMuY29uZmlnLmJ1dHRvbi5kaXNwbGF5O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsZUZpZWxkID0gdGhpcy5maWVsZHMuZmluZCh4ID0+IHgudHlwZSA9PSAnZmlsZScpXHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnPy5idXR0b24/LmFjdGlvbiAmJiB0aGlzLmZpbGVGaWVsZCB8fCB0aGlzLmNvbmZpZz8uYnV0dG9uPy5hY3Rpb24udXJsLmluY2x1ZGVzKFwiL2Zvcm1cIikpIHtcclxuICAgICAgdGhpcy5jb25maWcuYnV0dG9uLmFjdGlvbi5pc0Zvcm1EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGlsZEZpZWxkcyA9IHRoaXMuZmllbGRzLmZpbHRlcih4ID0+IHgubWFzdGVyRmllbGQpXHJcblxyXG5cclxuICAgIHRoaXMuY2hpbGRGaWVsZHMuZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgIGxldCBtYXN0ZXIgPSB0aGlzLmZpZWxkcy5maW5kKHggPT4geC5uYW1lID09IGNoaWxkLm1hc3RlckZpZWxkKVxyXG4gICAgICBpZiAoY2hpbGQubG9hZEFjdGlvbikge1xyXG4gICAgICAgIHRoaXMubG9hZENoaWxkTWFzdGVyT3B0aW9ucyhjaGlsZCk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2hpbGRPcHRpb25zKG1hc3Rlci5uYW1lKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoZmllbGQubG9hZEFjdGlvbikge1xyXG4gICAgICAgIHRoaXMubG9hZENoaWxkTWFzdGVyT3B0aW9ucyhmaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvc2l0ZUZpZWxkcygpO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplQ29tcG9zaXRlRmllbGRzKCkge1xyXG4gICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY29tcG9zaXRlJyAmJiBmaWVsZC5zdWJmaWVsZHMpIHtcclxuICAgICAgICBmaWVsZC5zdWJmaWVsZHMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW3N1YmZpZWxkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhW3N1YmZpZWxkLm5hbWVdID0gQ29yZS5nZXRJbml0aWFsVmFsdWUoc3ViZmllbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFZpc2libGVTdWJmaWVsZHMoZmllbGQgOiBGaWVsZCl7XHJcbiAgICByZXR1cm4gQ29yZS5nZXRWaXNpYmxlU3ViZmllbGRzKHRoaXMuY29uZmlnLCB0aGlzLmRhdGEsIGZpZWxkLCB0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRSb2xlU291cmNlLnZhbHVlKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRWaXNpYmxlRmllbGRzKCl7XHJcbiAgICByZXR1cm4gdGhpcy5maWVsZHM/LmZpbHRlcih4ID0+IENvcmUudGVzdFZpc2libGUodGhpcy5jb25maWcsIHRoaXMuZGF0YSwgeCwgdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZSkpXHJcbiAgfVxyXG5cclxuICB0ZXN0UmVhZE9ubHkoZmllbGQ6IEZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gQ29yZS50ZXN0UmVhZE9ubHkodGhpcy5jb25maWcsIHRoaXMuZGF0YSwgZmllbGQpO1xyXG4gIH1cclxuXHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2R5bmFtaWNTZWxlY3QnKSBkeW5hbWljU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGhhc0FjY2VzcyA9IGZhbHNlO1xyXG4gIGZpbGVOYW1lc1xyXG4gIGZpbGVGaWVsZDogRmllbGQ7XHJcbiAgZmlsZVZpZXdGaWVsZDogRmllbGQ7XHJcbiAgQElucHV0KCkgZmlsZXM6IGFueVtdID0gW107XHJcbiAgZmllbGRzOiBGaWVsZFtdO1xyXG4gIGJ1dHRvbkRpc3BsYXkgPSBcIlN1Ym1pdFwiO1xyXG4gIGlzUHJvY2Vzc2luZyA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtdWx0aUNvbHVtbiA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY2hpbGRGaWVsZHMgOiBGaWVsZFtdO1xyXG5cclxuICBASW5wdXQoKSBkYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIEBPdXRwdXQoKSBidXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHNlbGVjdENoYW5nZWQoZmllbGQ6IEZpZWxkKXtcclxuICAgIHRoaXMuaW5wdXRDaGFuZ2VkKGZpZWxkLCB0aGlzLmRhdGFbZmllbGQubmFtZV0gKVxyXG4gIH1cclxuXHJcbiAgaW5wdXRDaGFuZ2VkKGZpZWxkIDogRmllbGQsIHZhbHVlKXtcclxuXHJcbiAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZmllbGQsIHZhbHVlOiB2YWx1ZX0pXHJcblxyXG4gICAgdGhpcy51cGRhdGVDaGlsZE9wdGlvbnMoZmllbGQubmFtZSlcclxuXHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLm1vZGUgPT0gJ2NyZWF0ZScgJiYgZmllbGQuY2hpbGRyZW4pe1xyXG4gICAgICBmaWVsZC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkQ29uZmlnID0+IHtcclxuICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLmZpZWxkcy5maW5kKHggPT4geC5uYW1lID09IGNoaWxkQ29uZmlnLmNoaWxkRmllbGQpXHJcbiAgICAgICAgdGhpcy5kYXRhW2NoaWxkLm5hbWVdID0gZmllbGQub3B0aW9ucy5maW5kKHggPT4geFtmaWVsZC5vcHRpb25WYWx1ZSA/PyAndmFsdWUnXSA9PSB2YWx1ZSlbY2hpbGRDb25maWcuY2hpbGRWYWx1ZUZpZWxkXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB1cGRhdGVDaGlsZE9wdGlvbnMobWFzdGVyRmllbGROYW1lOiBzdHJpbmcpe1xyXG5cclxuICAgIGxldCBjaGlsZCA9IHRoaXMuY2hpbGRGaWVsZHMuZmluZCh4ID0+IHgubWFzdGVyRmllbGQgPT0gbWFzdGVyRmllbGROYW1lKVxyXG4gICAgaWYgKGNoaWxkICE9IG51bGwpIHtcclxuXHJcbiAgICAgIC8vY3VycmVudCBpcyBtYXN0ZXJcclxuXHJcblxyXG4gICAgICBpZiAoY2hpbGQubWFzdGVyT3B0aW9ucyl7XHJcbiAgICAgICAgY2hpbGQub3B0aW9ucyA9IGNoaWxkLm1hc3Rlck9wdGlvbnMuZmlsdGVyKHggPT4geFtjaGlsZC5tYXN0ZXJPcHRpb25WYWx1ZSA/PyAnbWFzdGVyVmFsdWUnXSA9PSB0aGlzLmRhdGFbbWFzdGVyRmllbGROYW1lXSlcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXN0ZXIgT3B0aW9ucyBub3QgZm91bmRcIilcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZENoaWxkTWFzdGVyT3B0aW9ucyhjaGlsZDogRmllbGQpIHtcclxuICAgIGlmICghY2hpbGQubG9hZEFjdGlvbikgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShjaGlsZC5sb2FkQWN0aW9uKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG5cclxuICAgICAgICBjaGlsZC5tYXN0ZXJPcHRpb25zID0gYXBpUmVzcG9uc2UuZGF0YTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkT3B0aW9ucyhjaGlsZC5tYXN0ZXJGaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGJ1dHRvbkNsaWNrZWQoKXtcclxuXHJcbiAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQodGhpcy5kYXRhKTtcclxuXHJcbiAgICBsZXQgYnV0dG9uID0gdGhpcy5jb25maWcuYnV0dG9uO1xyXG5cclxuICAgIGlmICghYnV0dG9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL3ZhbGlkYXRpb25cclxuICAgIGxldCByZXNwID0gQ29yZS52YWxpZGF0ZU9iamVjdCh0aGlzLmdldFZpc2libGVGaWVsZHMoKSx0aGlzLmRhdGEpO1xyXG4gICAgaWYgKHJlc3AgIT0gJycpe1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KHJlc3ApXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEgJiYgdGhpcy5maWxlRmllbGQ/LnJlcXVpcmVkICYmIHRoaXMuY29uZmlnLm1vZGUgPT0nY3JlYXRlJykge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGF0dGFjaCBmaWxlKHMpXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmIChidXR0b24uY29uZmlybSl7XHJcblxyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYCR7YnV0dG9uLmNvbmZpcm0ubWVzc2FnZX1gKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT0gXCJ5ZXNcIikge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzQ2FsbChidXR0b24pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5wcm9jZXNzQ2FsbChidXR0b24pXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0NhbGwoYnV0dG9uOiBCdXR0b24pe1xyXG5cclxuICAgIGlmICghYnV0dG9uLmFjdGlvbikgcmV0dXJuXHJcblxyXG4gICAgbGV0IGRhdGFPdXQ7XHJcblxyXG4gICAgaWYgKGJ1dHRvbi5hY3Rpb24uaXNGb3JtRGF0YSl7XHJcblxyXG4gICAgICBsZXQgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChgdXBsb2FkRmlsZSR7aX1gLCB0aGlzLmZpbGVzW2ldLCB0aGlzLmZpbGVzW2ldLm5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJkYXRhXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO1xyXG5cclxuXHJcbiAgICAgIGRhdGFPdXQgPSBmb3JtRGF0YVxyXG4gICAgfWVsc2V7XHJcblxyXG4gICAgICBkYXRhT3V0ID0gdGhpcy5kYXRhXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSB0cnVlXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYnV0dG9uLmFjdGlvbiwgZGF0YU91dCkuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlXHJcblxyXG4gICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG5cclxuICAgICAgICBpZiAoYnV0dG9uLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSkge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChidXR0b24uYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlN1Ym1pdHRlZFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXNldCkge1xyXG4gICAgICAgICAgQ29yZS5yZXNldE9iamVjdCh0aGlzLmZpZWxkcywgdGhpcy5kYXRhKVxyXG4gICAgICAgICAgdGhpcy5maWxlcyA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzRm9ybSgpe1xyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbiIsIlxyXG48ZGl2IFtuZ0NsYXNzXT1cIm11bHRpQ29sdW1uID8gJ3Rpbi1ncmlkJyA6ICd0aW4tY29sJ1wiID5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIiFoYXNBY2Nlc3NcIiBjbGFzcz1cInRpbi1jZW50ZXJcIj5cclxuICAgIDxwPjxlbT5BY2Nlc3MgUmVzdHJpY3RlZDwvZW0+PC9wPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cImZpZWxkLnNwYW4gfHwgZmllbGQudHlwZSA9PSdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09J2ZpbGUnIHx8IGZpZWxkLnR5cGUgPT0nZmlsZS12aWV3JyAgPyAnc3Bhbi1jb2wnIDogJydcIiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZ2V0VmlzaWJsZUZpZWxkcygpXCI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAgPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmllbGQudHlwZVwiIGNsYXNzPVwiaGlnaGxpZ2h0XCI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidzZWN0aW9uJ1wiIGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZTogbGFyZ2VyO1wiPnt7ZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc319PC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBtYi0yXCIgKm5nSWY9XCJjb25maWcubW9kZSAhPSd2aWV3J1wiPlxyXG4gICAgICAgICAgICA8c3BhLWF0dGFjaCBbbWVzc2FnZV09XCJmaWVsZC5hbGlhcyA/PyAnRHJhZyBhbmQgRHJvcCBmaWxlcyBoZXJlJ1wiIFsoZmlsZXMpXT1cImZpbGVzXCIgW2ZpbGVPcHRpb25zXT1cImZpZWxkLmZpbGVPcHRpb25zXCI+PC9zcGEtYXR0YWNoPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlLXZpZXcnXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBtYi0yXCIgKm5nSWY9XCJjb25maWcubW9kZSAmJiBjb25maWcubW9kZSAhPSdjcmVhdGUnXCI+XHJcbiAgICAgICAgICAgIDxzcGEtdmlld2VyIFtmaWxlQWN0aW9uXT1cImZpZWxkLmxvYWRBY3Rpb25cIiBbcGF0aF09XCJmaWVsZC5wYXRoXCIgW2ZvbGRlck5hbWVdPVwiZGF0YVtmaWVsZC5rZXlGaWVsZF1cIiA+PC9zcGEtdmlld2VyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICA8bGFiZWwgKm5nU3dpdGNoQ2FzZT1cIidibGFuaydcIj48L2xhYmVsPlxyXG5cclxuICAgICAgICA8bGFiZWwgKm5nU3dpdGNoQ2FzZT1cIidzdHJpbmcnXCIgW25nU3R5bGVdPVwieydmb250LXNpemUnOmZpZWxkLnNpemUgPz8gJzE0cHgnfVwiID57e2RhdGFbZmllbGQubmFtZV0gPz8gZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZX19IHt7ZmllbGQuc3VmZml4ID8/ICcnfX08L2xhYmVsPlxyXG5cclxuICAgICAgICA8c3BhLWxhYmVsICpuZ1N3aXRjaENhc2U9XCInbGFiZWwnXCIgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt2YWx1ZV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChmaWVsZCwgZGF0YVtmaWVsZC5uYW1lXSlcIiBbZm9ybWF0XT1cImZpZWxkLmZvcm1hdCA/PyAndGV4dCdcIiBbc3VmZml4XT1cImZpZWxkLnN1ZmZpeFwiPjwvc3BhLWxhYmVsPlxyXG5cclxuICAgICAgICA8c3BhLW51bWJlciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIiBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgW3dpZHRoXT1cImZpZWxkLndpZHRoXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsIGRhdGFbZmllbGQubmFtZV0pXCIgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJmaWVsZC5taW5cIiBbbWF4XT1cImZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpXCIgW2hpbnRdPVwiZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiIFtzdWZmaXhdPVwiZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cImZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJmaWVsZC5jbGVhckNvbnRlbnRcIj48L3NwYS1udW1iZXI+XHJcblxyXG4gICAgICAgIDxzcGEtbW9uZXkgKm5nU3dpdGNoQ2FzZT1cIidtb25leSdcIiBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgW3dpZHRoXT1cImZpZWxkLndpZHRoXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsIGRhdGFbZmllbGQubmFtZV0pXCIgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJmaWVsZC5taW5cIiBbbWF4XT1cImZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpXCIgW2hpbnRdPVwiZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiIFtzdWZmaXhdPVwiZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cImZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJmaWVsZC5jbGVhckNvbnRlbnRcIj48L3NwYS1tb25leT5cclxuXHJcbiAgICAgICAgPHNwYS1jaGVjayAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIFtkaXNwbGF5XT1cImZpZWxkLmFsaWFzID8/IGZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChmaWVsZCwgZGF0YVtmaWVsZC5uYW1lXSlcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKVwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiID48L3NwYS1jaGVjaz5cclxuXHJcbiAgICAgICAgPHNwYS1kYXRlICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIiBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgW3dpZHRoXT1cImZpZWxkLndpZHRoXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsIGRhdGFbZmllbGQubmFtZV0pXCIgW21pbl09XCJmaWVsZD8ubWluXCIgW21heF09XCJmaWVsZD8ubWF4XCIgW3JlYWRvbmx5XT1cInRlc3RSZWFkT25seShmaWVsZClcIiBbaGludF09XCJmaWVsZC5oaW50XCIgW2luZm9NZXNzYWdlXT1cImZpZWxkLmluZm9NZXNzYWdlXCIgPjwvc3BhLWRhdGU+XHJcblxyXG4gICAgICAgIDxzcGEtZGF0ZXRpbWUgKm5nU3dpdGNoQ2FzZT1cIidkYXRldGltZSdcIiBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsIGRhdGFbZmllbGQubmFtZV0pXCIgW3JlYWRvbmx5XT1cInRlc3RSZWFkT25seShmaWVsZClcIiBbbWluXT1cImZpZWxkLm1pblwiIFttYXhdPVwiZmllbGQubWF4XCIgW2luZm9NZXNzYWdlXT1cImZpZWxkLmluZm9NZXNzYWdlXCIgPjwvc3BhLWRhdGV0aW1lPlxyXG5cclxuICAgICAgICA8c3BhLWVtYWlsICpuZ1N3aXRjaENhc2U9XCInZW1haWwnXCIgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKGZpZWxkLGRhdGFbZmllbGQubmFtZV0pXCIgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCIgW3JlYWRvbmx5XT1cInRlc3RSZWFkT25seShmaWVsZClcIiBbaGludF09XCJmaWVsZC5oaW50XCIgW2luZm9NZXNzYWdlXT1cImZpZWxkLmluZm9NZXNzYWdlXCIgIFtzdWZmaXhdPVwiZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cImZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJmaWVsZC5jbGVhckNvbnRlbnRcIj48L3NwYS1lbWFpbD5cclxuXHJcbiAgICAgICAgPHNwYS10ZXh0ICpuZ1N3aXRjaENhc2U9XCIncGFzc3dvcmQnXCIgW2Zvcm1hdF09XCIncGFzc3dvcmQnXCIgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJmaWVsZC53aWR0aFwiIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbb3B0aW9uVmFsdWVdPVwiZmllbGQub3B0aW9uVmFsdWUgPz8gJ3ZhbHVlJ1wiIFtyb3dzXT1cImZpZWxkLnJvd3NcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChmaWVsZCxkYXRhW2ZpZWxkLm5hbWVdKVwiIFtyZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiIFttaW5dPVwiZmllbGQubWluXCIgW21heF09XCJmaWVsZC5tYXhcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKVwiIFtoaW50XT1cImZpZWxkLmhpbnRcIiBbaW5mb01lc3NhZ2VdPVwiZmllbGQuaW5mb01lc3NhZ2VcIiBbc3VmZml4XT1cImZpZWxkLnN1ZmZpeFwiIFtjb3B5Q29udGVudF09XCJmaWVsZC5jb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwiZmllbGQuY2xlYXJDb250ZW50XCI+PC9zcGEtdGV4dD5cclxuXHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHluYW1pY1NlbGVjdFRlbXBsYXRlOyBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgICAgICAgdGVzdFJlYWRPbmx5OiB0ZXN0UmVhZE9ubHkuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0Q2hhbmdlZDogc2VsZWN0Q2hhbmdlZC5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDxzcGEtbXVsdGktc2VsZWN0ICpuZ1N3aXRjaENhc2U9XCInbXVsdGktc2VsZWN0J1wiIFtkaXNwbGF5XT1cImZpZWxkLmFsaWFzID8/IGZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbd2lkdGhdPVwiZmllbGQud2lkdGhcIiBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCIgW29wdGlvbkRpc3BsYXldPVwiZmllbGQub3B0aW9uRGlzcGxheSA/PyAnbmFtZSdcIiBbb3B0aW9uVmFsdWVdPVwiZmllbGQub3B0aW9uVmFsdWUgPz8gJ3ZhbHVlJ1wiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKGZpZWxkLCBkYXRhW2ZpZWxkLm5hbWVdKVwiIFtyZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpXCIgW2hpbnRdPVwiZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiIFtzdWZmaXhdPVwiZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cImZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJmaWVsZC5jbGVhckNvbnRlbnRcIiBbbG9hZEFjdGlvbl09XCJmaWVsZC5sb2FkQWN0aW9uXCI+XHJcbiAgICAgICAgPC9zcGEtbXVsdGktc2VsZWN0PlxyXG5cclxuICAgICAgICA8c3BhLW11bHRpLXRleHQgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aS10ZXh0J1wiIFtzdHJpY3RdPVwiZmllbGQuc3RyaWN0XCIgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbb3B0aW9uRGlzcGxheV09XCJmaWVsZC5vcHRpb25EaXNwbGF5ID8/ICduYW1lJ1wiIFtvcHRpb25WYWx1ZV09XCJmaWVsZC5vcHRpb25WYWx1ZSA/PyAndmFsdWUnXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsZGF0YVtmaWVsZC5uYW1lXSlcIiBbcmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKVwiIFtoaW50XT1cImZpZWxkLmhpbnRcIiBbaW5mb01lc3NhZ2VdPVwiZmllbGQuaW5mb01lc3NhZ2VcIiBbc3VmZml4XT1cImZpZWxkLnN1ZmZpeFwiIFtjb3B5Q29udGVudF09XCJmaWVsZC5jb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwiZmllbGQuY2xlYXJDb250ZW50XCIgW2xvYWRBY3Rpb25dPVwiZmllbGQubG9hZEFjdGlvblwiPjwvc3BhLW11bHRpLXRleHQ+XHJcblxyXG5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NvbXBvc2l0ZSdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wb3NpdGUtZmllbGQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wb3NpdGUtZmllbGQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJmaWVsZCBvZiBnZXRWaXNpYmxlU3ViZmllbGRzKGZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3ViZmllbGQudHlwZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHNwYS1udW1iZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCIgW2Rpc3BsYXldPVwic3ViZmllbGQuYWxpYXMgPz8gc3ViZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJzdWJmaWVsZC53aWR0aFwiIFsodmFsdWUpXT1cImRhdGFbc3ViZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKHN1YmZpZWxkLCAkZXZlbnQpXCIgW3JlcXVpcmVkXT1cInN1YmZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJzdWJmaWVsZC5taW5cIiBbbWF4XT1cInN1YmZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpIHx8IHRlc3RSZWFkT25seShzdWJmaWVsZClcIiBbaGludF09XCJzdWJmaWVsZC5oaW50XCIgW2luZm9NZXNzYWdlXT1cInN1YmZpZWxkLmluZm9NZXNzYWdlXCIgIFtzdWZmaXhdPVwic3ViZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cInN1YmZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJzdWJmaWVsZC5jbGVhckNvbnRlbnRcIj48L3NwYS1udW1iZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8c3BhLW1vbmV5ICpuZ1N3aXRjaENhc2U9XCInbW9uZXknXCIgW2Rpc3BsYXldPVwic3ViZmllbGQuYWxpYXMgPz8gc3ViZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJzdWJmaWVsZC53aWR0aFwiIFsodmFsdWUpXT1cImRhdGFbc3ViZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKHN1YmZpZWxkLCAkZXZlbnQpXCIgW3JlcXVpcmVkXT1cInN1YmZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJzdWJmaWVsZC5taW5cIiBbbWF4XT1cInN1YmZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpIHx8IHRlc3RSZWFkT25seShzdWJmaWVsZClcIiBbaGludF09XCJzdWJmaWVsZC5oaW50XCIgW2luZm9NZXNzYWdlXT1cInN1YmZpZWxkLmluZm9NZXNzYWdlXCIgW3N1ZmZpeF09XCJzdWJmaWVsZC5zdWZmaXhcIiBbY29weUNvbnRlbnRdPVwiZmllbGQuY29weUNvbnRlbnRcIiBbY2xlYXJDb250ZW50XT1cImZpZWxkLmNsZWFyQ29udGVudFwiPjwvc3BhLW1vbmV5PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHNwYS1jaGVjayAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIFtkaXNwbGF5XT1cInN1YmZpZWxkLmFsaWFzID8/IHN1YmZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW3N1YmZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChzdWJmaWVsZCwgJGV2ZW50KVwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpIHx8IHRlc3RSZWFkT25seShzdWJmaWVsZClcIiBbaW5mb01lc3NhZ2VdPVwic3ViZmllbGQuaW5mb01lc3NhZ2VcIiA+PC9zcGEtY2hlY2s+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8c3BhLWRhdGUgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiIFtkaXNwbGF5XT1cInN1YmZpZWxkLmFsaWFzID8/IHN1YmZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbd2lkdGhdPVwic3ViZmllbGQud2lkdGhcIiBbKHZhbHVlKV09XCJkYXRhW3N1YmZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChzdWJmaWVsZCwgJGV2ZW50KVwiIFttaW5dPVwic3ViZmllbGQubWluXCIgW21heF09XCJzdWJmaWVsZC5tYXhcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKSB8fCB0ZXN0UmVhZE9ubHkoc3ViZmllbGQpXCIgW2hpbnRdPVwic3ViZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJzdWJmaWVsZC5pbmZvTWVzc2FnZVwiID48L3NwYS1kYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHNwYS1kYXRldGltZSAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGV0aW1lJ1wiIFtkaXNwbGF5XT1cInN1YmZpZWxkLmFsaWFzID8/IHN1YmZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW3N1YmZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChzdWJmaWVsZCwgJGV2ZW50KVwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpIHx8IHRlc3RSZWFkT25seShzdWJmaWVsZClcIiBbbWluXT1cInN1YmZpZWxkLm1pblwiIFttYXhdPVwic3ViZmllbGQubWF4XCIgW2luZm9NZXNzYWdlXT1cInN1YmZpZWxkLmluZm9NZXNzYWdlXCIgPjwvc3BhLWRhdGV0aW1lPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHluYW1pY1NlbGVjdFRlbXBsYXRlOyBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJlYWRPbmx5OiB0ZXN0UmVhZE9ubHkuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q2hhbmdlZDogc2VsZWN0Q2hhbmdlZC5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHNwYS10ZXh0ICpuZ1N3aXRjaERlZmF1bHQgW2Rpc3BsYXldPVwic3ViZmllbGQuYWxpYXMgPz8gc3ViZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJzdWJmaWVsZC53aWR0aFwiICBbb3B0aW9uc109XCJzdWJmaWVsZC5vcHRpb25zXCIgW29wdGlvbkRpc3BsYXldPVwic3ViZmllbGQub3B0aW9uRGlzcGxheSA/PyAnbmFtZSdcIiBbb3B0aW9uVmFsdWVdPVwic3ViZmllbGQub3B0aW9uVmFsdWUgPz8gJ3ZhbHVlJ1wiIFtyb3dzXT1cInN1YmZpZWxkLnJvd3NcIiBbKHZhbHVlKV09XCJkYXRhW3N1YmZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChzdWJmaWVsZCwgJGV2ZW50KVwiIFtyZXF1aXJlZF09XCJzdWJmaWVsZC5yZXF1aXJlZFwiIFttaW5dPVwic3ViZmllbGQubWluXCIgW21heF09XCJzdWJmaWVsZC5tYXhcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKSB8fCB0ZXN0UmVhZE9ubHkoc3ViZmllbGQpXCIgW2hpbnRdPVwic3ViZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJzdWJmaWVsZC5pbmZvTWVzc2FnZVwiICBbc3VmZml4XT1cInN1YmZpZWxkLnN1ZmZpeFwiIFtjb3B5Q29udGVudF09XCJzdWJmaWVsZC5jb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwic3ViZmllbGQuY2xlYXJDb250ZW50XCIgW2xvYWRBY3Rpb25dPVwic3ViZmllbGQubG9hZEFjdGlvblwiPjwvc3BhLXRleHQ+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgPHNwYS10ZXh0ICpuZ1N3aXRjaERlZmF1bHQgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJmaWVsZC53aWR0aFwiIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbb3B0aW9uRGlzcGxheV09XCJmaWVsZC5vcHRpb25EaXNwbGF5ID8/ICduYW1lJ1wiIFtvcHRpb25WYWx1ZV09XCJmaWVsZC5vcHRpb25WYWx1ZSA/PyAndmFsdWUnXCIgW3Jvd3NdPVwiZmllbGQucm93c1wiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKGZpZWxkLGRhdGFbZmllbGQubmFtZV0pXCIgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJmaWVsZC5taW5cIiBbbWF4XT1cImZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpXCIgW2hpbnRdPVwiZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiICBbc3VmZml4XT1cImZpZWxkLnN1ZmZpeFwiIFtjb3B5Q29udGVudF09XCJmaWVsZC5jb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwiZmllbGQuY2xlYXJDb250ZW50XCIgW2xvYWRBY3Rpb25dPVwiZmllbGQubG9hZEFjdGlvblwiPjwvc3BhLXRleHQ+XHJcblxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwic3Bhbi1jb2wtY2VudGVyXCIgKm5nSWY9XCJjb25maWcuYnV0dG9uXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICAoY2xpY2spPVwiYnV0dG9uQ2xpY2tlZCgpXCIgIGNka0ZvY3VzSW5pdGlhbD57e2J1dHRvbkRpc3BsYXl9fTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBRTFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTdkMsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsY0FBOEIsRUFBVSxXQUEyQixFQUFVLFdBQXdCO1FBQXJHLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBb0Z6SCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBSVQsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUUzQixrQkFBYSxHQUFHLFFBQVEsQ0FBQztRQUN6QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQU1uQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBbkdrRixDQUFDO0lBRTlILFFBQVE7UUFFTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixD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LENBQUE7WUFFekIsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUV2QixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFO29CQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUN6RDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDeEM7Z0JBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7aUJBQ2pCO2FBR0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM1RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7SUFNWCxDQUFDOzswR0E1VFUsYUFBYTs4RkFBYixhQUFhLHFTQ2QxQix1MFhBK0hBOzJGRGpIYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLFVBQVU7NEpBd0ZXLHFCQUFxQjtzQkFBbkQsWUFBWTt1QkFBQyxlQUFlO2dCQU1wQixLQUFLO3NCQUFiLEtBQUs7Z0JBUUcsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db25maWcsIEZpZWxkLCBCdXR0b24sIEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQ29yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhbGliLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYiwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICB0aGlzLmhhc0FjY2VzcyA9IENvcmUuaGFzRm9ybUFjY2Vzcyh0aGlzLmNvbmZpZywgdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmhhc0FjY2Vzcykge1xyXG4gICAgICAvLyB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KCdBY2Nlc3MgZGVuaWVkJyk7IC8vIE9wdGlvbmFsIC0gbm90aWZ5IHVzZXJcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5jb25maWcuZmllbGRzKXtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBsZWFzZSBDb25maWd1cmUgRm9ybSBGaWVsZHNcIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5kYXRhKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgQ29uZmlndXJlIEZvcm0gRGF0YVwiKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmNvbmZpZy5maWVsZHM7XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBCZWhhdmlvclN1YmplY3RzIGZvciBmaWVsZHMgd2l0aCBsb2FkQWN0aW9uc1xyXG4gICAgdGhpcy5maWVsZHM/LmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoZmllbGQubG9hZEFjdGlvbiAmJiAhZmllbGQub3B0aW9uc1N1YmplY3QgJiYgIWZpZWxkLm1hc3RlckZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQub3B0aW9uc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcblxyXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byBvcHRpb25zIGNoYW5nZXNcclxuICAgICAgICBmaWVsZC5vcHRpb25zU3ViamVjdC5zdWJzY3JpYmUobmV3T3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICBmaWVsZC5vcHRpb25zID0gbmV3T3B0aW9ucztcclxuXHJcbiAgICAgICAgICAvLyBVcGRhdGUgY2hpbGQgZmllbGRzIHRoYXQgZGVwZW5kIG9uIHRoaXMgZmllbGRcclxuICAgICAgICAgIGlmICh0aGlzLmNoaWxkRmllbGRzPy5zb21lKHggPT4geC5tYXN0ZXJGaWVsZCA9PT0gZmllbGQubmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDaGlsZE9wdGlvbnMoZmllbGQubmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcubXVsdGlDb2x1bW4pe1xyXG4gICAgICB0aGlzLm11bHRpQ29sdW1uID0gdGhpcy5jb25maWcubXVsdGlDb2x1bW5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLm11bHRpQ29sdW1uID0gdGhpcy5maWVsZHMubGVuZ3RoID4gMlxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZz8uYnV0dG9uPy5kaXNwbGF5KXtcclxuICAgICAgdGhpcy5idXR0b25EaXNwbGF5ID0gdGhpcy5jb25maWcuYnV0dG9uLmRpc3BsYXk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWxlRmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKHggPT4geC50eXBlID09ICdmaWxlJylcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWc/LmJ1dHRvbj8uYWN0aW9uICYmIHRoaXMuZmlsZUZpZWxkIHx8IHRoaXMuY29uZmlnPy5idXR0b24/LmFjdGlvbi51cmwuaW5jbHVkZXMoXCIvZm9ybVwiKSkge1xyXG4gICAgICB0aGlzLmNvbmZpZy5idXR0b24uYWN0aW9uLmlzRm9ybURhdGEgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoaWxkRmllbGRzID0gdGhpcy5maWVsZHMuZmlsdGVyKHggPT4geC5tYXN0ZXJGaWVsZClcclxuXHJcblxyXG4gICAgdGhpcy5jaGlsZEZpZWxkcy5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgbGV0IG1hc3RlciA9IHRoaXMuZmllbGRzLmZpbmQoeCA9PiB4Lm5hbWUgPT0gY2hpbGQubWFzdGVyRmllbGQpXHJcbiAgICAgIGlmIChjaGlsZC5sb2FkQWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkQ2hpbGRNYXN0ZXJPcHRpb25zKGNoaWxkKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGlsZE9wdGlvbnMobWFzdGVyLm5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGlmIChmaWVsZC5sb2FkQWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkQ2hpbGRNYXN0ZXJPcHRpb25zKGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplQ29tcG9zaXRlRmllbGRzKCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2R5bmFtaWNTZWxlY3QnKSBkeW5hbWljU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGhhc0FjY2VzcyA9IGZhbHNlO1xyXG4gIGZpbGVOYW1lc1xyXG4gIGZpbGVGaWVsZDogRmllbGQ7XHJcbiAgZmlsZVZpZXdGaWVsZDogRmllbGQ7XHJcbiAgQElucHV0KCkgZmlsZXM6IGFueVtdID0gW107XHJcbiAgZmllbGRzOiBGaWVsZFtdO1xyXG4gIGJ1dHRvbkRpc3BsYXkgPSBcIlN1Ym1pdFwiO1xyXG4gIGlzUHJvY2Vzc2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG11bHRpQ29sdW1uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNoaWxkRmllbGRzOiBGaWVsZFtdO1xyXG5cclxuICBASW5wdXQoKSBkYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIEBPdXRwdXQoKSBidXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGluaXRpYWxpemVDb21wb3NpdGVGaWVsZHMoKSB7XHJcbiAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdjb21wb3NpdGUnICYmIGZpZWxkLnN1YmZpZWxkcykge1xyXG4gICAgICAgIGZpZWxkLnN1YmZpZWxkcy5mb3JFYWNoKHN1YmZpZWxkID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGFbc3ViZmllbGQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFbc3ViZmllbGQubmFtZV0gPSBDb3JlLmdldEluaXRpYWxWYWx1ZShzdWJmaWVsZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmlzaWJsZVN1YmZpZWxkcyhmaWVsZCA6IEZpZWxkKXtcclxuICAgIHJldHVybiBDb3JlLmdldFZpc2libGVTdWJmaWVsZHModGhpcy5jb25maWcsIHRoaXMuZGF0YSwgZmllbGQsIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWUpO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0VmlzaWJsZUZpZWxkcygpIHtcclxuICAgIGxldCB2aXNpYmxlRmllbGRzID0gdGhpcy5maWVsZHM/LmZpbHRlcih4ID0+IENvcmUudGVzdFZpc2libGUodGhpcy5jb25maWcsIHRoaXMuZGF0YSwgeCwgdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZSkpID8/IFtdO1xyXG5cclxuICAgIC8vIEZpbHRlciBvdXQgZmllbGRzIHVuZGVyIGNvbGxhcHNlZCBzZWN0aW9uc1xyXG4gICAgcmV0dXJuIHZpc2libGVGaWVsZHMuZmlsdGVyKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJykgcmV0dXJuIHRydWU7XHJcbiAgICAgIGlmIChmaWVsZC5zZWN0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbkZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmID0+IGYudHlwZSA9PT0gJ3NlY3Rpb24nICYmIGYubmFtZSA9PT0gZmllbGQuc2VjdGlvbik7XHJcbiAgICAgICAgcmV0dXJuICFzZWN0aW9uRmllbGQ/LmNvbGxhcHNlZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdGVzdFJlYWRPbmx5KGZpZWxkOiBGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIENvcmUudGVzdFJlYWRPbmx5KHRoaXMuY29uZmlnLCB0aGlzLmRhdGEsIGZpZWxkKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlY3Rpb24oZmllbGQ6IEZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nKSB7XHJcbiAgICAgIGZpZWxkLmNvbGxhcHNlZCA9ICFmaWVsZC5jb2xsYXBzZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNTZWN0aW9uRmllbGRzKHNlY3Rpb25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZpZWxkcz8uc29tZShmaWVsZCA9PlxyXG4gICAgICBmaWVsZC5zZWN0aW9uID09PSBzZWN0aW9uTmFtZSAmJlxyXG4gICAgICBDb3JlLnRlc3RWaXNpYmxlKHRoaXMuY29uZmlnLCB0aGlzLmRhdGEsIGZpZWxkLCB0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRSb2xlU291cmNlLnZhbHVlKVxyXG4gICAgKSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNob3VsZFNlY3Rpb25Db2xsYXBzZShmaWVsZDogRmllbGQpOiBib29sZWFuIHtcclxuICAgIGlmIChmaWVsZC5jb2xsYXBzZWRDb25kaXRpb24pIHtcclxuICAgICAgcmV0dXJuIGZpZWxkLmNvbGxhcHNlZENvbmRpdGlvbih0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpZWxkLmNvbGxhcHNlZCA/PyBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBvbkluZm9DbGljayhldmVudDogTW91c2VFdmVudCwgaW5mb01lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm8oaW5mb01lc3NhZ2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIHNlbGVjdENoYW5nZWQoZmllbGQ6IEZpZWxkKXtcclxuICAgIHRoaXMuaW5wdXRDaGFuZ2VkKGZpZWxkLCB0aGlzLmRhdGFbZmllbGQubmFtZV0gKVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBpbnB1dENoYW5nZWQoZmllbGQgOiBGaWVsZCwgdmFsdWUpe1xyXG5cclxuICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh7IGZpZWxkOiBmaWVsZCwgdmFsdWU6IHZhbHVlfSlcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUNoaWxkT3B0aW9ucyhmaWVsZC5uYW1lKVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcubW9kZSA9PSAnY3JlYXRlJyAmJiBmaWVsZC5jaGlsZHJlbil7XHJcbiAgICAgIGZpZWxkLmNoaWxkcmVuLmZvckVhY2goY2hpbGRDb25maWcgPT4ge1xyXG4gICAgICAgIGxldCBjaGlsZCA9IHRoaXMuZmllbGRzLmZpbmQoeCA9PiB4Lm5hbWUgPT0gY2hpbGRDb25maWcuY2hpbGRGaWVsZClcclxuICAgICAgICB0aGlzLmRhdGFbY2hpbGQubmFtZV0gPSBmaWVsZC5vcHRpb25zLmZpbmQoeCA9PiB4W2ZpZWxkLm9wdGlvblZhbHVlID8/ICd2YWx1ZSddID09IHZhbHVlKVtjaGlsZENvbmZpZy5jaGlsZFZhbHVlRmllbGRdXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHVwZGF0ZUNoaWxkT3B0aW9ucyhtYXN0ZXJGaWVsZE5hbWU6IHN0cmluZyl7XHJcblxyXG4gICAgbGV0IGNoaWxkID0gdGhpcy5jaGlsZEZpZWxkcy5maW5kKHggPT4geC5tYXN0ZXJGaWVsZCA9PSBtYXN0ZXJGaWVsZE5hbWUpXHJcbiAgICBpZiAoY2hpbGQgIT0gbnVsbCkge1xyXG5cclxuICAgICAgLy9jdXJyZW50IGlzIG1hc3RlclxyXG5cclxuXHJcbiAgICAgIGlmIChjaGlsZC5tYXN0ZXJPcHRpb25zKXtcclxuICAgICAgICBjaGlsZC5vcHRpb25zID0gY2hpbGQubWFzdGVyT3B0aW9ucy5maWx0ZXIoeCA9PiB4W2NoaWxkLm1hc3Rlck9wdGlvblZhbHVlID8/ICdtYXN0ZXJWYWx1ZSddID09IHRoaXMuZGF0YVttYXN0ZXJGaWVsZE5hbWVdKVxyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hc3RlciBPcHRpb25zIG5vdCBmb3VuZFwiKVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQ2hpbGRNYXN0ZXJPcHRpb25zKGNoaWxkOiBGaWVsZCkge1xyXG4gICAgaWYgKCFjaGlsZC5sb2FkQWN0aW9uKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGNoaWxkLmxvYWRBY3Rpb24pLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgIGNoaWxkLm1hc3Rlck9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2hpbGRPcHRpb25zKGNoaWxkLm1hc3RlckZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYnV0dG9uQ2xpY2tlZCgpe1xyXG5cclxuICAgIHRoaXMuYnV0dG9uQ2xpY2suZW1pdCh0aGlzLmRhdGEpO1xyXG5cclxuICAgIGxldCBidXR0b24gPSB0aGlzLmNvbmZpZy5idXR0b247XHJcblxyXG4gICAgaWYgKCFidXR0b24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vdmFsaWRhdGlvblxyXG4gICAgbGV0IHJlc3AgPSBDb3JlLnZhbGlkYXRlT2JqZWN0KHRoaXMuZ2V0VmlzaWJsZUZpZWxkcygpLHRoaXMuZGF0YSk7XHJcbiAgICBpZiAocmVzcCAhPSAnJyl7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QocmVzcClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoIDwgMSAmJiB0aGlzLmZpbGVGaWVsZD8ucmVxdWlyZWQgJiYgdGhpcy5jb25maWcubW9kZSA9PSdjcmVhdGUnKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgYXR0YWNoIGZpbGUocylcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKGJ1dHRvbi5jb25maXJtKXtcclxuXHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY29uZmlybShgJHtidXR0b24uY29uZmlybS5tZXNzYWdlfWApLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NDYWxsKGJ1dHRvbilcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnByb2Nlc3NDYWxsKGJ1dHRvbilcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBwcm9jZXNzQ2FsbChidXR0b246IEJ1dHRvbil7XHJcblxyXG4gICAgaWYgKCFidXR0b24uYWN0aW9uKSByZXR1cm5cclxuXHJcbiAgICBsZXQgZGF0YU91dDtcclxuXHJcbiAgICBpZiAoYnV0dG9uLmFjdGlvbi5pc0Zvcm1EYXRhKXtcclxuXHJcbiAgICAgIGxldCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGB1cGxvYWRGaWxlJHtpfWAsIHRoaXMuZmlsZXNbaV0sIHRoaXMuZmlsZXNbaV0ubmFtZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcImRhdGFcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSk7XHJcblxyXG5cclxuICAgICAgZGF0YU91dCA9IGZvcm1EYXRhXHJcbiAgICB9ZWxzZXtcclxuXHJcbiAgICAgIGRhdGFPdXQgPSB0aGlzLmRhdGFcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IHRydWVcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShidXR0b24uYWN0aW9uLCBkYXRhT3V0KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2VcclxuXHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgIGlmIChidXR0b24uYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGJ1dHRvbi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiU3VibWl0dGVkXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJlc2V0KSB7XHJcbiAgICAgICAgICBDb3JlLnJlc2V0T2JqZWN0KHRoaXMuZmllbGRzLCB0aGlzLmRhdGEpXHJcbiAgICAgICAgICB0aGlzLmZpbGVzID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NGb3JtKCl7XHJcblxyXG5cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuIiwiXHJcbjxkaXYgW25nQ2xhc3NdPVwibXVsdGlDb2x1bW4gPyAndGluLWdyaWQnIDogJ3Rpbi1jb2wnXCIgPlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiIWhhc0FjY2Vzc1wiIGNsYXNzPVwidGluLWNlbnRlclwiPlxyXG4gICAgPHA+PGVtPkFjY2VzcyBSZXN0cmljdGVkPC9lbT48L3A+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgW25nQ2xhc3NdPVwiZmllbGQuc3BhbiB8fCBmaWVsZC50eXBlID09J3NlY3Rpb24nIHx8IGZpZWxkLnR5cGUgPT0nZmlsZScgfHwgZmllbGQudHlwZSA9PSdmaWxlLXZpZXcnICA/ICdzcGFuLWNvbCcgOiAnJ1wiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBnZXRWaXNpYmxlRmllbGRzKClcIj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmllbGQudHlwZVwiIGNsYXNzPVwiaGlnaGxpZ2h0XCI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidzZWN0aW9uJ1wiIGNsYXNzPVwidGl0bGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIChjbGljayk9XCJ0b2dnbGVTZWN0aW9uKGZpZWxkKVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZm9udC1zaXplOiBsYXJnZXI7bWFyZ2luLXJpZ2h0OiAxMHB4O1wiPnt7ZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc319PC9sYWJlbD5cclxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImZpZWxkLmluZm9NZXNzYWdlXCIgKGNsaWNrKT1cIm9uSW5mb0NsaWNrKCRldmVudCwgZmllbGQuaW5mb01lc3NhZ2UpXCIgc3R5bGU9XCJjb2xvcjogc3RlZWxibHVlOyBmb250LXNpemU6IDE0cHg7XCI+aW5mbzwvbWF0LWljb24+XHJcbiAgICAgICAgICA8IS0tIDxidXR0b24gIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImluZm8taWNvbi1idXR0b25cIiAgbWF0VG9vbHRpcD1cIkluZm9cIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxyXG5cclxuICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImhhc1NlY3Rpb25GaWVsZHMoZmllbGQubmFtZSlcIj57e3Nob3VsZFNlY3Rpb25Db2xsYXBzZShmaWVsZCkgPyAnZXhwYW5kX21vcmUnIDogJ2V4cGFuZF9sZXNzJ319PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBtYi0yXCIgKm5nSWY9XCJjb25maWcubW9kZSAhPSd2aWV3J1wiPlxyXG4gICAgICAgICAgICA8c3BhLWF0dGFjaCBbbWVzc2FnZV09XCJmaWVsZC5hbGlhcyA/PyAnRHJhZyBhbmQgRHJvcCBmaWxlcyBoZXJlJ1wiIFsoZmlsZXMpXT1cImZpbGVzXCIgW2ZpbGVPcHRpb25zXT1cImZpZWxkLmZpbGVPcHRpb25zXCI+PC9zcGEtYXR0YWNoPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlLXZpZXcnXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBtYi0yXCIgKm5nSWY9XCJjb25maWcubW9kZSAmJiBjb25maWcubW9kZSAhPSdjcmVhdGUnXCI+XHJcbiAgICAgICAgICAgIDxzcGEtdmlld2VyIFtmaWxlQWN0aW9uXT1cImZpZWxkLmxvYWRBY3Rpb25cIiBbcGF0aF09XCJmaWVsZC5wYXRoXCIgW2ZvbGRlck5hbWVdPVwiZGF0YVtmaWVsZC5rZXlGaWVsZF1cIiA+PC9zcGEtdmlld2VyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICA8bGFiZWwgKm5nU3dpdGNoQ2FzZT1cIidibGFuaydcIj48L2xhYmVsPlxyXG5cclxuICAgICAgICA8bGFiZWwgKm5nU3dpdGNoQ2FzZT1cIidzdHJpbmcnXCIgW25nU3R5bGVdPVwieydmb250LXNpemUnOmZpZWxkLnNpemUgPz8gJzE0cHgnfVwiID57e2RhdGFbZmllbGQubmFtZV0gPz8gZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZX19IHt7ZmllbGQuc3VmZml4ID8/ICcnfX08L2xhYmVsPlxyXG5cclxuICAgICAgICA8c3BhLWxhYmVsICpuZ1N3aXRjaENhc2U9XCInbGFiZWwnXCIgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt2YWx1ZV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChmaWVsZCwgZGF0YVtmaWVsZC5uYW1lXSlcIiBbZm9ybWF0XT1cImZpZWxkLmZvcm1hdCA/PyAndGV4dCdcIiBbc3VmZml4XT1cImZpZWxkLnN1ZmZpeFwiPjwvc3BhLWxhYmVsPlxyXG5cclxuICAgICAgICA8c3BhLW51bWJlciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIiBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgW3dpZHRoXT1cImZpZWxkLndpZHRoXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsIGRhdGFbZmllbGQubmFtZV0pXCIgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJmaWVsZC5taW5cIiBbbWF4XT1cImZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpXCIgW2hpbnRdPVwiZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiIFtzdWZmaXhdPVwiZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cImZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJmaWVsZC5jbGVhckNvbnRlbnRcIj48L3NwYS1udW1iZXI+XHJcblxyXG4gICAgICAgIDxzcGEtbW9uZXkgKm5nU3dpdGNoQ2FzZT1cIidtb25leSdcIiBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgW3dpZHRoXT1cImZpZWxkLndpZHRoXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsIGRhdGFbZmllbGQubmFtZV0pXCIgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJmaWVsZC5taW5cIiBbbWF4XT1cImZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpXCIgW2hpbnRdPVwiZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiIFtzdWZmaXhdPVwiZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cImZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJmaWVsZC5jbGVhckNvbnRlbnRcIj48L3NwYS1tb25leT5cclxuXHJcbiAgICAgICAgPHNwYS1jaGVjayAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIFtkaXNwbGF5XT1cImZpZWxkLmFsaWFzID8/IGZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChmaWVsZCwgZGF0YVtmaWVsZC5uYW1lXSlcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKVwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiID48L3NwYS1jaGVjaz5cclxuXHJcbiAgICAgICAgPHNwYS1kYXRlICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIiBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgW3dpZHRoXT1cImZpZWxkLndpZHRoXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsIGRhdGFbZmllbGQubmFtZV0pXCIgW21pbl09XCJmaWVsZD8ubWluXCIgW21heF09XCJmaWVsZD8ubWF4XCIgW3JlYWRvbmx5XT1cInRlc3RSZWFkT25seShmaWVsZClcIiBbaGludF09XCJmaWVsZC5oaW50XCIgW2luZm9NZXNzYWdlXT1cImZpZWxkLmluZm9NZXNzYWdlXCIgPjwvc3BhLWRhdGU+XHJcblxyXG4gICAgICAgIDxzcGEtZGF0ZXRpbWUgKm5nU3dpdGNoQ2FzZT1cIidkYXRldGltZSdcIiBbZGlzcGxheV09XCJmaWVsZC5hbGlhcyA/PyBmaWVsZC5uYW1lIHwgY2FtZWxUb1dvcmRzXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsIGRhdGFbZmllbGQubmFtZV0pXCIgW3JlYWRvbmx5XT1cInRlc3RSZWFkT25seShmaWVsZClcIiBbbWluXT1cImZpZWxkLm1pblwiIFttYXhdPVwiZmllbGQubWF4XCIgW2luZm9NZXNzYWdlXT1cImZpZWxkLmluZm9NZXNzYWdlXCIgPjwvc3BhLWRhdGV0aW1lPlxyXG5cclxuICAgICAgICA8c3BhLWVtYWlsICpuZ1N3aXRjaENhc2U9XCInZW1haWwnXCIgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKGZpZWxkLGRhdGFbZmllbGQubmFtZV0pXCIgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCIgW3JlYWRvbmx5XT1cInRlc3RSZWFkT25seShmaWVsZClcIiBbaGludF09XCJmaWVsZC5oaW50XCIgW2luZm9NZXNzYWdlXT1cImZpZWxkLmluZm9NZXNzYWdlXCIgIFtzdWZmaXhdPVwiZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cImZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJmaWVsZC5jbGVhckNvbnRlbnRcIj48L3NwYS1lbWFpbD5cclxuXHJcbiAgICAgICAgPHNwYS10ZXh0ICpuZ1N3aXRjaENhc2U9XCIncGFzc3dvcmQnXCIgW2Zvcm1hdF09XCIncGFzc3dvcmQnXCIgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJmaWVsZC53aWR0aFwiIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbb3B0aW9uVmFsdWVdPVwiZmllbGQub3B0aW9uVmFsdWUgPz8gJ3ZhbHVlJ1wiIFtyb3dzXT1cImZpZWxkLnJvd3NcIiBbKHZhbHVlKV09XCJkYXRhW2ZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChmaWVsZCxkYXRhW2ZpZWxkLm5hbWVdKVwiIFtyZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiIFttaW5dPVwiZmllbGQubWluXCIgW21heF09XCJmaWVsZC5tYXhcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKVwiIFtoaW50XT1cImZpZWxkLmhpbnRcIiBbaW5mb01lc3NhZ2VdPVwiZmllbGQuaW5mb01lc3NhZ2VcIiBbc3VmZml4XT1cImZpZWxkLnN1ZmZpeFwiIFtjb3B5Q29udGVudF09XCJmaWVsZC5jb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwiZmllbGQuY2xlYXJDb250ZW50XCI+PC9zcGEtdGV4dD5cclxuXHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHluYW1pY1NlbGVjdFRlbXBsYXRlOyBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgICAgICAgdGVzdFJlYWRPbmx5OiB0ZXN0UmVhZE9ubHkuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0Q2hhbmdlZDogc2VsZWN0Q2hhbmdlZC5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDxzcGEtbXVsdGktc2VsZWN0ICpuZ1N3aXRjaENhc2U9XCInbXVsdGktc2VsZWN0J1wiIFtkaXNwbGF5XT1cImZpZWxkLmFsaWFzID8/IGZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbd2lkdGhdPVwiZmllbGQud2lkdGhcIiBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCIgW29wdGlvbkRpc3BsYXldPVwiZmllbGQub3B0aW9uRGlzcGxheSA/PyAnbmFtZSdcIiBbb3B0aW9uVmFsdWVdPVwiZmllbGQub3B0aW9uVmFsdWUgPz8gJ3ZhbHVlJ1wiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKGZpZWxkLCBkYXRhW2ZpZWxkLm5hbWVdKVwiIFtyZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpXCIgW2hpbnRdPVwiZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiIFtzdWZmaXhdPVwiZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cImZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJmaWVsZC5jbGVhckNvbnRlbnRcIiBbbG9hZEFjdGlvbl09XCJmaWVsZC5sb2FkQWN0aW9uXCI+XHJcbiAgICAgICAgPC9zcGEtbXVsdGktc2VsZWN0PlxyXG5cclxuICAgICAgICA8c3BhLW11bHRpLXRleHQgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aS10ZXh0J1wiIFtzdHJpY3RdPVwiZmllbGQuc3RyaWN0XCIgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbb3B0aW9uRGlzcGxheV09XCJmaWVsZC5vcHRpb25EaXNwbGF5ID8/ICduYW1lJ1wiIFtvcHRpb25WYWx1ZV09XCJmaWVsZC5vcHRpb25WYWx1ZSA/PyAndmFsdWUnXCIgWyh2YWx1ZSldPVwiZGF0YVtmaWVsZC5uYW1lXVwiICh2YWx1ZUNoYW5nZSk9XCJpbnB1dENoYW5nZWQoZmllbGQsZGF0YVtmaWVsZC5uYW1lXSlcIiBbcmVxdWlyZWRdPVwiZmllbGQucmVxdWlyZWRcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKVwiIFtoaW50XT1cImZpZWxkLmhpbnRcIiBbaW5mb01lc3NhZ2VdPVwiZmllbGQuaW5mb01lc3NhZ2VcIiBbc3VmZml4XT1cImZpZWxkLnN1ZmZpeFwiIFtjb3B5Q29udGVudF09XCJmaWVsZC5jb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwiZmllbGQuY2xlYXJDb250ZW50XCIgW2xvYWRBY3Rpb25dPVwiZmllbGQubG9hZEFjdGlvblwiPjwvc3BhLW11bHRpLXRleHQ+XHJcblxyXG5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NvbXBvc2l0ZSdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wb3NpdGUtZmllbGQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wb3NpdGUtZmllbGQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJmaWVsZCBvZiBnZXRWaXNpYmxlU3ViZmllbGRzKGZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3ViZmllbGQudHlwZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHNwYS1udW1iZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCIgW2Rpc3BsYXldPVwic3ViZmllbGQuYWxpYXMgPz8gc3ViZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJzdWJmaWVsZC53aWR0aFwiIFsodmFsdWUpXT1cImRhdGFbc3ViZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKHN1YmZpZWxkLCAkZXZlbnQpXCIgW3JlcXVpcmVkXT1cInN1YmZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJzdWJmaWVsZC5taW5cIiBbbWF4XT1cInN1YmZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpIHx8IHRlc3RSZWFkT25seShzdWJmaWVsZClcIiBbaGludF09XCJzdWJmaWVsZC5oaW50XCIgW2luZm9NZXNzYWdlXT1cInN1YmZpZWxkLmluZm9NZXNzYWdlXCIgIFtzdWZmaXhdPVwic3ViZmllbGQuc3VmZml4XCIgW2NvcHlDb250ZW50XT1cInN1YmZpZWxkLmNvcHlDb250ZW50XCIgW2NsZWFyQ29udGVudF09XCJzdWJmaWVsZC5jbGVhckNvbnRlbnRcIj48L3NwYS1udW1iZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8c3BhLW1vbmV5ICpuZ1N3aXRjaENhc2U9XCInbW9uZXknXCIgW2Rpc3BsYXldPVwic3ViZmllbGQuYWxpYXMgPz8gc3ViZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJzdWJmaWVsZC53aWR0aFwiIFsodmFsdWUpXT1cImRhdGFbc3ViZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKHN1YmZpZWxkLCAkZXZlbnQpXCIgW3JlcXVpcmVkXT1cInN1YmZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJzdWJmaWVsZC5taW5cIiBbbWF4XT1cInN1YmZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpIHx8IHRlc3RSZWFkT25seShzdWJmaWVsZClcIiBbaGludF09XCJzdWJmaWVsZC5oaW50XCIgW2luZm9NZXNzYWdlXT1cInN1YmZpZWxkLmluZm9NZXNzYWdlXCIgW3N1ZmZpeF09XCJzdWJmaWVsZC5zdWZmaXhcIiBbY29weUNvbnRlbnRdPVwiZmllbGQuY29weUNvbnRlbnRcIiBbY2xlYXJDb250ZW50XT1cImZpZWxkLmNsZWFyQ29udGVudFwiPjwvc3BhLW1vbmV5PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHNwYS1jaGVjayAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIFtkaXNwbGF5XT1cInN1YmZpZWxkLmFsaWFzID8/IHN1YmZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW3N1YmZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChzdWJmaWVsZCwgJGV2ZW50KVwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpIHx8IHRlc3RSZWFkT25seShzdWJmaWVsZClcIiBbaW5mb01lc3NhZ2VdPVwic3ViZmllbGQuaW5mb01lc3NhZ2VcIiA+PC9zcGEtY2hlY2s+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8c3BhLWRhdGUgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiIFtkaXNwbGF5XT1cInN1YmZpZWxkLmFsaWFzID8/IHN1YmZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbd2lkdGhdPVwic3ViZmllbGQud2lkdGhcIiBbKHZhbHVlKV09XCJkYXRhW3N1YmZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChzdWJmaWVsZCwgJGV2ZW50KVwiIFttaW5dPVwic3ViZmllbGQubWluXCIgW21heF09XCJzdWJmaWVsZC5tYXhcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKSB8fCB0ZXN0UmVhZE9ubHkoc3ViZmllbGQpXCIgW2hpbnRdPVwic3ViZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJzdWJmaWVsZC5pbmZvTWVzc2FnZVwiID48L3NwYS1kYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHNwYS1kYXRldGltZSAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGV0aW1lJ1wiIFtkaXNwbGF5XT1cInN1YmZpZWxkLmFsaWFzID8/IHN1YmZpZWxkLm5hbWUgfCBjYW1lbFRvV29yZHNcIiBbKHZhbHVlKV09XCJkYXRhW3N1YmZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChzdWJmaWVsZCwgJGV2ZW50KVwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpIHx8IHRlc3RSZWFkT25seShzdWJmaWVsZClcIiBbbWluXT1cInN1YmZpZWxkLm1pblwiIFttYXhdPVwic3ViZmllbGQubWF4XCIgW2luZm9NZXNzYWdlXT1cInN1YmZpZWxkLmluZm9NZXNzYWdlXCIgPjwvc3BhLWRhdGV0aW1lPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHluYW1pY1NlbGVjdFRlbXBsYXRlOyBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJlYWRPbmx5OiB0ZXN0UmVhZE9ubHkuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q2hhbmdlZDogc2VsZWN0Q2hhbmdlZC5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHNwYS10ZXh0ICpuZ1N3aXRjaERlZmF1bHQgW2Rpc3BsYXldPVwic3ViZmllbGQuYWxpYXMgPz8gc3ViZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJzdWJmaWVsZC53aWR0aFwiICBbb3B0aW9uc109XCJzdWJmaWVsZC5vcHRpb25zXCIgW29wdGlvbkRpc3BsYXldPVwic3ViZmllbGQub3B0aW9uRGlzcGxheSA/PyAnbmFtZSdcIiBbb3B0aW9uVmFsdWVdPVwic3ViZmllbGQub3B0aW9uVmFsdWUgPz8gJ3ZhbHVlJ1wiIFtyb3dzXT1cInN1YmZpZWxkLnJvd3NcIiBbKHZhbHVlKV09XCJkYXRhW3N1YmZpZWxkLm5hbWVdXCIgKHZhbHVlQ2hhbmdlKT1cImlucHV0Q2hhbmdlZChzdWJmaWVsZCwgJGV2ZW50KVwiIFtyZXF1aXJlZF09XCJzdWJmaWVsZC5yZXF1aXJlZFwiIFttaW5dPVwic3ViZmllbGQubWluXCIgW21heF09XCJzdWJmaWVsZC5tYXhcIiBbcmVhZG9ubHldPVwidGVzdFJlYWRPbmx5KGZpZWxkKSB8fCB0ZXN0UmVhZE9ubHkoc3ViZmllbGQpXCIgW2hpbnRdPVwic3ViZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJzdWJmaWVsZC5pbmZvTWVzc2FnZVwiICBbc3VmZml4XT1cInN1YmZpZWxkLnN1ZmZpeFwiIFtjb3B5Q29udGVudF09XCJzdWJmaWVsZC5jb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwic3ViZmllbGQuY2xlYXJDb250ZW50XCIgW2xvYWRBY3Rpb25dPVwic3ViZmllbGQubG9hZEFjdGlvblwiPjwvc3BhLXRleHQ+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgPHNwYS10ZXh0ICpuZ1N3aXRjaERlZmF1bHQgW2Rpc3BsYXldPVwiZmllbGQuYWxpYXMgPz8gZmllbGQubmFtZSB8IGNhbWVsVG9Xb3Jkc1wiIFt3aWR0aF09XCJmaWVsZC53aWR0aFwiIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbb3B0aW9uRGlzcGxheV09XCJmaWVsZC5vcHRpb25EaXNwbGF5ID8/ICduYW1lJ1wiIFtvcHRpb25WYWx1ZV09XCJmaWVsZC5vcHRpb25WYWx1ZSA/PyAndmFsdWUnXCIgW3Jvd3NdPVwiZmllbGQucm93c1wiIFsodmFsdWUpXT1cImRhdGFbZmllbGQubmFtZV1cIiAodmFsdWVDaGFuZ2UpPVwiaW5wdXRDaGFuZ2VkKGZpZWxkLGRhdGFbZmllbGQubmFtZV0pXCIgW3JlcXVpcmVkXT1cImZpZWxkLnJlcXVpcmVkXCIgW21pbl09XCJmaWVsZC5taW5cIiBbbWF4XT1cImZpZWxkLm1heFwiIFtyZWFkb25seV09XCJ0ZXN0UmVhZE9ubHkoZmllbGQpXCIgW2hpbnRdPVwiZmllbGQuaGludFwiIFtpbmZvTWVzc2FnZV09XCJmaWVsZC5pbmZvTWVzc2FnZVwiICBbc3VmZml4XT1cImZpZWxkLnN1ZmZpeFwiIFtjb3B5Q29udGVudF09XCJmaWVsZC5jb3B5Q29udGVudFwiIFtjbGVhckNvbnRlbnRdPVwiZmllbGQuY2xlYXJDb250ZW50XCIgW2xvYWRBY3Rpb25dPVwiZmllbGQubG9hZEFjdGlvblwiPjwvc3BhLXRleHQ+XHJcblxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwic3Bhbi1jb2wtY2VudGVyXCIgKm5nSWY9XCJjb25maWcuYnV0dG9uXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICAoY2xpY2spPVwiYnV0dG9uQ2xpY2tlZCgpXCIgIGNka0ZvY3VzSW5pdGlhbD57e2J1dHRvbkRpc3BsYXl9fTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbjwvZGl2PlxyXG4iXX0=