@galacean/engine-physics-lite 0.0.0-experimental-animator-additive.1 → 0.0.0-experimental-animator-additive.2
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.
- package/dist/main.js +1 -1
- package/dist/module.js +1 -1
- package/package.json +4 -4
package/dist/main.js
CHANGED
|
@@ -1265,4 +1265,4 @@ exports.LitePhysics = /*#__PURE__*/ function() {
|
|
|
1265
1265
|
exports.LitePhysics = __decorate([
|
|
1266
1266
|
StaticInterfaceImplement()
|
|
1267
1267
|
], exports.LitePhysics);
|
|
1268
|
-
//# sourceMappingURL=main.js.map
|
|
1268
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuNS4wL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19zZXRfcHJvdG90eXBlX29mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW5oZXJpdHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jcmVhdGVfY2xhc3MuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnN0YW5jZW9mLmpzIiwiLi4vc3JjL0xpdGVVcGRhdGVGbGFnLnRzIiwiLi4vc3JjL0xpdGVVcGRhdGVGbGFnTWFuYWdlci50cyIsIi4uL3NyYy9zaGFwZS9MaXRlQ29sbGlkZXJTaGFwZS50cyIsIi4uL3NyYy9MaXRlVHJhbnNmb3JtLnRzIiwiLi4vc3JjL0xpdGVDb2xsaWRlci50cyIsIi4uL3NyYy9MaXRlRHluYW1pY0NvbGxpZGVyLnRzIiwiLi4vc3JjL0Rpc29yZGVyZWRBcnJheS50cyIsIi4uL3NyYy9MaXRlSGl0UmVzdWx0LnRzIiwiLi4vc3JjL3NoYXBlL0xpdGVCb3hDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL3NoYXBlL0xpdGVTcGhlcmVDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL0xpdGVQaHlzaWNzTWFuYWdlci50cyIsIi4uL3NyYy9MaXRlUGh5c2ljc01hdGVyaWFsLnRzIiwiLi4vc3JjL0xpdGVTdGF0aWNDb2xsaWRlci50cyIsIi4uL3NyYy9TdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQudHMiLCIuLi9zcmMvTGl0ZVBoeXNpY3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJleHBvcnQgZnVuY3Rpb24gX3NldF9wcm90b3R5cGVfb2YobywgcCkge1xuICAgIF9zZXRfcHJvdG90eXBlX29mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuXG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3NldF9wcm90b3R5cGVfb2YobywgcCk7XG59XG5leHBvcnQgeyBfc2V0X3Byb3RvdHlwZV9vZiBhcyBfIH07XG4iLCJpbXBvcnQgeyBfc2V0X3Byb3RvdHlwZV9vZiB9IGZyb20gXCIuL19zZXRfcHJvdG90eXBlX29mLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7XG5cbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldF9wcm90b3R5cGVfb2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIF8gfTtcbiIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuXG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfY3JlYXRlX2NsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcblxuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmV4cG9ydCB7IF9jcmVhdGVfY2xhc3MgYXMgXyB9O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIF9pbnN0YW5jZW9mKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKHJpZ2h0ICE9IG51bGwgJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiByaWdodFtTeW1ib2wuaGFzSW5zdGFuY2VdKSB7XG4gICAgICAgIHJldHVybiAhIXJpZ2h0W1N5bWJvbC5oYXNJbnN0YW5jZV0obGVmdCk7XG4gICAgfSBlbHNlIHJldHVybiBsZWZ0IGluc3RhbmNlb2YgcmlnaHQ7XG59XG5leHBvcnQgeyBfaW5zdGFuY2VvZiBhcyBfIH07XG4iLCIvKipcbiAqIEZhc3RseSByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGFycmF5LlxuICogQHBhcmFtIGFycmF5IC0gQXJyYXlcbiAqIEBwYXJhbSBpdGVtIC0gRWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbUFycmF5KGFycmF5OiBhbnlbXSwgaXRlbTogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyYXkuaW5kZXhPZihpdGVtKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBsYXN0ID0gYXJyYXkubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ICE9PSBsYXN0KSB7XG4gICAgYXJyYXlbaW5kZXhdID0gYXJyYXlbbGFzdF07XG4gIH1cbiAgYXJyYXkubGVuZ3RoLS07XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gdXBkYXRlIHRhZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlVXBkYXRlRmxhZyB7XG4gIC8qKiBGbGFnLiAqL1xuICBmbGFnID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9mbGFnczogTGl0ZVVwZGF0ZUZsYWdbXSA9IFtdKSB7XG4gICAgdGhpcy5fZmxhZ3MucHVzaCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95LlxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICByZW1vdmVGcm9tQXJyYXkodGhpcy5fZmxhZ3MsIHRoaXMpO1xuICAgIHRoaXMuX2ZsYWdzID0gbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWcgfSBmcm9tIFwiLi9MaXRlVXBkYXRlRmxhZ1wiO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBfdXBkYXRlRmxhZ3M6IExpdGVVcGRhdGVGbGFnW10gPSBbXTtcblxuICByZWdpc3RlcigpOiBMaXRlVXBkYXRlRmxhZyB7XG4gICAgcmV0dXJuIG5ldyBMaXRlVXBkYXRlRmxhZyh0aGlzLl91cGRhdGVGbGFncyk7XG4gIH1cblxuICBkaXN0cmlidXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZUZsYWdzID0gdGhpcy5fdXBkYXRlRmxhZ3M7XG4gICAgZm9yIChsZXQgaSA9IHVwZGF0ZUZsYWdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB1cGRhdGVGbGFnc1tpXS5mbGFnID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IElDb2xsaWRlclNoYXBlLCBJUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBNYXRyaXgsIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4uL0xpdGVIaXRSZXN1bHRcIjtcbmltcG9ydCB7IExpdGVUcmFuc2Zvcm0gfSBmcm9tIFwiLi4vTGl0ZVRyYW5zZm9ybVwiO1xuaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWcgfSBmcm9tIFwiLi4vTGl0ZVVwZGF0ZUZsYWdcIjtcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBmb3IgY29sbGlkZXIgc2hhcGVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGl0ZUNvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJQ29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgc3RhdGljIF9yYXkgPSBuZXcgUmF5KCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wUG9pbnQgPSBuZXcgVmVjdG9yMygpO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2lkOiBudW1iZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2NvbGxpZGVyOiBMaXRlQ29sbGlkZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3RyYW5zZm9ybTogTGl0ZVRyYW5zZm9ybSA9IG5ldyBMaXRlVHJhbnNmb3JtKCk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2ludk1vZGVsTWF0cml4OiBNYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2ludmVyc2VXb3JsZE1hdEZsYWc6IExpdGVVcGRhdGVGbGFnO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0ub3duZXIgPSB0aGlzO1xuICAgIHRoaXMuX2ludmVyc2VXb3JsZE1hdEZsYWcgPSB0aGlzLl90cmFuc2Zvcm0ucmVnaXN0ZXJXb3JsZENoYW5nZUZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0Um90YXRpb24gfVxuICAgKi9cbiAgc2V0Um90YXRpb24ocm90YXRpb246IFZlY3RvcjMpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldFJvdGF0aW9uLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0UG9zaXRpb24gfVxuICAgKi9cbiAgc2V0UG9zaXRpb24ocG9zaXRpb246IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgYWJzdHJhY3Qgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRDb250YWN0T2Zmc2V0IH1cbiAgICovXG4gIHNldENvbnRhY3RPZmZzZXQob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldENvbnRhY3RPZmZzZXQuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRNYXRlcmlhbCB9XG4gICAqL1xuICBzZXRNYXRlcmlhbChtYXRlcmlhbDogSVBoeXNpY3NNYXRlcmlhbCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWF0ZXJpYWwuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRVbmlxdWVJRCB9XG4gICAqL1xuICBzZXRVbmlxdWVJRChpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5faWQgPSBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0SXNUcmlnZ2VyIH1cbiAgICovXG4gIHNldElzVHJpZ2dlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0SXNUcmlnZ2VyLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuZGVzdHJveSB9XG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge31cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBhYnN0cmFjdCBfcmF5Y2FzdChyYXk6IFJheSwgaGl0OiBMaXRlSGl0UmVzdWx0KTogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgX3VwZGF0ZUhpdFJlc3VsdChcbiAgICByYXk6IFJheSxcbiAgICByYXlEaXN0YW5jZTogbnVtYmVyLFxuICAgIG91dEhpdDogTGl0ZUhpdFJlc3VsdCxcbiAgICBvcmlnaW46IFZlY3RvcjMsXG4gICAgaXNXb3JsZFJheTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGhpdFBvaW50ID0gTGl0ZUNvbGxpZGVyU2hhcGUuX3RlbXBQb2ludDtcbiAgICByYXkuZ2V0UG9pbnQocmF5RGlzdGFuY2UsIGhpdFBvaW50KTtcbiAgICBpZiAoIWlzV29ybGRSYXkpIHtcbiAgICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZShoaXRQb2ludCwgdGhpcy5fdHJhbnNmb3JtLndvcmxkTWF0cml4LCBoaXRQb2ludCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3RhbmNlKG9yaWdpbiwgaGl0UG9pbnQpO1xuXG4gICAgaWYgKGRpc3RhbmNlIDwgb3V0SGl0LmRpc3RhbmNlKSB7XG4gICAgICBvdXRIaXQucG9pbnQuY29weUZyb20oaGl0UG9pbnQpO1xuICAgICAgb3V0SGl0LmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICBvdXRIaXQuc2hhcGVJRCA9IHRoaXMuX2lkO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfZ2V0TG9jYWxSYXkocmF5OiBSYXkpOiBSYXkge1xuICAgIGNvbnN0IHdvcmxkVG9Mb2NhbCA9IHRoaXMuX2dldEludk1vZGVsTWF0cml4KCk7XG4gICAgY29uc3Qgb3V0UmF5ID0gTGl0ZUNvbGxpZGVyU2hhcGUuX3JheTtcblxuICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZShyYXkub3JpZ2luLCB3b3JsZFRvTG9jYWwsIG91dFJheS5vcmlnaW4pO1xuICAgIFZlY3RvcjMudHJhbnNmb3JtTm9ybWFsKHJheS5kaXJlY3Rpb24sIHdvcmxkVG9Mb2NhbCwgb3V0UmF5LmRpcmVjdGlvbik7XG4gICAgb3V0UmF5LmRpcmVjdGlvbi5ub3JtYWxpemUoKTtcblxuICAgIHJldHVybiBvdXRSYXk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRJbnZNb2RlbE1hdHJpeCgpOiBNYXRyaXgge1xuICAgIGlmICh0aGlzLl9pbnZlcnNlV29ybGRNYXRGbGFnLmZsYWcpIHtcbiAgICAgIE1hdHJpeC5pbnZlcnQodGhpcy5fdHJhbnNmb3JtLndvcmxkTWF0cml4LCB0aGlzLl9pbnZNb2RlbE1hdHJpeCk7XG4gICAgICB0aGlzLl9pbnZlcnNlV29ybGRNYXRGbGFnLmZsYWcgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2ludk1vZGVsTWF0cml4O1xuICB9XG59XG4iLCJpbXBvcnQgeyBNYXRoVXRpbCwgTWF0cml4LCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWcgfSBmcm9tIFwiLi9MaXRlVXBkYXRlRmxhZ1wiO1xuaW1wb3J0IHsgTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyIH0gZnJvbSBcIi4vTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5cbi8qKlxuICogVXNlZCB0byBpbXBsZW1lbnQgdHJhbnNmb3JtYXRpb24gcmVsYXRlZCBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBRdWF0MDogUXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wTWF0NDI6IE1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcblxuICBwcml2YXRlIF9wb3NpdGlvbjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIHByaXZhdGUgX3JvdGF0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBfcm90YXRpb25RdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgcHJpdmF0ZSBfc2NhbGU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcbiAgcHJpdmF0ZSBfd29ybGRSb3RhdGlvblF1YXRlcm5pb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuICBwcml2YXRlIF9sb2NhbE1hdHJpeDogTWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICBwcml2YXRlIF93b3JsZE1hdHJpeDogTWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuICBwcml2YXRlIF91cGRhdGVGbGFnTWFuYWdlcjogTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyID0gbmV3IExpdGVVcGRhdGVGbGFnTWFuYWdlcigpO1xuICBwcml2YXRlIF9pc1BhcmVudERpcnR5OiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfcGFyZW50VHJhbnNmb3JtQ2FjaGU6IExpdGVUcmFuc2Zvcm0gPSBudWxsO1xuICBwcml2YXRlIF9kaXJ0eUZsYWc6IG51bWJlciA9IFRyYW5zZm9ybUZsYWcuV21XcFdlV3FXcztcblxuICBwcml2YXRlIF9vd25lcjogTGl0ZUNvbGxpZGVyU2hhcGUgfCBMaXRlQ29sbGlkZXI7XG5cbiAgc2V0IG93bmVyKHZhbHVlOiBMaXRlQ29sbGlkZXJTaGFwZSB8IExpdGVDb2xsaWRlcikge1xuICAgIHRoaXMuX293bmVyID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogTG9jYWwgcG9zaXRpb24uXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCBwb3NpdGlvbigpOiBWZWN0b3IzIHtcbiAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gIH1cblxuICBzZXQgcG9zaXRpb24odmFsdWU6IFZlY3RvcjMpIHtcbiAgICBpZiAodGhpcy5fcG9zaXRpb24gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9wb3NpdGlvbi5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX3NldERpcnR5RmxhZ1RydWUoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCk7XG4gICAgdGhpcy5fdXBkYXRlV29ybGRQb3NpdGlvbkZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbCByb3RhdGlvbiwgZGVmaW5pbmcgdGhlIHJvdGF0aW9uIGJ5IHVzaW5nIGEgdW5pdCBxdWF0ZXJuaW9uLlxuICAgKiBAcmVtYXJrcyBOZWVkIHRvIHJlLWFzc2lnbiBhZnRlciBtb2RpZmljYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0YWtlcyBlZmZlY3QuXG4gICAqL1xuICBnZXQgcm90YXRpb25RdWF0ZXJuaW9uKCk6IFF1YXRlcm5pb24ge1xuICAgIGlmICh0aGlzLl9pc0NvbnRhaW5EaXJ0eUZsYWcoVHJhbnNmb3JtRmxhZy5Mb2NhbFF1YXQpKSB7XG4gICAgICBRdWF0ZXJuaW9uLnJvdGF0aW9uRXVsZXIoXG4gICAgICAgIE1hdGhVdGlsLmRlZ3JlZVRvUmFkaWFuKHRoaXMuX3JvdGF0aW9uLngpLFxuICAgICAgICBNYXRoVXRpbC5kZWdyZWVUb1JhZGlhbih0aGlzLl9yb3RhdGlvbi55KSxcbiAgICAgICAgTWF0aFV0aWwuZGVncmVlVG9SYWRpYW4odGhpcy5fcm90YXRpb24ueiksXG4gICAgICAgIHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvblxuICAgICAgKTtcbiAgICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxRdWF0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvbjtcbiAgfVxuXG4gIHNldCByb3RhdGlvblF1YXRlcm5pb24odmFsdWU6IFF1YXRlcm5pb24pIHtcbiAgICBpZiAodGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4IHwgVHJhbnNmb3JtRmxhZy5Mb2NhbEV1bGVyKTtcbiAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLkxvY2FsUXVhdCk7XG4gICAgdGhpcy5fdXBkYXRlV29ybGRSb3RhdGlvbkZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXb3JsZCByb3RhdGlvbiwgZGVmaW5pbmcgdGhlIHJvdGF0aW9uIGJ5IHVzaW5nIGEgdW5pdCBxdWF0ZXJuaW9uLlxuICAgKiBAcmVtYXJrcyBOZWVkIHRvIHJlLWFzc2lnbiBhZnRlciBtb2RpZmljYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0YWtlcyBlZmZlY3QuXG4gICAqL1xuICBnZXQgd29ybGRSb3RhdGlvblF1YXRlcm5pb24oKTogUXVhdGVybmlvbiB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLldvcmxkUXVhdCkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dldFBhcmVudFRyYW5zZm9ybSgpO1xuICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgIFF1YXRlcm5pb24ubXVsdGlwbHkocGFyZW50LndvcmxkUm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbiwgdGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odGhpcy5yb3RhdGlvblF1YXRlcm5pb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZFF1YXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb247XG4gIH1cblxuICBzZXQgd29ybGRSb3RhdGlvblF1YXRlcm5pb24odmFsdWU6IFF1YXRlcm5pb24pIHtcbiAgICBpZiAodGhpcy5fd29ybGRSb3RhdGlvblF1YXRlcm5pb24gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dldFBhcmVudFRyYW5zZm9ybSgpO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIFF1YXRlcm5pb24uaW52ZXJ0KHBhcmVudC53b3JsZFJvdGF0aW9uUXVhdGVybmlvbiwgTGl0ZVRyYW5zZm9ybS5fdGVtcFF1YXQwKTtcbiAgICAgIFF1YXRlcm5pb24ubXVsdGlwbHkodmFsdWUsIExpdGVUcmFuc2Zvcm0uX3RlbXBRdWF0MCwgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb247XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZFF1YXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2FsIHNjYWxpbmcuXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCBzY2FsZSgpOiBWZWN0b3IzIHtcbiAgICByZXR1cm4gdGhpcy5fc2NhbGU7XG4gIH1cblxuICBzZXQgc2NhbGUodmFsdWU6IFZlY3RvcjMpIHtcbiAgICBpZiAodGhpcy5fc2NhbGUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9zY2FsZS5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX3NldERpcnR5RmxhZ1RydWUoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCk7XG4gICAgdGhpcy5fdXBkYXRlV29ybGRTY2FsZUZsYWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbCBtYXRyaXguXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCBsb2NhbE1hdHJpeCgpOiBNYXRyaXgge1xuICAgIGlmICh0aGlzLl9pc0NvbnRhaW5EaXJ0eUZsYWcoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCkpIHtcbiAgICAgIE1hdHJpeC5hZmZpbmVUcmFuc2Zvcm1hdGlvbih0aGlzLl9zY2FsZSwgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24sIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9sb2NhbE1hdHJpeCk7XG4gICAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsTWF0cml4O1xuICB9XG5cbiAgc2V0IGxvY2FsTWF0cml4KHZhbHVlOiBNYXRyaXgpIHtcbiAgICBpZiAodGhpcy5fbG9jYWxNYXRyaXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2NhbE1hdHJpeC5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2xvY2FsTWF0cml4LmRlY29tcG9zZSh0aGlzLl9wb3NpdGlvbiwgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLl9zY2FsZSk7XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsRXVsZXIpO1xuICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxNYXRyaXgpO1xuICAgIHRoaXMuX3VwZGF0ZUFsbFdvcmxkRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdvcmxkIG1hdHJpeC5cbiAgICogQHJlbWFya3MgTmVlZCB0byByZS1hc3NpZ24gYWZ0ZXIgbW9kaWZpY2F0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFrZXMgZWZmZWN0LlxuICAgKi9cbiAgZ2V0IHdvcmxkTWF0cml4KCk6IE1hdHJpeCB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLldvcmxkTWF0cml4KSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50VHJhbnNmb3JtKCk7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIE1hdHJpeC5tdWx0aXBseShwYXJlbnQud29ybGRNYXRyaXgsIHRoaXMubG9jYWxNYXRyaXgsIHRoaXMuX3dvcmxkTWF0cml4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3dvcmxkTWF0cml4LmNvcHlGcm9tKHRoaXMubG9jYWxNYXRyaXgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZE1hdHJpeCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl93b3JsZE1hdHJpeDtcbiAgfVxuXG4gIHNldCB3b3JsZE1hdHJpeCh2YWx1ZTogTWF0cml4KSB7XG4gICAgaWYgKHRoaXMuX3dvcmxkTWF0cml4ICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fd29ybGRNYXRyaXguY29weUZyb20odmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnRUcmFuc2Zvcm0oKTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBNYXRyaXguaW52ZXJ0KHBhcmVudC53b3JsZE1hdHJpeCwgTGl0ZVRyYW5zZm9ybS5fdGVtcE1hdDQyKTtcbiAgICAgIE1hdHJpeC5tdWx0aXBseShMaXRlVHJhbnNmb3JtLl90ZW1wTWF0NDIsIHZhbHVlLCB0aGlzLl9sb2NhbE1hdHJpeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvY2FsTWF0cml4LmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5sb2NhbE1hdHJpeCA9IHRoaXMuX2xvY2FsTWF0cml4O1xuICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuV29ybGRNYXRyaXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBsb2NhbCBwb3NpdGlvbiBieSBYLCBZLCBaIHZhbHVlLlxuICAgKiBAcGFyYW0geCAtIFggY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0geSAtIFkgY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0geiAtIFogY29vcmRpbmF0ZVxuICAgKi9cbiAgc2V0UG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3Bvc2l0aW9uLnNldCh4LCB5LCB6KTtcbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5fcG9zaXRpb247XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxvY2FsIHJvdGF0aW9uIGJ5IHRoZSBYLCBZLCBaLCBhbmQgVyBjb21wb25lbnRzIG9mIHRoZSBxdWF0ZXJuaW9uLlxuICAgKiBAcGFyYW0geCAtIFggY29tcG9uZW50IG9mIHF1YXRlcm5pb25cbiAgICogQHBhcmFtIHkgLSBZIGNvbXBvbmVudCBvZiBxdWF0ZXJuaW9uXG4gICAqIEBwYXJhbSB6IC0gWiBjb21wb25lbnQgb2YgcXVhdGVybmlvblxuICAgKiBAcGFyYW0gdyAtIFcgY29tcG9uZW50IG9mIHF1YXRlcm5pb25cbiAgICovXG4gIHNldFJvdGF0aW9uUXVhdGVybmlvbih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCB3OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24uc2V0KHgsIHksIHosIHcpO1xuICAgIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uID0gdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBsb2NhbCBzY2FsaW5nIGJ5IHNjYWxpbmcgdmFsdWVzIGFsb25nIFgsIFksIFogYXhpcy5cbiAgICogQHBhcmFtIHggLSBTY2FsaW5nIGFsb25nIFggYXhpc1xuICAgKiBAcGFyYW0geSAtIFNjYWxpbmcgYWxvbmcgWSBheGlzXG4gICAqIEBwYXJhbSB6IC0gU2NhbGluZyBhbG9uZyBaIGF4aXNcbiAgICovXG4gIHNldFNjYWxlKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zY2FsZS5zZXQoeCwgeSwgeik7XG4gICAgdGhpcy5zY2FsZSA9IHRoaXMuX3NjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHdvcmxkIHRyYW5zZm9ybSBjaGFuZ2UgZmxhZy5cbiAgICogQHJldHVybnMgQ2hhbmdlIGZsYWdcbiAgICovXG4gIHJlZ2lzdGVyV29ybGRDaGFuZ2VGbGFnKCk6IExpdGVVcGRhdGVGbGFnIHtcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlRmxhZ01hbmFnZXIucmVnaXN0ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd29ybGRNYXRyaXg6IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXggdXBkYXRlIG9mIGl0c2VsZiBhbmQgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkUG9zaXRpb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXgsIGxvY2FsIHBvc2l0aW9uIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogSW4gc3VtbWFyeSwgYW55IHVwZGF0ZSBvZiByZWxhdGVkIHZhcmlhYmxlcyB3aWxsIGNhdXNlIHRoZSBkaXJ0eSBtYXJrIG9mIG9uZSBvZiB0aGUgZnVsbCBwcm9jZXNzICh3b3JsZE1hdHJpeCBvciB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbikgdG8gYmUgZmFsc2UuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZ3MoVHJhbnNmb3JtRmxhZy5XbVdwKSkge1xuICAgICAgdGhpcy5fd29ybGRBc3NvY2lhdGVkQ2hhbmdlKFRyYW5zZm9ybUZsYWcuV21XcCk7XG4gICAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXIpIHtcbiAgICAgICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fb3duZXIuX3NoYXBlcztcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbjogbnVtYmVyID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHNoYXBlc1tpXS5fdHJhbnNmb3JtLl91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3b3JsZE1hdHJpeDogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRQb3NpdGlvbjogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCwgbG9jYWwgcG9zaXRpb24gdXBkYXRlIG9mIGl0c2VsZiBhbmQgdGhlIHdvcmxkTWF0cml4IHVwZGF0ZSBvZiBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRSb3RhdGlvblF1YXRlcm5pb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGQgcm90YXRpb24gKGluIHF1YXRlcm5pb24pIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIGFsbCBwYXJlbnQgZW50aXRpZXMuXG4gICAqIEdldCB3b3JsZFJvdGF0aW9uOiBXaWxsIHRyaWdnZXIgdGhlIHdvcmxkIHJvdGF0aW9uKGluIGV1bGVyIGFuZCBxdWF0ZXJuaW9uKSB1cGRhdGUgb2YgaXRzZWxmIGFuZCB3b3JsZCByb3RhdGlvbihpbiBxdWF0ZXJuaW9uKSB1cGRhdGUgb2YgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogSW4gc3VtbWFyeSwgYW55IHVwZGF0ZSBvZiByZWxhdGVkIHZhcmlhYmxlcyB3aWxsIGNhdXNlIHRoZSBkaXJ0eSBtYXJrIG9mIG9uZSBvZiB0aGUgZnVsbCBwcm9jZXNzICh3b3JsZE1hdHJpeCBvciB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbikgdG8gYmUgZmFsc2UuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZygpIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZ3MoVHJhbnNmb3JtRmxhZy5XbVdlV3EpKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdlV3EpO1xuICAgICAgaWYgKHRoaXMuX293bmVyIGluc3RhbmNlb2YgTGl0ZUNvbGxpZGVyKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuX293bmVyLl9zaGFwZXM7XG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIG46IG51bWJlciA9IHNoYXBlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzaGFwZXNbaV0uX3RyYW5zZm9ybS5fdXBkYXRlV29ybGRSb3RhdGlvbkZsYWcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd29ybGRNYXRyaXg6IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXggdXBkYXRlIG9mIGl0c2VsZiBhbmQgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkUG9zaXRpb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGRNYXRyaXgsIGxvY2FsIHBvc2l0aW9uIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkU2NhbGU6IFdpbGwgdHJpZ2dlciB0aGUgc2NhbGluZyB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBJbiBzdW1tYXJ5LCBhbnkgdXBkYXRlIG9mIHJlbGF0ZWQgdmFyaWFibGVzIHdpbGwgY2F1c2UgdGhlIGRpcnR5IG1hcmsgb2Ygb25lIG9mIHRoZSBmdWxsIHByb2Nlc3MgKHdvcmxkTWF0cml4KSB0byBiZSBmYWxzZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZVdvcmxkU2NhbGVGbGFnKCkge1xuICAgIGlmICghdGhpcy5faXNDb250YWluRGlydHlGbGFncyhUcmFuc2Zvcm1GbGFnLldtV3MpKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdzKTtcbiAgICAgIGlmICh0aGlzLl9vd25lciBpbnN0YW5jZW9mIExpdGVDb2xsaWRlcikge1xuICAgICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLl9vd25lci5fc2hhcGVzO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBuOiBudW1iZXIgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgc2hhcGVzW2ldLl90cmFuc2Zvcm0uX3VwZGF0ZVdvcmxkU2NhbGVGbGFnKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFsbCB3b3JsZCB0cmFuc2Zvcm0gcHJvcGVydHkgZGlydHkgZmxhZywgdGhlIHByaW5jaXBsZSBpcyB0aGUgc2FtZSBhcyBhYm92ZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUFsbFdvcmxkRmxhZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZ3MoVHJhbnNmb3JtRmxhZy5XbVdwV2VXcVdzKSkge1xuICAgICAgdGhpcy5fd29ybGRBc3NvY2lhdGVkQ2hhbmdlKFRyYW5zZm9ybUZsYWcuV21XcFdlV3FXcyk7XG4gICAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXIpIHtcbiAgICAgICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fb3duZXIuX3NoYXBlcztcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbjogbnVtYmVyID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHNoYXBlc1tpXS5fdHJhbnNmb3JtLl91cGRhdGVBbGxXb3JsZEZsYWcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFBhcmVudFRyYW5zZm9ybSgpOiBMaXRlVHJhbnNmb3JtIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9pc1BhcmVudERpcnR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHJhbnNmb3JtQ2FjaGU7XG4gICAgfVxuICAgIGxldCBwYXJlbnRDYWNoZTogTGl0ZVRyYW5zZm9ybSA9IG51bGw7XG4gICAgaWYgKHRoaXMuX293bmVyIGluc3RhbmNlb2YgTGl0ZUNvbGxpZGVyU2hhcGUpIHtcbiAgICAgIGxldCBwYXJlbnQgPSB0aGlzLl9vd25lci5fY29sbGlkZXI7XG4gICAgICBwYXJlbnRDYWNoZSA9IHBhcmVudC5fdHJhbnNmb3JtO1xuICAgIH1cblxuICAgIHRoaXMuX3BhcmVudFRyYW5zZm9ybUNhY2hlID0gcGFyZW50Q2FjaGU7XG4gICAgdGhpcy5faXNQYXJlbnREaXJ0eSA9IGZhbHNlO1xuICAgIHJldHVybiBwYXJlbnRDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQ29udGFpbkRpcnR5RmxhZ3ModGFyZ2V0RGlydHlGbGFnczogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLl9kaXJ0eUZsYWcgJiB0YXJnZXREaXJ0eUZsYWdzKSA9PT0gdGFyZ2V0RGlydHlGbGFncztcbiAgfVxuXG4gIHByaXZhdGUgX2lzQ29udGFpbkRpcnR5RmxhZyh0eXBlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2RpcnR5RmxhZyAmIHR5cGUpICE9IDA7XG4gIH1cblxuICBwcml2YXRlIF9zZXREaXJ0eUZsYWdUcnVlKHR5cGU6IG51bWJlcikge1xuICAgIHRoaXMuX2RpcnR5RmxhZyB8PSB0eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGlydHlGbGFnRmFsc2UodHlwZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGlydHlGbGFnICY9IH50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBfd29ybGRBc3NvY2lhdGVkQ2hhbmdlKHR5cGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2RpcnR5RmxhZyB8PSB0eXBlO1xuICAgIHRoaXMuX3VwZGF0ZUZsYWdNYW5hZ2VyLmRpc3RyaWJ1dGUoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpcnR5IGZsYWcgb2YgdHJhbnNmb3JtLlxuICovXG5lbnVtIFRyYW5zZm9ybUZsYWcge1xuICBMb2NhbEV1bGVyID0gMHgxLFxuICBMb2NhbFF1YXQgPSAweDIsXG4gIFdvcmxkUG9zaXRpb24gPSAweDQsXG4gIFdvcmxkRXVsZXIgPSAweDgsXG4gIFdvcmxkUXVhdCA9IDB4MTAsXG4gIFdvcmxkU2NhbGUgPSAweDIwLFxuICBMb2NhbE1hdHJpeCA9IDB4NDAsXG4gIFdvcmxkTWF0cml4ID0gMHg4MCxcblxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZFBvc2l0aW9uICovXG4gIFdtV3AgPSAweDg0LFxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZEV1bGVyIHwgV29ybGRRdWF0ICovXG4gIFdtV2VXcSA9IDB4OTgsXG4gIC8qKiBXb3JsZE1hdHJpeCB8IFdvcmxkUG9zaXRpb24gfCBXb3JsZEV1bGVyIHwgV29ybGRRdWF0ICovXG4gIFdtV3BXZVdxID0gMHg5YyxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRTY2FsZSAqL1xuICBXbVdzID0gMHhhMCxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRQb3NpdGlvbiB8IFdvcmxkU2NhbGUgKi9cbiAgV21XcFdzID0gMHhhNCxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRQb3NpdGlvbiB8IFdvcmxkRXVsZXIgfCBXb3JsZFF1YXQgfCBXb3JsZFNjYWxlICovXG4gIFdtV3BXZVdxV3MgPSAweGJjXG59XG4iLCJpbXBvcnQgeyBJQ29sbGlkZXIgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4vTGl0ZUhpdFJlc3VsdFwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9MaXRlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZVRyYW5zZm9ybSB9IGZyb20gXCIuL0xpdGVUcmFuc2Zvcm1cIjtcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBvZiBwaHlzaWNhbCBjb2xsaWRlci5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExpdGVDb2xsaWRlciBpbXBsZW1lbnRzIElDb2xsaWRlciB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3NoYXBlczogTGl0ZUNvbGxpZGVyU2hhcGVbXSA9IFtdO1xuICAvKiogQGludGVybmFsICovXG4gIF90cmFuc2Zvcm06IExpdGVUcmFuc2Zvcm0gPSBuZXcgTGl0ZVRyYW5zZm9ybSgpO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0ub3duZXIgPSB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuYWRkU2hhcGUgfVxuICAgKi9cbiAgYWRkU2hhcGUoc2hhcGU6IExpdGVDb2xsaWRlclNoYXBlKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkQ29sbGlkZXIgPSBzaGFwZS5fY29sbGlkZXI7XG4gICAgaWYgKG9sZENvbGxpZGVyICE9PSB0aGlzKSB7XG4gICAgICBpZiAob2xkQ29sbGlkZXIpIHtcbiAgICAgICAgb2xkQ29sbGlkZXIucmVtb3ZlU2hhcGUoc2hhcGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2hhcGVzLnB1c2goc2hhcGUpO1xuICAgICAgc2hhcGUuX2NvbGxpZGVyID0gdGhpcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5yZW1vdmVTaGFwZSB9XG4gICAqL1xuICByZW1vdmVTaGFwZShzaGFwZTogTGl0ZUNvbGxpZGVyU2hhcGUpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NoYXBlcy5pbmRleE9mKHNoYXBlKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9zaGFwZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHNoYXBlLl9jb2xsaWRlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0gfVxuICAgKi9cbiAgc2V0V29ybGRUcmFuc2Zvcm0ocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRSb3RhdGlvblF1YXRlcm5pb24ocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueiwgcm90YXRpb24udyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5nZXRXb3JsZFRyYW5zZm9ybSB9XG4gICAqL1xuICBnZXRXb3JsZFRyYW5zZm9ybShvdXRQb3NpdGlvbjogVmVjdG9yMywgb3V0Um90YXRpb246IFF1YXRlcm5pb24pOiB2b2lkIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uLCByb3RhdGlvblF1YXRlcm5pb24gfSA9IHRoaXMuX3RyYW5zZm9ybTtcbiAgICBvdXRQb3NpdGlvbi5zZXQocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gICAgb3V0Um90YXRpb24uc2V0KHJvdGF0aW9uUXVhdGVybmlvbi54LCByb3RhdGlvblF1YXRlcm5pb24ueSwgcm90YXRpb25RdWF0ZXJuaW9uLnosIHJvdGF0aW9uUXVhdGVybmlvbi53KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyLmRlc3Ryb3kgfVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JheWNhc3QocmF5OiBSYXksIG9uUmF5Y2FzdDogKG9iajogbnVtYmVyKSA9PiBib29sZWFuLCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuIHtcbiAgICBoaXQuZGlzdGFuY2UgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuX3NoYXBlcztcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHNoYXBlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IHNoYXBlID0gc2hhcGVzW2ldO1xuICAgICAgb25SYXljYXN0KHNoYXBlLl9pZCkgJiYgc2hhcGUuX3JheWNhc3QocmF5LCBoaXQpO1xuICAgIH1cblxuICAgIHJldHVybiBoaXQuZGlzdGFuY2UgIT0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTGl0ZUNvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBJRHluYW1pY0NvbGxpZGVyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcblxuLyoqXG4gKiBBIGR5bmFtaWMgY29sbGlkZXIgY2FuIGFjdCB3aXRoIHNlbGYtZGVmaW5lZCBtb3ZlbWVudCBvciBwaHlzaWNhbCBmb3JjZVxuICovXG5leHBvcnQgY2xhc3MgTGl0ZUR5bmFtaWNDb2xsaWRlciBleHRlbmRzIExpdGVDb2xsaWRlciBpbXBsZW1lbnRzIElEeW5hbWljQ29sbGlkZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBkeW5hbWljIGFjdG9yLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBUaGUgZ2xvYmFsIHBvc2l0aW9uXG4gICAqIEBwYXJhbSByb3RhdGlvbiAtIFRoZSBnbG9iYWwgcm90YXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRSb3RhdGlvblF1YXRlcm5pb24ocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueiwgcm90YXRpb24udyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuYWRkRm9yY2UgfVxuICAgKi9cbiAgYWRkRm9yY2UoZm9yY2U6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGFkZEZvcmNlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLmFkZFRvcnF1ZSB9XG4gICAqL1xuICBhZGRUb3JxdWUodG9ycXVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBhZGRUb3JxdWUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIubW92ZSB9XG4gICAqL1xuICBtb3ZlKHBvc2l0aW9uT3JSb3RhdGlvbjogVmVjdG9yMyB8IFF1YXRlcm5pb24sIHJvdGF0aW9uPzogUXVhdGVybmlvbik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgbW92ZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zbGVlcCB9XG4gICAqL1xuICBzbGVlcCgpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHB1dFRvU2xlZXAuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0QW5ndWxhckRhbXBpbmcgfVxuICAgKi9cbiAgc2V0QW5ndWxhckRhbXBpbmcodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0QW5ndWxhckRhbXBpbmcuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0QW5ndWxhclZlbG9jaXR5IH1cbiAgICovXG4gIHNldEFuZ3VsYXJWZWxvY2l0eSh2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0QW5ndWxhclZlbG9jaXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldENlbnRlck9mTWFzcyB9XG4gICAqL1xuICBzZXRDZW50ZXJPZk1hc3ModmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldENlbnRlck9mTWFzcy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRDb2xsaXNpb25EZXRlY3Rpb25Nb2RlIH1cbiAgICovXG4gIHNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0Q29sbGlzaW9uRGV0ZWN0aW9uTW9kZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRDb25zdHJhaW50cyB9XG4gICAqL1xuICBzZXRDb25zdHJhaW50cyhmbGFnczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRDb25zdHJhaW50cy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRJbmVydGlhVGVuc29yIH1cbiAgICovXG4gIHNldEluZXJ0aWFUZW5zb3IodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldEluZXJ0aWFUZW5zb3IuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0SXNLaW5lbWF0aWMgfVxuICAgKi9cbiAgc2V0SXNLaW5lbWF0aWModmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldElzS2luZW1hdGljLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldExpbmVhckRhbXBpbmcgfVxuICAgKi9cbiAgc2V0TGluZWFyRGFtcGluZyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRMaW5lYXJEYW1waW5nLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldExpbmVhclZlbG9jaXR5IH1cbiAgICovXG4gIHNldExpbmVhclZlbG9jaXR5KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRMaW5lYXJWZWxvY2l0eS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXNzIH1cbiAgICovXG4gIHNldE1hc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWFzcy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXhBbmd1bGFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TWF4QW5ndWxhclZlbG9jaXR5KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldE1heEFuZ3VsYXJWZWxvY2l0eS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXhEZXBlbmV0cmF0aW9uVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TWF4RGVwZW5ldHJhdGlvblZlbG9jaXR5KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRTbGVlcFRocmVzaG9sZCB9XG4gICAqL1xuICBzZXRTbGVlcFRocmVzaG9sZCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRTbGVlcFRocmVzaG9sZC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRTb2x2ZXJJdGVyYXRpb25zIH1cbiAgICovXG4gIHNldFNvbHZlckl0ZXJhdGlvbnModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0U29sdmVySXRlcmF0aW9ucy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci53YWtlVXAgfVxuICAgKi9cbiAgd2FrZVVwKCk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgd2FrZVVwLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG59XG4iLCIvKipcbiAqIEhpZ2gtcGVyZm9ybWFuY2UgdW5vcmRlcmVkIGFycmF5LCBkZWxldGUgdXNlcyBleGNoYW5nZSBtZXRob2QgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgaW50ZXJuYWwgY2FwYWNpdHkgb25seSBpbmNyZWFzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXNvcmRlcmVkQXJyYXk8VD4ge1xuICBfZWxlbWVudHM6IFRbXTtcblxuICBsZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoY291bnQ6IG51bWJlciA9IDApIHtcbiAgICB0aGlzLl9lbGVtZW50cyA9IG5ldyBBcnJheTxUPihjb3VudCk7XG4gIH1cblxuICBhZGQoZWxlbWVudDogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gdGhpcy5fZWxlbWVudHMubGVuZ3RoKSB0aGlzLl9lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIGVsc2UgdGhpcy5fZWxlbWVudHNbdGhpcy5sZW5ndGhdID0gZWxlbWVudDtcbiAgICB0aGlzLmxlbmd0aCsrO1xuICB9XG5cbiAgZGVsZXRlKGVsZW1lbnQ6IFQpOiB2b2lkIHtcbiAgICAvL1RPRE86IEl0IGNhbiBiZSBvcHRpbWl6ZWQgZm9yIGN1c3RvbSBiaW5hcnkgc2VhcmNoIGFuZCBvdGhlciBhbGdvcml0aG1zLCBjdXJyZW50bHkgdGhpcy5fZWxlbWVudHM+PXRoaXMubGVuZ3RoIHdhc3RlcyBwZXJmb3JtYW5jZS5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2VsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgdGhpcy5kZWxldGVCeUluZGV4KGluZGV4KTtcbiAgfVxuXG4gIGdldChpbmRleDogbnVtYmVyKTogVCB7XG4gICAgaWYgKGluZGV4ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBcIkluZGV4IGlzIG91dCBvZiByYW5nZS5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzW2luZGV4XTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHJldHVybnMgVGhlIHJlcGxhY2VkIGl0ZW0gaXMgdXNlZCB0byByZXNldCBpdHMgaW5kZXguXG4gICAqL1xuICBkZWxldGVCeUluZGV4KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICB2YXIgZWxlbWVudHM6IFRbXSA9IHRoaXMuX2VsZW1lbnRzO1xuICAgIGxldCBlbmQ6IFQgPSBudWxsO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMubGVuZ3RoIC0gMTtcbiAgICBpZiAoaW5kZXggIT09IGxhc3RJbmRleCkge1xuICAgICAgZW5kID0gZWxlbWVudHNbbGFzdEluZGV4XTtcbiAgICAgIGVsZW1lbnRzW2luZGV4XSA9IGVuZDtcbiAgICB9XG4gICAgdGhpcy5sZW5ndGgtLTtcbiAgICByZXR1cm4gZW5kO1xuICB9XG5cbiAgZ2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZWxlbWVudHMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gIH1cbn1cbiIsImltcG9ydCB7IFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuXG4vKipcbiAqIFN0cnVjdHVyZSB1c2VkIHRvIGdldCBpbmZvcm1hdGlvbiBiYWNrIGZyb20gYSByYXljYXN0IG9yIGEgc3dlZXAuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVIaXRSZXN1bHQge1xuICAvKiogVGhlIGNvbGxpZGVyIHRoYXQgd2FzIGhpdC4gKi9cbiAgc2hhcGVJRDogbnVtYmVyID0gLTE7XG4gIC8qKiBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgb3JpZ2luIHRvIHRoZSBoaXQgcG9pbnQuICovXG4gIGRpc3RhbmNlOiBudW1iZXIgPSAwO1xuICAvKiogVGhlIGhpdCBwb2ludCBvZiB0aGUgY29sbGlkZXIgdGhhdCB3YXMgaGl0IGluIHdvcmxkIHNwYWNlLiAqL1xuICBwb2ludDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIC8qKiBUaGUgaGl0IG5vcm1hbCBvZiB0aGUgY29sbGlkZXIgdGhhdCB3YXMgaGl0IGluIHdvcmxkIHNwYWNlLiAqL1xuICBub3JtYWw6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xufVxuIiwiaW1wb3J0IHsgSUJveENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IEJvdW5kaW5nQm94LCBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZUhpdFJlc3VsdCB9IGZyb20gXCIuLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4uL0xpdGVQaHlzaWNzTWF0ZXJpYWxcIjtcblxuLyoqXG4gKiBCb3ggY29sbGlkZXIgc2hhcGUgaW4gTGl0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVCb3hDb2xsaWRlclNoYXBlIGV4dGVuZHMgTGl0ZUNvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJQm94Q29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wQm94OiBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICBwcml2YXRlIF9oYWxmU2l6ZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG4gIHByaXZhdGUgX3NjYWxlOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMSwgMSwgMSk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfYm94TWluOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoLTAuNSwgLTAuNSwgLTAuNSk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2JveE1heDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAuNSwgMC41LCAwLjUpO1xuXG4gIC8qKlxuICAgKiBJbml0IEJveCBTaGFwZS5cbiAgICogQHBhcmFtIHVuaXF1ZUlEIC0gVW5pcXVlSUQgbWFyayBTaGFwZS5cbiAgICogQHBhcmFtIHNpemUgLSBTaXplIG9mIFNoYXBlLlxuICAgKiBAcGFyYW0gbWF0ZXJpYWwgLSBNYXRlcmlhbCBvZiBQaHlzWENvbGxpZGVyLlxuICAgKi9cbiAgY29uc3RydWN0b3IodW5pcXVlSUQ6IG51bWJlciwgc2l6ZTogVmVjdG9yMywgbWF0ZXJpYWw6IExpdGVQaHlzaWNzTWF0ZXJpYWwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2lkID0gdW5pcXVlSUQ7XG4gICAgdGhpcy5faGFsZlNpemUuc2V0KHNpemUueCAqIDAuNSwgc2l6ZS55ICogMC41LCBzaXplLnogKiAwLjUpO1xuICAgIHRoaXMuX3NldEJvbmRpbmdCb3goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0UG9zaXRpb24gfVxuICAgKi9cbiAgc2V0UG9zaXRpb24ocG9zaXRpb246IFZlY3RvcjMpOiB2b2lkIHtcbiAgICBzdXBlci5zZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgdGhpcy5fc2V0Qm9uZGluZ0JveCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRXb3JsZFNjYWxlIH1cbiAgICovXG4gIHNldFdvcmxkU2NhbGUoc2NhbGU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0ucG9zaXRpb24gPSB0aGlzLl90cmFuc2Zvcm0ucG9zaXRpb24ubXVsdGlwbHkoc2NhbGUpO1xuICAgIHRoaXMuX3NjYWxlLmNvcHlGcm9tKHNjYWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUJveENvbGxpZGVyU2hhcGUuc2V0U2l6ZSB9XG4gICAqL1xuICBzZXRTaXplKHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhpcy5faGFsZlNpemUuc2V0KHZhbHVlLnggKiAwLjUsIHZhbHVlLnkgKiAwLjUsIHZhbHVlLnogKiAwLjUpO1xuICAgIHRoaXMuX3NldEJvbmRpbmdCb3goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yYXljYXN0KHJheTogUmF5LCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb2NhbFJheSA9IHRoaXMuX2dldExvY2FsUmF5KHJheSk7XG5cbiAgICBjb25zdCBib3VuZGluZ0JveCA9IExpdGVCb3hDb2xsaWRlclNoYXBlLl90ZW1wQm94O1xuICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoXG4gICAgICAtdGhpcy5faGFsZlNpemUueCAqIHRoaXMuX3NjYWxlLngsXG4gICAgICAtdGhpcy5faGFsZlNpemUueSAqIHRoaXMuX3NjYWxlLnksXG4gICAgICAtdGhpcy5faGFsZlNpemUueiAqIHRoaXMuX3NjYWxlLnpcbiAgICApO1xuICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoXG4gICAgICB0aGlzLl9oYWxmU2l6ZS54ICogdGhpcy5fc2NhbGUueCxcbiAgICAgIHRoaXMuX2hhbGZTaXplLnkgKiB0aGlzLl9zY2FsZS55LFxuICAgICAgdGhpcy5faGFsZlNpemUueiAqIHRoaXMuX3NjYWxlLnpcbiAgICApO1xuICAgIGNvbnN0IHJheURpc3RhbmNlID0gbG9jYWxSYXkuaW50ZXJzZWN0Qm94KGJvdW5kaW5nQm94KTtcbiAgICBpZiAocmF5RGlzdGFuY2UgIT09IC0xKSB7XG4gICAgICB0aGlzLl91cGRhdGVIaXRSZXN1bHQobG9jYWxSYXksIHJheURpc3RhbmNlLCBoaXQsIHJheS5vcmlnaW4pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRCb25kaW5nQm94KCk6IHZvaWQge1xuICAgIGNvbnN0IHsgcG9zaXRpb246IGNlbnRlciB9ID0gdGhpcy5fdHJhbnNmb3JtO1xuICAgIGNvbnN0IGhhbGZTaXplID0gdGhpcy5faGFsZlNpemU7XG5cbiAgICBWZWN0b3IzLmFkZChjZW50ZXIsIGhhbGZTaXplLCB0aGlzLl9ib3hNYXgpO1xuICAgIFZlY3RvcjMuc3VidHJhY3QoY2VudGVyLCBoYWxmU2l6ZSwgdGhpcy5fYm94TWluKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNwaGVyZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IEJvdW5kaW5nU3BoZXJlLCBRdWF0ZXJuaW9uLCBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUhpdFJlc3VsdCB9IGZyb20gXCIuLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4uL0xpdGVQaHlzaWNzTWF0ZXJpYWxcIjtcblxuLyoqXG4gKiBTcGhlcmUgY29sbGlkZXIgc2hhcGUgaW4gTGl0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVTcGhlcmVDb2xsaWRlclNoYXBlIGV4dGVuZHMgTGl0ZUNvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJU3BoZXJlQ29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wU3BoZXJlOiBCb3VuZGluZ1NwaGVyZSA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xuXG4gIHByaXZhdGUgX3JhZGl1czogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBfbWF4U2NhbGU6IG51bWJlciA9IDE7XG5cbiAgZ2V0IHdvcmxkUmFkaXVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JhZGl1cyAqIHRoaXMuX21heFNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgc3BoZXJlIHNoYXBlLlxuICAgKiBAcGFyYW0gdW5pcXVlSUQgLSBVbmlxdWVJRCBtYXJrIGNvbGxpZGVyXG4gICAqIEBwYXJhbSByYWRpdXMgLSBTaXplIG9mIFNwaGVyZUNvbGxpZGVyXG4gICAqIEBwYXJhbSBtYXRlcmlhbCAtIE1hdGVyaWFsIG9mIFBoeXNYQ29sbGlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHVuaXF1ZUlEOiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcmFkaXVzID0gcmFkaXVzO1xuICAgIHRoaXMuX2lkID0gdW5pcXVlSUQ7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElTcGhlcmVDb2xsaWRlclNoYXBlLnNldFJhZGl1cyB9XG4gICAqL1xuICBzZXRSYWRpdXModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JhZGl1cyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRXb3JsZFNjYWxlIH1cbiAgICovXG4gIHNldFdvcmxkU2NhbGUoc2NhbGU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl9tYXhTY2FsZSA9IE1hdGgubWF4KHNjYWxlLngsIE1hdGgubWF4KHNjYWxlLngsIHNjYWxlLnkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yYXljYXN0KHJheTogUmF5LCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuIHtcbiAgICBjb25zdCBib3VuZGluZ1NwaGVyZSA9IExpdGVTcGhlcmVDb2xsaWRlclNoYXBlLl90ZW1wU3BoZXJlO1xuICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZSh0aGlzLl90cmFuc2Zvcm0ucG9zaXRpb24sIHRoaXMuX2NvbGxpZGVyLl90cmFuc2Zvcm0ud29ybGRNYXRyaXgsIGJvdW5kaW5nU3BoZXJlLmNlbnRlcik7XG4gICAgYm91bmRpbmdTcGhlcmUucmFkaXVzID0gdGhpcy53b3JsZFJhZGl1cztcblxuICAgIGNvbnN0IHJheURpc3RhbmNlID0gcmF5LmludGVyc2VjdFNwaGVyZShib3VuZGluZ1NwaGVyZSk7XG4gICAgaWYgKHJheURpc3RhbmNlICE9PSAtMSkge1xuICAgICAgdGhpcy5fdXBkYXRlSGl0UmVzdWx0KHJheSwgcmF5RGlzdGFuY2UsIGhpdCwgcmF5Lm9yaWdpbiwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSUNoYXJhY3RlckNvbnRyb2xsZXIsIElQaHlzaWNzTWFuYWdlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgQm91bmRpbmdCb3gsIEJvdW5kaW5nU3BoZXJlLCBDb2xsaXNpb25VdGlsLCBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgRGlzb3JkZXJlZEFycmF5IH0gZnJvbSBcIi4vRGlzb3JkZXJlZEFycmF5XCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IExpdGVIaXRSZXN1bHQgfSBmcm9tIFwiLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlQm94Q29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVCb3hDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVTcGhlcmVDb2xsaWRlclNoYXBlXCI7XG5cbi8qKlxuICogQSBtYW5hZ2VyIGlzIGEgY29sbGVjdGlvbiBvZiBjb2xsaWRlcnMgYW5kIGNvbnN0cmFpbnRzIHdoaWNoIGNhbiBpbnRlcmFjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVQaHlzaWNzTWFuYWdlciBpbXBsZW1lbnRzIElQaHlzaWNzTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wU3BoZXJlOiBCb3VuZGluZ1NwaGVyZSA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVtcEJveDogQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2N1cnJlbnRIaXQ6IExpdGVIaXRSZXN1bHQgPSBuZXcgTGl0ZUhpdFJlc3VsdCgpO1xuICBwcml2YXRlIHN0YXRpYyBfaGl0UmVzdWx0OiBMaXRlSGl0UmVzdWx0ID0gbmV3IExpdGVIaXRSZXN1bHQoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNvbnRhY3RFbnRlcj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25Db250YWN0RXhpdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25Db250YWN0U3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25UcmlnZ2VyRW50ZXI/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uVHJpZ2dlckV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uVHJpZ2dlclN0YXk/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfY29sbGlkZXJzOiBMaXRlQ29sbGlkZXJbXSA9IFtdO1xuICBwcml2YXRlIF9zcGhlcmU6IEJvdW5kaW5nU3BoZXJlID0gbmV3IEJvdW5kaW5nU3BoZXJlKCk7XG4gIHByaXZhdGUgX2JveDogQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcblxuICBwcml2YXRlIF9jdXJyZW50RXZlbnRzOiBEaXNvcmRlcmVkQXJyYXk8VHJpZ2dlckV2ZW50PiA9IG5ldyBEaXNvcmRlcmVkQXJyYXk8VHJpZ2dlckV2ZW50PigpO1xuICBwcml2YXRlIF9ldmVudE1hcDogUmVjb3JkPG51bWJlciwgUmVjb3JkPG51bWJlciwgVHJpZ2dlckV2ZW50Pj4gPSB7fTtcbiAgcHJpdmF0ZSBfZXZlbnRQb29sOiBUcmlnZ2VyRXZlbnRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9uQ29udGFjdEVudGVyPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uQ29udGFjdEV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0U3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJFbnRlcj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJFeGl0PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlclN0YXk/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWRcbiAgKSB7XG4gICAgdGhpcy5fb25Db250YWN0RW50ZXIgPSBvbkNvbnRhY3RFbnRlcjtcbiAgICB0aGlzLl9vbkNvbnRhY3RFeGl0ID0gb25Db250YWN0RXhpdDtcbiAgICB0aGlzLl9vbkNvbnRhY3RTdGF5ID0gb25Db250YWN0U3RheTtcbiAgICB0aGlzLl9vblRyaWdnZXJFbnRlciA9IG9uVHJpZ2dlckVudGVyO1xuICAgIHRoaXMuX29uVHJpZ2dlckV4aXQgPSBvblRyaWdnZXJFeGl0O1xuICAgIHRoaXMuX29uVHJpZ2dlclN0YXkgPSBvblRyaWdnZXJTdGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIuc2V0R3Jhdml0eSB9XG4gICAqL1xuICBzZXRHcmF2aXR5KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBncmF2aXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLmFkZENvbGxpZGVyU2hhcGUgfVxuICAgKi9cbiAgYWRkQ29sbGlkZXJTaGFwZShjb2xsaWRlclNoYXBlOiBMaXRlQ29sbGlkZXJTaGFwZSk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50TWFwW2NvbGxpZGVyU2hhcGUuX2lkXSA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICByZW1vdmVDb2xsaWRlclNoYXBlKGNvbGxpZGVyU2hhcGU6IExpdGVDb2xsaWRlclNoYXBlKTogdm9pZCB7XG4gICAgY29uc3QgeyBfZXZlbnRQb29sOiBldmVudFBvb2wsIF9jdXJyZW50RXZlbnRzOiBjdXJyZW50RXZlbnRzIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgX2lkOiBzaGFwZUlEIH0gPSBjb2xsaWRlclNoYXBlO1xuICAgIGZvciAobGV0IGkgPSBjdXJyZW50RXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBldmVudCA9IGN1cnJlbnRFdmVudHMuZ2V0KGkpO1xuICAgICAgaWYgKGV2ZW50LmluZGV4MSA9PSBzaGFwZUlEIHx8IGV2ZW50LmluZGV4MiA9PSBzaGFwZUlEKSB7XG4gICAgICAgIGN1cnJlbnRFdmVudHMuZGVsZXRlQnlJbmRleChpKTtcbiAgICAgICAgZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUgdGhpcy5fZXZlbnRNYXBbc2hhcGVJRF07XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5hZGRDb2xsaWRlciB9XG4gICAqL1xuICBhZGRDb2xsaWRlcihhY3RvcjogTGl0ZUNvbGxpZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fY29sbGlkZXJzLnB1c2goYWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ29sbGlkZXIgfVxuICAgKi9cbiAgcmVtb3ZlQ29sbGlkZXIoY29sbGlkZXI6IExpdGVDb2xsaWRlcik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29sbGlkZXJzLmluZGV4T2YoY29sbGlkZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2NvbGxpZGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLnVwZGF0ZSB9XG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgY29sbGlkZXJzID0gdGhpcy5fY29sbGlkZXJzO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb2xsaWRlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbGxpc2lvbkRldGVjdGlvbihkZWx0YVRpbWUsIGNvbGxpZGVyc1tpXSk7XG4gICAgfVxuICAgIHRoaXMuX2ZpcmVFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmF5Y2FzdCB9XG4gICAqL1xuICByYXljYXN0KFxuICAgIHJheTogUmF5LFxuICAgIGRpc3RhbmNlOiBudW1iZXIsXG4gICAgb25SYXljYXN0OiAob2JqOiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgaGl0PzogKHNoYXBlVW5pcXVlSUQ6IG51bWJlciwgZGlzdGFuY2U6IG51bWJlciwgcG9zaXRpb246IFZlY3RvcjMsIG5vcm1hbDogVmVjdG9yMykgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2xsaWRlcnMgPSB0aGlzLl9jb2xsaWRlcnM7XG5cbiAgICBsZXQgaGl0UmVzdWx0OiBMaXRlSGl0UmVzdWx0O1xuICAgIGlmIChoaXQpIHtcbiAgICAgIGhpdFJlc3VsdCA9IExpdGVQaHlzaWNzTWFuYWdlci5faGl0UmVzdWx0O1xuICAgIH1cblxuICAgIGxldCBpc0hpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGN1ckhpdCA9IExpdGVQaHlzaWNzTWFuYWdlci5fY3VycmVudEhpdDtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sbGlkZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjb2xsaWRlciA9IGNvbGxpZGVyc1tpXTtcblxuICAgICAgaWYgKGNvbGxpZGVyLl9yYXljYXN0KHJheSwgb25SYXljYXN0LCBjdXJIaXQpKSB7XG4gICAgICAgIGlzSGl0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGN1ckhpdC5kaXN0YW5jZSA8IGRpc3RhbmNlKSB7XG4gICAgICAgICAgaWYgKGhpdFJlc3VsdCkge1xuICAgICAgICAgICAgaGl0UmVzdWx0Lm5vcm1hbC5jb3B5RnJvbShjdXJIaXQubm9ybWFsKTtcbiAgICAgICAgICAgIGhpdFJlc3VsdC5wb2ludC5jb3B5RnJvbShjdXJIaXQucG9pbnQpO1xuICAgICAgICAgICAgaGl0UmVzdWx0LmRpc3RhbmNlID0gY3VySGl0LmRpc3RhbmNlO1xuICAgICAgICAgICAgaGl0UmVzdWx0LnNoYXBlSUQgPSBjdXJIaXQuc2hhcGVJRDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpc3RhbmNlID0gY3VySGl0LmRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc0hpdCAmJiBoaXRSZXN1bHQpIHtcbiAgICAgIGhpdFJlc3VsdC5zaGFwZUlEID0gLTE7XG4gICAgICBoaXRSZXN1bHQuZGlzdGFuY2UgPSAwO1xuICAgICAgaGl0UmVzdWx0LnBvaW50LnNldCgwLCAwLCAwKTtcbiAgICAgIGhpdFJlc3VsdC5ub3JtYWwuc2V0KDAsIDAsIDApO1xuICAgIH0gZWxzZSBpZiAoaXNIaXQgJiYgaGl0UmVzdWx0KSB7XG4gICAgICBoaXQoaGl0UmVzdWx0LnNoYXBlSUQsIGhpdFJlc3VsdC5kaXN0YW5jZSwgaGl0UmVzdWx0LnBvaW50LCBoaXRSZXN1bHQubm9ybWFsKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSGl0O1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIuYWRkQ2hhcmFjdGVyQ29udHJvbGxlciB9XG4gICAqL1xuICBhZGRDaGFyYWN0ZXJDb250cm9sbGVyKGNoYXJhY3RlckNvbnRyb2xsZXI6IElDaGFyYWN0ZXJDb250cm9sbGVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBhZGRDaGFyYWN0ZXJDb250cm9sbGVyLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ2hhcmFjdGVyQ29udHJvbGxlciB9XG4gICAqL1xuICByZW1vdmVDaGFyYWN0ZXJDb250cm9sbGVyKGNoYXJhY3RlckNvbnRyb2xsZXI6IElDaGFyYWN0ZXJDb250cm9sbGVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCByZW1vdmVDaGFyYWN0ZXJDb250cm9sbGVyLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgYm91bmRpbmcgYm94IGluIHdvcmxkIHNwYWNlIGZyb20gYm94Q29sbGlkZXIuXG4gICAqIEBwYXJhbSBib3hDb2xsaWRlciAtIFRoZSBib3hDb2xsaWRlciB0byBjYWxjdWxhdGVcbiAgICogQHBhcmFtIG91dCAtIFRoZSBjYWxjdWxhdGVkIGJvdW5kaW5nQm94XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfdXBkYXRlV29ybGRCb3goYm94Q29sbGlkZXI6IExpdGVCb3hDb2xsaWRlclNoYXBlLCBvdXQ6IEJvdW5kaW5nQm94KTogdm9pZCB7XG4gICAgY29uc3QgbWF0ID0gYm94Q29sbGlkZXIuX3RyYW5zZm9ybS53b3JsZE1hdHJpeDtcbiAgICBvdXQubWluLmNvcHlGcm9tKGJveENvbGxpZGVyLl9ib3hNaW4pO1xuICAgIG91dC5tYXguY29weUZyb20oYm94Q29sbGlkZXIuX2JveE1heCk7XG4gICAgQm91bmRpbmdCb3gudHJhbnNmb3JtKG91dCwgbWF0LCBvdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3BoZXJlIGluZm8gb2YgdGhlIGdpdmVuIHNwaGVyZSBjb2xsaWRlciBpbiB3b3JsZCBzcGFjZS5cbiAgICogQHBhcmFtIHNwaGVyZUNvbGxpZGVyIC0gVGhlIGdpdmVuIHNwaGVyZSBjb2xsaWRlclxuICAgKiBAcGFyYW0gb3V0IC0gVGhlIGNhbGN1bGF0ZWQgYm91bmRpbmdTcGhlcmVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF91cFdvcmxkU3BoZXJlKHNwaGVyZUNvbGxpZGVyOiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSwgb3V0OiBCb3VuZGluZ1NwaGVyZSk6IHZvaWQge1xuICAgIFZlY3RvcjMudHJhbnNmb3JtQ29vcmRpbmF0ZShzcGhlcmVDb2xsaWRlci5fdHJhbnNmb3JtLnBvc2l0aW9uLCBzcGhlcmVDb2xsaWRlci5fdHJhbnNmb3JtLndvcmxkTWF0cml4LCBvdXQuY2VudGVyKTtcbiAgICBvdXQucmFkaXVzID0gc3BoZXJlQ29sbGlkZXIud29ybGRSYWRpdXM7XG4gIH1cblxuICBwcml2YXRlIF9nZXRUcmlnZ2VyKGluZGV4MTogbnVtYmVyLCBpbmRleDI6IG51bWJlcik6IFRyaWdnZXJFdmVudCB7XG4gICAgbGV0IGV2ZW50OiBUcmlnZ2VyRXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50UG9vbC5sZW5ndGgpIHtcbiAgICAgIGV2ZW50ID0gdGhpcy5fZXZlbnRQb29sLnBvcCgpO1xuICAgICAgZXZlbnQuaW5kZXgxID0gaW5kZXgxO1xuICAgICAgZXZlbnQuaW5kZXgyID0gaW5kZXgyO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudCA9IG5ldyBUcmlnZ2VyRXZlbnQoaW5kZXgxLCBpbmRleDIpO1xuICAgIH1cbiAgICB0aGlzLl9ldmVudE1hcFtpbmRleDFdW2luZGV4Ml0gPSBldmVudDtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICBwcml2YXRlIF9jb2xsaXNpb25EZXRlY3Rpb24oZGVsdGFUaW1lOiBudW1iZXIsIG15Q29sbGlkZXI6IExpdGVDb2xsaWRlcik6IHZvaWQge1xuICAgIGNvbnN0IGNvbGxpZGVycyA9IHRoaXMuX2NvbGxpZGVycztcblxuICAgIGNvbnN0IG15Q29sbGlkZXJTaGFwZXMgPSBteUNvbGxpZGVyLl9zaGFwZXM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG15Q29sbGlkZXJTaGFwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IG15U2hhcGUgPSBteUNvbGxpZGVyU2hhcGVzW2ldO1xuICAgICAgaWYgKG15U2hhcGUgaW5zdGFuY2VvZiBMaXRlQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwZGF0ZVdvcmxkQm94KG15U2hhcGUsIHRoaXMuX2JveCk7XG4gICAgICAgIGZvciAobGV0IGogPSAwLCBsZW4gPSBjb2xsaWRlcnMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBjb2xsaWRlclNoYXBlID0gY29sbGlkZXJzW2pdLl9zaGFwZXM7XG4gICAgICAgICAgZm9yIChsZXQgayA9IDAsIGxlbiA9IGNvbGxpZGVyU2hhcGUubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlID0gY29sbGlkZXJTaGFwZVtrXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4MSA9IHNoYXBlLl9pZDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IG15U2hhcGUuX2lkO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBpbmRleDEgPCBpbmRleDIgPyB0aGlzLl9ldmVudE1hcFtpbmRleDFdW2luZGV4Ml0gOiB0aGlzLl9ldmVudE1hcFtpbmRleDJdW2luZGV4MV07XG4gICAgICAgICAgICBpZiAoZXZlbnQgIT09IHVuZGVmaW5lZCAmJiAhZXZlbnQuYWxyZWFkeUludm9rZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcGUgIT0gbXlTaGFwZSAmJiB0aGlzLl9ib3hDb2xsaXNpb24oc2hhcGUpKSB7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBpbmRleDEgPCBpbmRleDIgPyB0aGlzLl9nZXRUcmlnZ2VyKGluZGV4MSwgaW5kZXgyKSA6IHRoaXMuX2dldFRyaWdnZXIoaW5kZXgyLCBpbmRleDEpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRlID0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXI7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RXZlbnRzLmFkZChldmVudCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT09IFRyaWdnZXJFdmVudFN0YXRlLkVudGVyKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5TdGF5O1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT09IFRyaWdnZXJFdmVudFN0YXRlLlN0YXkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG15U2hhcGUgaW5zdGFuY2VvZiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwV29ybGRTcGhlcmUobXlTaGFwZSwgdGhpcy5fc3BoZXJlKTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IGNvbGxpZGVycy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbGxpZGVyU2hhcGUgPSBjb2xsaWRlcnNbal0uX3NoYXBlcztcbiAgICAgICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gY29sbGlkZXJTaGFwZS5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSBjb2xsaWRlclNoYXBlW2tdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgxID0gc2hhcGUuX2lkO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gbXlTaGFwZS5faWQ7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2V2ZW50TWFwW2luZGV4MV1baW5kZXgyXSA6IHRoaXMuX2V2ZW50TWFwW2luZGV4Ml1baW5kZXgxXTtcbiAgICAgICAgICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkICYmICFldmVudC5hbHJlYWR5SW52b2tlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFwZSAhPSBteVNoYXBlICYmIHRoaXMuX3NwaGVyZUNvbGxpc2lvbihzaGFwZSkpIHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2dldFRyaWdnZXIoaW5kZXgxLCBpbmRleDIpIDogdGhpcy5fZ2V0VHJpZ2dlcihpbmRleDIsIGluZGV4MSk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcjtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFdmVudHMuYWRkKGV2ZW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXIpIHtcbiAgICAgICAgICAgICAgICBldmVudC5zdGF0ZSA9IFRyaWdnZXJFdmVudFN0YXRlLlN0YXk7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuU3RheSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maXJlRXZlbnQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBfZXZlbnRQb29sOiBldmVudFBvb2wsIF9jdXJyZW50RXZlbnRzOiBjdXJyZW50RXZlbnRzIH0gPSB0aGlzO1xuICAgIGZvciAobGV0IGkgPSBjdXJyZW50RXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBldmVudCA9IGN1cnJlbnRFdmVudHMuZ2V0KGkpO1xuICAgICAgaWYgKCFldmVudC5hbHJlYWR5SW52b2tlZCkge1xuICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXIpIHtcbiAgICAgICAgICB0aGlzLl9vblRyaWdnZXJFbnRlcihldmVudC5pbmRleDEsIGV2ZW50LmluZGV4Mik7XG4gICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09IFRyaWdnZXJFdmVudFN0YXRlLlN0YXkpIHtcbiAgICAgICAgICB0aGlzLl9vblRyaWdnZXJTdGF5KGV2ZW50LmluZGV4MSwgZXZlbnQuaW5kZXgyKTtcbiAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnN0YXRlID0gVHJpZ2dlckV2ZW50U3RhdGUuRXhpdDtcbiAgICAgICAgdGhpcy5fZXZlbnRNYXBbZXZlbnQuaW5kZXgxXVtldmVudC5pbmRleDJdID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuX29uVHJpZ2dlckV4aXQoZXZlbnQuaW5kZXgxLCBldmVudC5pbmRleDIpO1xuXG4gICAgICAgIGN1cnJlbnRFdmVudHMuZGVsZXRlQnlJbmRleChpKTtcbiAgICAgICAgZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2JveENvbGxpc2lvbihvdGhlcjogTGl0ZUNvbGxpZGVyU2hhcGUpOiBib29sZWFuIHtcbiAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3QgYm94ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wQm94O1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cGRhdGVXb3JsZEJveChvdGhlciwgYm94KTtcbiAgICAgIHJldHVybiBDb2xsaXNpb25VdGlsLmludGVyc2VjdHNCb3hBbmRCb3goYm94LCB0aGlzLl9ib3gpO1xuICAgIH0gZWxzZSBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3Qgc3BoZXJlID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wU3BoZXJlO1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cFdvcmxkU3BoZXJlKG90aGVyLCBzcGhlcmUpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c1NwaGVyZUFuZEJveChzcGhlcmUsIHRoaXMuX2JveCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NwaGVyZUNvbGxpc2lvbihvdGhlcjogTGl0ZUNvbGxpZGVyU2hhcGUpOiBib29sZWFuIHtcbiAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3QgYm94ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wQm94O1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cGRhdGVXb3JsZEJveChvdGhlciwgYm94KTtcbiAgICAgIHJldHVybiBDb2xsaXNpb25VdGlsLmludGVyc2VjdHNTcGhlcmVBbmRCb3godGhpcy5fc3BoZXJlLCBib3gpO1xuICAgIH0gZWxzZSBpZiAob3RoZXIgaW5zdGFuY2VvZiBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgY29uc3Qgc3BoZXJlID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl90ZW1wU3BoZXJlO1xuICAgICAgTGl0ZVBoeXNpY3NNYW5hZ2VyLl91cFdvcmxkU3BoZXJlKG90aGVyLCBzcGhlcmUpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c1NwaGVyZUFuZFNwaGVyZShzcGhlcmUsIHRoaXMuX3NwaGVyZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFBoeXNpY3Mgc3RhdGVcbiAqL1xuZW51bSBUcmlnZ2VyRXZlbnRTdGF0ZSB7XG4gIEVudGVyLFxuICBTdGF5LFxuICBFeGl0XG59XG5cbi8qKlxuICogVHJpZ2dlciBldmVudCB0byBzdG9yZSBpbnRlcmFjdGl2ZSBvYmplY3QgaWRzIGFuZCBzdGF0ZS5cbiAqL1xuY2xhc3MgVHJpZ2dlckV2ZW50IHtcbiAgc3RhdGU6IFRyaWdnZXJFdmVudFN0YXRlO1xuICBpbmRleDE6IG51bWJlcjtcbiAgaW5kZXgyOiBudW1iZXI7XG4gIGFscmVhZHlJbnZva2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKSB7XG4gICAgdGhpcy5pbmRleDEgPSBpbmRleDE7XG4gICAgdGhpcy5pbmRleDIgPSBpbmRleDI7XG4gIH1cbn1cbiIsImltcG9ydCB7IElQaHlzaWNzTWF0ZXJpYWwgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcblxuLyoqXG4gKiBQaHlzaWNzIG1hdGVyaWFsIGRlc2NyaWJlcyBob3cgdG8gaGFuZGxlIGNvbGxpZGluZyBvYmplY3RzIChmcmljdGlvbiwgYm91bmNpbmVzcykuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlUGh5c2ljc01hdGVyaWFsIGltcGxlbWVudHMgSVBoeXNpY3NNYXRlcmlhbCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0YXRpY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgZHluYW1pY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgYm91bmNpbmVzczogbnVtYmVyLFxuICAgIGZyaWN0aW9uQ29tYmluZTogbnVtYmVyLFxuICAgIGJvdW5jZUNvbWJpbmU6IG51bWJlclxuICApIHt9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEJvdW5jaW5lc3MgfVxuICAgKi9cbiAgc2V0Qm91bmNpbmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldER5bmFtaWNGcmljdGlvbiB9XG4gICAqL1xuICBzZXREeW5hbWljRnJpY3Rpb24odmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgcGh5c2ljcyBtYXRlcmlhbC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYXRlcmlhbC5zZXRTdGF0aWNGcmljdGlvbiB9XG4gICAqL1xuICBzZXRTdGF0aWNGcmljdGlvbih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEJvdW5jZUNvbWJpbmUgfVxuICAgKi9cbiAgc2V0Qm91bmNlQ29tYmluZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEZyaWN0aW9uQ29tYmluZSB9XG4gICAqL1xuICBzZXRGcmljdGlvbkNvbWJpbmUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgcGh5c2ljcyBtYXRlcmlhbC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYXRlcmlhbC5kZXN0cm95IH1cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7fVxufVxuIiwiaW1wb3J0IHsgSVN0YXRpY0NvbGxpZGVyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuXG4vKipcbiAqIEEgc3RhdGljIGNvbGxpZGVyIGNvbXBvbmVudCB0aGF0IHdpbGwgbm90IG1vdmUuXG4gKiBAcmVtYXJrcyBNb3N0bHkgdXNlZCBmb3Igb2JqZWN0IHdoaWNoIGFsd2F5cyBzdGF5cyBhdCB0aGUgc2FtZSBwbGFjZSBhbmQgbmV2ZXIgbW92ZXMgYXJvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVN0YXRpY0NvbGxpZGVyIGV4dGVuZHMgTGl0ZUNvbGxpZGVyIGltcGxlbWVudHMgSVN0YXRpY0NvbGxpZGVyIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgc3RhdGljIGFjdG9yLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBUaGUgZ2xvYmFsIHBvc2l0aW9uXG4gICAqIEBwYXJhbSByb3RhdGlvbiAtIFRoZSBnbG9iYWwgcm90YXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopO1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRSb3RhdGlvblF1YXRlcm5pb24ocm90YXRpb24ueCwgcm90YXRpb24ueSwgcm90YXRpb24ueiwgcm90YXRpb24udyk7XG4gIH1cbn1cbiIsIi8qKlxuICogIFN0YXRpYyBpbnRlcmZhY2UgaW1wbGVtZW50IGRlY29yYXRvci5cbiAqICBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMzk1NTE1Ny9ob3ctdG8tZGVmaW5lLXN0YXRpYy1wcm9wZXJ0eS1pbi10eXBlc2NyaXB0LWludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50PFQ+KCkge1xuICByZXR1cm4gPFUgZXh0ZW5kcyBUPihjb25zdHJ1Y3RvcjogVSkgPT4ge1xuICAgIGNvbnN0cnVjdG9yO1xuICB9O1xufVxuIiwiaW1wb3J0IHtcbiAgSUJveENvbGxpZGVyU2hhcGUsXG4gIElDYXBzdWxlQ29sbGlkZXJTaGFwZSxcbiAgSUNoYXJhY3RlckNvbnRyb2xsZXIsXG4gIElEeW5hbWljQ29sbGlkZXIsXG4gIElQaHlzaWNzLFxuICBJUGh5c2ljc01hbmFnZXIsXG4gIElQaHlzaWNzTWF0ZXJpYWwsXG4gIElQbGFuZUNvbGxpZGVyU2hhcGUsXG4gIElTcGhlcmVDb2xsaWRlclNoYXBlLFxuICBJU3RhdGljQ29sbGlkZXIsXG4gIElGaXhlZEpvaW50LFxuICBJSGluZ2VKb2ludCxcbiAgSVNwcmluZ0pvaW50LFxufSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUR5bmFtaWNDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVEeW5hbWljQ29sbGlkZXJcIjtcbmltcG9ydCB7IExpdGVQaHlzaWNzTWFuYWdlciB9IGZyb20gXCIuL0xpdGVQaHlzaWNzTWFuYWdlclwiO1xuaW1wb3J0IHsgTGl0ZVBoeXNpY3NNYXRlcmlhbCB9IGZyb20gXCIuL0xpdGVQaHlzaWNzTWF0ZXJpYWxcIjtcbmltcG9ydCB7IExpdGVTdGF0aWNDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVTdGF0aWNDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZUJveENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9MaXRlQm94Q29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9MaXRlU3BoZXJlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBTdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQgfSBmcm9tIFwiLi9TdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnRcIjtcblxuQFN0YXRpY0ludGVyZmFjZUltcGxlbWVudDxJUGh5c2ljcz4oKVxuZXhwb3J0IGNsYXNzIExpdGVQaHlzaWNzIHtcbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVQaHlzaWNzTWFuYWdlciB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGh5c2ljc01hbmFnZXIoXG4gICAgb25Db250YWN0QmVnaW4/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0RW5kPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uQ29udGFjdFBlcnNpc3Q/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyQmVnaW4/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyRW5kPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlclBlcnNpc3Q/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWRcbiAgKTogSVBoeXNpY3NNYW5hZ2VyIHtcbiAgICByZXR1cm4gbmV3IExpdGVQaHlzaWNzTWFuYWdlcihcbiAgICAgIG9uQ29udGFjdEJlZ2luLFxuICAgICAgb25Db250YWN0RW5kLFxuICAgICAgb25Db250YWN0UGVyc2lzdCxcbiAgICAgIG9uVHJpZ2dlckJlZ2luLFxuICAgICAgb25UcmlnZ2VyRW5kLFxuICAgICAgb25UcmlnZ2VyUGVyc2lzdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVN0YXRpY0NvbGxpZGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTdGF0aWNDb2xsaWRlcihwb3NpdGlvbjogVmVjdG9yMywgcm90YXRpb246IFF1YXRlcm5pb24pOiBJU3RhdGljQ29sbGlkZXIge1xuICAgIHJldHVybiBuZXcgTGl0ZVN0YXRpY0NvbGxpZGVyKHBvc2l0aW9uLCByb3RhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUR5bmFtaWNDb2xsaWRlciB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlRHluYW1pY0NvbGxpZGVyKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbik6IElEeW5hbWljQ29sbGlkZXIge1xuICAgIHJldHVybiBuZXcgTGl0ZUR5bmFtaWNDb2xsaWRlcihwb3NpdGlvbiwgcm90YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyKCk6IElDaGFyYWN0ZXJDb250cm9sbGVyIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGNyZWF0ZUNoYXJhY3RlckNvbnRyb2xsZXIuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVBoeXNpY3NNYXRlcmlhbCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGh5c2ljc01hdGVyaWFsKFxuICAgIHN0YXRpY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgZHluYW1pY0ZyaWN0aW9uOiBudW1iZXIsXG4gICAgYm91bmNpbmVzczogbnVtYmVyLFxuICAgIGZyaWN0aW9uQ29tYmluZTogbnVtYmVyLFxuICAgIGJvdW5jZUNvbWJpbmU6IG51bWJlclxuICApOiBJUGh5c2ljc01hdGVyaWFsIHtcbiAgICByZXR1cm4gbmV3IExpdGVQaHlzaWNzTWF0ZXJpYWwoc3RhdGljRnJpY3Rpb24sIGR5bmFtaWNGcmljdGlvbiwgYm91bmNpbmVzcywgZnJpY3Rpb25Db21iaW5lLCBib3VuY2VDb21iaW5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlQm94Q29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlQm94Q29sbGlkZXJTaGFwZSh1bmlxdWVJRDogbnVtYmVyLCBzaXplOiBWZWN0b3IzLCBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbCk6IElCb3hDb2xsaWRlclNoYXBlIHtcbiAgICByZXR1cm4gbmV3IExpdGVCb3hDb2xsaWRlclNoYXBlKHVuaXF1ZUlELCBzaXplLCBtYXRlcmlhbCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVNwaGVyZUNvbGxpZGVyU2hhcGUgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNwaGVyZUNvbGxpZGVyU2hhcGUoXG4gICAgdW5pcXVlSUQ6IG51bWJlcixcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbFxuICApOiBJU3BoZXJlQ29sbGlkZXJTaGFwZSB7XG4gICAgcmV0dXJuIG5ldyBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSh1bmlxdWVJRCwgcmFkaXVzLCBtYXRlcmlhbCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVBsYW5lQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGxhbmVDb2xsaWRlclNoYXBlKHVuaXF1ZUlEOiBudW1iZXIsIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsKTogSVBsYW5lQ29sbGlkZXJTaGFwZSB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBQbGFuZUNvbGxpZGVyU2hhcGUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUNhcHN1bGVDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDYXBzdWxlQ29sbGlkZXJTaGFwZShcbiAgICB1bmlxdWVJRDogbnVtYmVyLFxuICAgIHJhZGl1czogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsXG4gICk6IElDYXBzdWxlQ29sbGlkZXJTaGFwZSB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBDYXBzdWxlQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlRml4ZWRKb2ludCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlRml4ZWRKb2ludChjb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogSUZpeGVkSm9pbnQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgQ2Fwc3VsZUNvbGxpZGVyU2hhcGUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUhpbmdlSm9pbnQgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUhpbmdlSm9pbnQoY29sbGlkZXI6IExpdGVDb2xsaWRlcik6IElIaW5nZUpvaW50IHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IENhcHN1bGVDb2xsaWRlclNoYXBlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVTcHJpbmdKb2ludCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU3ByaW5nSm9pbnQoY29sbGlkZXI6IExpdGVDb2xsaWRlcik6IElTcHJpbmdKb2ludCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBDYXBzdWxlQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJlbW92ZUZyb21BcnJheSIsImFycmF5IiwiaXRlbSIsImluZGV4IiwiaW5kZXhPZiIsImxhc3QiLCJsZW5ndGgiLCJMaXRlVXBkYXRlRmxhZyIsIl9mbGFncyIsImZsYWciLCJwdXNoIiwiZGVzdHJveSIsIkxpdGVVcGRhdGVGbGFnTWFuYWdlciIsIl91cGRhdGVGbGFncyIsInJlZ2lzdGVyIiwiZGlzdHJpYnV0ZSIsInVwZGF0ZUZsYWdzIiwiaSIsIkxpdGVDb2xsaWRlclNoYXBlIiwiX3RyYW5zZm9ybSIsIkxpdGVUcmFuc2Zvcm0iLCJfaW52TW9kZWxNYXRyaXgiLCJNYXRyaXgiLCJvd25lciIsIl9pbnZlcnNlV29ybGRNYXRGbGFnIiwicmVnaXN0ZXJXb3JsZENoYW5nZUZsYWciLCJzZXRSb3RhdGlvbiIsInJvdGF0aW9uIiwiY29uc29sZSIsImxvZyIsInNldFBvc2l0aW9uIiwicG9zaXRpb24iLCJ4IiwieSIsInoiLCJzZXRDb250YWN0T2Zmc2V0Iiwib2Zmc2V0Iiwic2V0TWF0ZXJpYWwiLCJtYXRlcmlhbCIsInNldFVuaXF1ZUlEIiwiaWQiLCJfaWQiLCJzZXRJc1RyaWdnZXIiLCJ2YWx1ZSIsIl91cGRhdGVIaXRSZXN1bHQiLCJyYXkiLCJyYXlEaXN0YW5jZSIsIm91dEhpdCIsIm9yaWdpbiIsImlzV29ybGRSYXkiLCJoaXRQb2ludCIsIl90ZW1wUG9pbnQiLCJnZXRQb2ludCIsIlZlY3RvcjMiLCJ0cmFuc2Zvcm1Db29yZGluYXRlIiwid29ybGRNYXRyaXgiLCJkaXN0YW5jZSIsInBvaW50IiwiY29weUZyb20iLCJzaGFwZUlEIiwiX2dldExvY2FsUmF5Iiwid29ybGRUb0xvY2FsIiwiX2dldEludk1vZGVsTWF0cml4Iiwib3V0UmF5IiwiX3JheSIsInRyYW5zZm9ybU5vcm1hbCIsImRpcmVjdGlvbiIsIm5vcm1hbGl6ZSIsImludmVydCIsIlJheSIsIl9wb3NpdGlvbiIsIl9yb3RhdGlvbiIsIl9yb3RhdGlvblF1YXRlcm5pb24iLCJRdWF0ZXJuaW9uIiwiX3NjYWxlIiwiX3dvcmxkUm90YXRpb25RdWF0ZXJuaW9uIiwiX2xvY2FsTWF0cml4IiwiX3dvcmxkTWF0cml4IiwiX3VwZGF0ZUZsYWdNYW5hZ2VyIiwiX2lzUGFyZW50RGlydHkiLCJfcGFyZW50VHJhbnNmb3JtQ2FjaGUiLCJfZGlydHlGbGFnIiwic2V0Iiwic2V0Um90YXRpb25RdWF0ZXJuaW9uIiwidyIsInJvdGF0aW9uUXVhdGVybmlvbiIsInNldFNjYWxlIiwic2NhbGUiLCJfdXBkYXRlV29ybGRQb3NpdGlvbkZsYWciLCJfaXNDb250YWluRGlydHlGbGFncyIsIl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UiLCJfb3duZXIiLCJMaXRlQ29sbGlkZXIiLCJzaGFwZXMiLCJfc2hhcGVzIiwibiIsIl91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZyIsIl91cGRhdGVXb3JsZFNjYWxlRmxhZyIsIl91cGRhdGVBbGxXb3JsZEZsYWciLCJfZ2V0UGFyZW50VHJhbnNmb3JtIiwicGFyZW50Q2FjaGUiLCJwYXJlbnQiLCJfY29sbGlkZXIiLCJ0YXJnZXREaXJ0eUZsYWdzIiwiX2lzQ29udGFpbkRpcnR5RmxhZyIsInR5cGUiLCJfc2V0RGlydHlGbGFnVHJ1ZSIsIl9zZXREaXJ0eUZsYWdGYWxzZSIsInJvdGF0aW9uRXVsZXIiLCJNYXRoVXRpbCIsImRlZ3JlZVRvUmFkaWFuIiwid29ybGRSb3RhdGlvblF1YXRlcm5pb24iLCJtdWx0aXBseSIsIl90ZW1wUXVhdDAiLCJsb2NhbE1hdHJpeCIsImFmZmluZVRyYW5zZm9ybWF0aW9uIiwiZGVjb21wb3NlIiwiX3RlbXBNYXQ0MiIsIlRyYW5zZm9ybUZsYWciLCJMb2NhbEV1bGVyIiwiTG9jYWxRdWF0IiwiV29ybGRQb3NpdGlvbiIsIldvcmxkRXVsZXIiLCJXb3JsZFF1YXQiLCJXb3JsZFNjYWxlIiwiTG9jYWxNYXRyaXgiLCJXb3JsZE1hdHJpeCIsIldtV3AiLCJXbVdlV3EiLCJXbVdwV2VXcSIsIldtV3MiLCJXbVdwV3MiLCJXbVdwV2VXcVdzIiwiYWRkU2hhcGUiLCJzaGFwZSIsIm9sZENvbGxpZGVyIiwicmVtb3ZlU2hhcGUiLCJzcGxpY2UiLCJzZXRXb3JsZFRyYW5zZm9ybSIsImdldFdvcmxkVHJhbnNmb3JtIiwib3V0UG9zaXRpb24iLCJvdXRSb3RhdGlvbiIsIl9yYXljYXN0Iiwib25SYXljYXN0IiwiaGl0IiwiTnVtYmVyIiwiTUFYX1ZBTFVFIiwiTGl0ZUR5bmFtaWNDb2xsaWRlciIsImFkZEZvcmNlIiwiZm9yY2UiLCJhZGRUb3JxdWUiLCJ0b3JxdWUiLCJtb3ZlIiwicG9zaXRpb25PclJvdGF0aW9uIiwic2xlZXAiLCJzZXRBbmd1bGFyRGFtcGluZyIsInNldEFuZ3VsYXJWZWxvY2l0eSIsInNldENlbnRlck9mTWFzcyIsInNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUiLCJzZXRDb25zdHJhaW50cyIsImZsYWdzIiwic2V0SW5lcnRpYVRlbnNvciIsInNldElzS2luZW1hdGljIiwic2V0TGluZWFyRGFtcGluZyIsInNldExpbmVhclZlbG9jaXR5Iiwic2V0TWFzcyIsInNldE1heEFuZ3VsYXJWZWxvY2l0eSIsInNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eSIsInNldFNsZWVwVGhyZXNob2xkIiwic2V0U29sdmVySXRlcmF0aW9ucyIsIndha2VVcCIsIkRpc29yZGVyZWRBcnJheSIsImNvdW50IiwiX2VsZW1lbnRzIiwiQXJyYXkiLCJhZGQiLCJlbGVtZW50IiwiZGVsZXRlIiwiZGVsZXRlQnlJbmRleCIsImdldCIsImVsZW1lbnRzIiwiZW5kIiwibGFzdEluZGV4IiwiZ2FyYmFnZUNvbGxlY3Rpb24iLCJMaXRlSGl0UmVzdWx0Iiwibm9ybWFsIiwiTGl0ZUJveENvbGxpZGVyU2hhcGUiLCJ1bmlxdWVJRCIsInNpemUiLCJfaGFsZlNpemUiLCJfYm94TWluIiwiX2JveE1heCIsIl9zZXRCb25kaW5nQm94Iiwic2V0V29ybGRTY2FsZSIsInNldFNpemUiLCJsb2NhbFJheSIsImJvdW5kaW5nQm94IiwiX3RlbXBCb3giLCJtaW4iLCJtYXgiLCJpbnRlcnNlY3RCb3giLCJjZW50ZXIiLCJoYWxmU2l6ZSIsInN1YnRyYWN0IiwiQm91bmRpbmdCb3giLCJMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSIsInJhZGl1cyIsIl9yYWRpdXMiLCJfbWF4U2NhbGUiLCJzZXRSYWRpdXMiLCJNYXRoIiwiYm91bmRpbmdTcGhlcmUiLCJfdGVtcFNwaGVyZSIsIndvcmxkUmFkaXVzIiwiaW50ZXJzZWN0U3BoZXJlIiwiQm91bmRpbmdTcGhlcmUiLCJMaXRlUGh5c2ljc01hbmFnZXIiLCJvbkNvbnRhY3RFbnRlciIsIm9uQ29udGFjdEV4aXQiLCJvbkNvbnRhY3RTdGF5Iiwib25UcmlnZ2VyRW50ZXIiLCJvblRyaWdnZXJFeGl0Iiwib25UcmlnZ2VyU3RheSIsIl9jb2xsaWRlcnMiLCJfc3BoZXJlIiwiX2JveCIsIl9jdXJyZW50RXZlbnRzIiwiX2V2ZW50TWFwIiwiX2V2ZW50UG9vbCIsIl9vbkNvbnRhY3RFbnRlciIsIl9vbkNvbnRhY3RFeGl0IiwiX29uQ29udGFjdFN0YXkiLCJfb25UcmlnZ2VyRW50ZXIiLCJfb25UcmlnZ2VyRXhpdCIsIl9vblRyaWdnZXJTdGF5Iiwic2V0R3Jhdml0eSIsImFkZENvbGxpZGVyU2hhcGUiLCJjb2xsaWRlclNoYXBlIiwicmVtb3ZlQ29sbGlkZXJTaGFwZSIsImV2ZW50UG9vbCIsImN1cnJlbnRFdmVudHMiLCJldmVudCIsImluZGV4MSIsImluZGV4MiIsImFkZENvbGxpZGVyIiwiYWN0b3IiLCJyZW1vdmVDb2xsaWRlciIsImNvbGxpZGVyIiwidXBkYXRlIiwiZGVsdGFUaW1lIiwiY29sbGlkZXJzIiwibGVuIiwiX2NvbGxpc2lvbkRldGVjdGlvbiIsIl9maXJlRXZlbnQiLCJyYXljYXN0IiwiaGl0UmVzdWx0IiwiX2hpdFJlc3VsdCIsImlzSGl0IiwiY3VySGl0IiwiX2N1cnJlbnRIaXQiLCJhZGRDaGFyYWN0ZXJDb250cm9sbGVyIiwiY2hhcmFjdGVyQ29udHJvbGxlciIsInJlbW92ZUNoYXJhY3RlckNvbnRyb2xsZXIiLCJfZ2V0VHJpZ2dlciIsInBvcCIsIlRyaWdnZXJFdmVudCIsIm15Q29sbGlkZXIiLCJteUNvbGxpZGVyU2hhcGVzIiwibXlTaGFwZSIsIl91cGRhdGVXb3JsZEJveCIsImoiLCJrIiwidW5kZWZpbmVkIiwiYWxyZWFkeUludm9rZWQiLCJfYm94Q29sbGlzaW9uIiwic3RhdGUiLCJFbnRlciIsIlN0YXkiLCJfdXBXb3JsZFNwaGVyZSIsIl9zcGhlcmVDb2xsaXNpb24iLCJFeGl0Iiwib3RoZXIiLCJib3giLCJDb2xsaXNpb25VdGlsIiwiaW50ZXJzZWN0c0JveEFuZEJveCIsInNwaGVyZSIsImludGVyc2VjdHNTcGhlcmVBbmRCb3giLCJpbnRlcnNlY3RzU3BoZXJlQW5kU3BoZXJlIiwiYm94Q29sbGlkZXIiLCJvdXQiLCJtYXQiLCJ0cmFuc2Zvcm0iLCJzcGhlcmVDb2xsaWRlciIsIlRyaWdnZXJFdmVudFN0YXRlIiwiTGl0ZVBoeXNpY3NNYXRlcmlhbCIsInN0YXRpY0ZyaWN0aW9uIiwiZHluYW1pY0ZyaWN0aW9uIiwiYm91bmNpbmVzcyIsImZyaWN0aW9uQ29tYmluZSIsImJvdW5jZUNvbWJpbmUiLCJzZXRCb3VuY2luZXNzIiwic2V0RHluYW1pY0ZyaWN0aW9uIiwic2V0U3RhdGljRnJpY3Rpb24iLCJzZXRCb3VuY2VDb21iaW5lIiwic2V0RnJpY3Rpb25Db21iaW5lIiwiTGl0ZVN0YXRpY0NvbGxpZGVyIiwiU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50IiwiY29uc3RydWN0b3IiLCJMaXRlUGh5c2ljcyIsImNyZWF0ZVBoeXNpY3NNYW5hZ2VyIiwib25Db250YWN0QmVnaW4iLCJvbkNvbnRhY3RFbmQiLCJvbkNvbnRhY3RQZXJzaXN0Iiwib25UcmlnZ2VyQmVnaW4iLCJvblRyaWdnZXJFbmQiLCJvblRyaWdnZXJQZXJzaXN0IiwiY3JlYXRlU3RhdGljQ29sbGlkZXIiLCJjcmVhdGVEeW5hbWljQ29sbGlkZXIiLCJjcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyIiwiY3JlYXRlUGh5c2ljc01hdGVyaWFsIiwiY3JlYXRlQm94Q29sbGlkZXJTaGFwZSIsImNyZWF0ZVNwaGVyZUNvbGxpZGVyU2hhcGUiLCJjcmVhdGVQbGFuZUNvbGxpZGVyU2hhcGUiLCJjcmVhdGVDYXBzdWxlQ29sbGlkZXJTaGFwZSIsImhlaWdodCIsImNyZWF0ZUZpeGVkSm9pbnQiLCJjcmVhdGVIaW5nZUpvaW50IiwiY3JlYXRlU3ByaW5nSm9pbnQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF3Q0E7QUFDTyxTQUFTLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDMUQsSUFBSSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUks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
|
package/dist/module.js
CHANGED
|
@@ -1263,4 +1263,4 @@ LitePhysics = __decorate([
|
|
|
1263
1263
|
], LitePhysics);
|
|
1264
1264
|
|
|
1265
1265
|
export { LitePhysics };
|
|
1266
|
-
//# sourceMappingURL=module.js.map
|
|
1266
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdHNsaWJAMi41LjAvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX3NldF9wcm90b3R5cGVfb2YuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbmhlcml0cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2NyZWF0ZV9jbGFzcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2luc3RhbmNlb2YuanMiLCIuLi9zcmMvTGl0ZVVwZGF0ZUZsYWcudHMiLCIuLi9zcmMvTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyLnRzIiwiLi4vc3JjL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL0xpdGVUcmFuc2Zvcm0udHMiLCIuLi9zcmMvTGl0ZUNvbGxpZGVyLnRzIiwiLi4vc3JjL0xpdGVEeW5hbWljQ29sbGlkZXIudHMiLCIuLi9zcmMvRGlzb3JkZXJlZEFycmF5LnRzIiwiLi4vc3JjL0xpdGVIaXRSZXN1bHQudHMiLCIuLi9zcmMvc2hhcGUvTGl0ZUJveENvbGxpZGVyU2hhcGUudHMiLCIuLi9zcmMvc2hhcGUvTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGUudHMiLCIuLi9zcmMvTGl0ZVBoeXNpY3NNYW5hZ2VyLnRzIiwiLi4vc3JjL0xpdGVQaHlzaWNzTWF0ZXJpYWwudHMiLCIuLi9zcmMvTGl0ZVN0YXRpY0NvbGxpZGVyLnRzIiwiLi4vc3JjL1N0YXRpY0ludGVyZmFjZUltcGxlbWVudC50cyIsIi4uL3NyYy9MaXRlUGh5c2ljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImV4cG9ydCBmdW5jdGlvbiBfc2V0X3Byb3RvdHlwZV9vZihvLCBwKSB7XG4gICAgX3NldF9wcm90b3R5cGVfb2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG5cbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcblxuICAgIHJldHVybiBfc2V0X3Byb3RvdHlwZV9vZihvLCBwKTtcbn1cbmV4cG9ydCB7IF9zZXRfcHJvdG90eXBlX29mIGFzIF8gfTtcbiIsImltcG9ydCB7IF9zZXRfcHJvdG90eXBlX29mIH0gZnJvbSBcIi4vX3NldF9wcm90b3R5cGVfb2YuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cblxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTtcblxuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0X3Byb3RvdHlwZV9vZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHMgYXMgXyB9O1xuIiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9jcmVhdGVfY2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuXG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZXhwb3J0IHsgX2NyZWF0ZV9jbGFzcyBhcyBfIH07XG4iLCJleHBvcnQgZnVuY3Rpb24gX2luc3RhbmNlb2YobGVmdCwgcmlnaHQpIHtcbiAgICBpZiAocmlnaHQgIT0gbnVsbCAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIHJpZ2h0W1N5bWJvbC5oYXNJbnN0YW5jZV0pIHtcbiAgICAgICAgcmV0dXJuICEhcmlnaHRbU3ltYm9sLmhhc0luc3RhbmNlXShsZWZ0KTtcbiAgICB9IGVsc2UgcmV0dXJuIGxlZnQgaW5zdGFuY2VvZiByaWdodDtcbn1cbmV4cG9ydCB7IF9pbnN0YW5jZW9mIGFzIF8gfTtcbiIsIi8qKlxuICogRmFzdGx5IHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYXJyYXkuXG4gKiBAcGFyYW0gYXJyYXkgLSBBcnJheVxuICogQHBhcmFtIGl0ZW0gLSBFbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tQXJyYXkoYXJyYXk6IGFueVtdLCBpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgY29uc3QgaW5kZXggPSBhcnJheS5pbmRleE9mKGl0ZW0pO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGxhc3QgPSBhcnJheS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggIT09IGxhc3QpIHtcbiAgICBhcnJheVtpbmRleF0gPSBhcnJheVtsYXN0XTtcbiAgfVxuICBhcnJheS5sZW5ndGgtLTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogVXNlZCB0byB1cGRhdGUgdGFncy5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVVcGRhdGVGbGFnIHtcbiAgLyoqIEZsYWcuICovXG4gIGZsYWcgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ZsYWdzOiBMaXRlVXBkYXRlRmxhZ1tdID0gW10pIHtcbiAgICB0aGlzLl9mbGFncy5wdXNoKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kuXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHJlbW92ZUZyb21BcnJheSh0aGlzLl9mbGFncywgdGhpcyk7XG4gICAgdGhpcy5fZmxhZ3MgPSBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQgeyBMaXRlVXBkYXRlRmxhZyB9IGZyb20gXCIuL0xpdGVVcGRhdGVGbGFnXCI7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlVXBkYXRlRmxhZ01hbmFnZXIge1xuICBwcml2YXRlIF91cGRhdGVGbGFnczogTGl0ZVVwZGF0ZUZsYWdbXSA9IFtdO1xuXG4gIHJlZ2lzdGVyKCk6IExpdGVVcGRhdGVGbGFnIHtcbiAgICByZXR1cm4gbmV3IExpdGVVcGRhdGVGbGFnKHRoaXMuX3VwZGF0ZUZsYWdzKTtcbiAgfVxuXG4gIGRpc3RyaWJ1dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlRmxhZ3MgPSB0aGlzLl91cGRhdGVGbGFncztcbiAgICBmb3IgKGxldCBpID0gdXBkYXRlRmxhZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHVwZGF0ZUZsYWdzW2ldLmZsYWcgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSUNvbGxpZGVyU2hhcGUsIElQaHlzaWNzTWF0ZXJpYWwgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IE1hdHJpeCwgUmF5LCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlciB9IGZyb20gXCIuLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IExpdGVIaXRSZXN1bHQgfSBmcm9tIFwiLi4vTGl0ZUhpdFJlc3VsdFwiO1xuaW1wb3J0IHsgTGl0ZVRyYW5zZm9ybSB9IGZyb20gXCIuLi9MaXRlVHJhbnNmb3JtXCI7XG5pbXBvcnQgeyBMaXRlVXBkYXRlRmxhZyB9IGZyb20gXCIuLi9MaXRlVXBkYXRlRmxhZ1wiO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIGZvciBjb2xsaWRlciBzaGFwZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMaXRlQ29sbGlkZXJTaGFwZSBpbXBsZW1lbnRzIElDb2xsaWRlclNoYXBlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3JheSA9IG5ldyBSYXkoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBQb2ludCA9IG5ldyBWZWN0b3IzKCk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfaWQ6IG51bWJlcjtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfY29sbGlkZXI6IExpdGVDb2xsaWRlcjtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfdHJhbnNmb3JtOiBMaXRlVHJhbnNmb3JtID0gbmV3IExpdGVUcmFuc2Zvcm0oKTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfaW52TW9kZWxNYXRyaXg6IE1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfaW52ZXJzZVdvcmxkTWF0RmxhZzogTGl0ZVVwZGF0ZUZsYWc7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3RyYW5zZm9ybS5vd25lciA9IHRoaXM7XG4gICAgdGhpcy5faW52ZXJzZVdvcmxkTWF0RmxhZyA9IHRoaXMuX3RyYW5zZm9ybS5yZWdpc3RlcldvcmxkQ2hhbmdlRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRSb3RhdGlvbiB9XG4gICAqL1xuICBzZXRSb3RhdGlvbihyb3RhdGlvbjogVmVjdG9yMyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0Um90YXRpb24uIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRQb3NpdGlvbiB9XG4gICAqL1xuICBzZXRQb3NpdGlvbihwb3NpdGlvbjogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRQb3NpdGlvbihwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0V29ybGRTY2FsZSB9XG4gICAqL1xuICBhYnN0cmFjdCBzZXRXb3JsZFNjYWxlKHNjYWxlOiBWZWN0b3IzKTogdm9pZDtcblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldENvbnRhY3RPZmZzZXQgfVxuICAgKi9cbiAgc2V0Q29udGFjdE9mZnNldChvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0Q29udGFjdE9mZnNldC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldE1hdGVyaWFsIH1cbiAgICovXG4gIHNldE1hdGVyaWFsKG1hdGVyaWFsOiBJUGh5c2ljc01hdGVyaWFsKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRNYXRlcmlhbC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFVuaXF1ZUlEIH1cbiAgICovXG4gIHNldFVuaXF1ZUlEKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pZCA9IGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRJc1RyaWdnZXIgfVxuICAgKi9cbiAgc2V0SXNUcmlnZ2VyKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRJc1RyaWdnZXIuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5kZXN0cm95IH1cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFic3RyYWN0IF9yYXljYXN0KHJheTogUmF5LCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCBfdXBkYXRlSGl0UmVzdWx0KFxuICAgIHJheTogUmF5LFxuICAgIHJheURpc3RhbmNlOiBudW1iZXIsXG4gICAgb3V0SGl0OiBMaXRlSGl0UmVzdWx0LFxuICAgIG9yaWdpbjogVmVjdG9yMyxcbiAgICBpc1dvcmxkUmF5OiBib29sZWFuID0gZmFsc2VcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaGl0UG9pbnQgPSBMaXRlQ29sbGlkZXJTaGFwZS5fdGVtcFBvaW50O1xuICAgIHJheS5nZXRQb2ludChyYXlEaXN0YW5jZSwgaGl0UG9pbnQpO1xuICAgIGlmICghaXNXb3JsZFJheSkge1xuICAgICAgVmVjdG9yMy50cmFuc2Zvcm1Db29yZGluYXRlKGhpdFBvaW50LCB0aGlzLl90cmFuc2Zvcm0ud29ybGRNYXRyaXgsIGhpdFBvaW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXN0YW5jZSA9IFZlY3RvcjMuZGlzdGFuY2Uob3JpZ2luLCBoaXRQb2ludCk7XG5cbiAgICBpZiAoZGlzdGFuY2UgPCBvdXRIaXQuZGlzdGFuY2UpIHtcbiAgICAgIG91dEhpdC5wb2ludC5jb3B5RnJvbShoaXRQb2ludCk7XG4gICAgICBvdXRIaXQuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgIG91dEhpdC5zaGFwZUlEID0gdGhpcy5faWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9nZXRMb2NhbFJheShyYXk6IFJheSk6IFJheSB7XG4gICAgY29uc3Qgd29ybGRUb0xvY2FsID0gdGhpcy5fZ2V0SW52TW9kZWxNYXRyaXgoKTtcbiAgICBjb25zdCBvdXRSYXkgPSBMaXRlQ29sbGlkZXJTaGFwZS5fcmF5O1xuXG4gICAgVmVjdG9yMy50cmFuc2Zvcm1Db29yZGluYXRlKHJheS5vcmlnaW4sIHdvcmxkVG9Mb2NhbCwgb3V0UmF5Lm9yaWdpbik7XG4gICAgVmVjdG9yMy50cmFuc2Zvcm1Ob3JtYWwocmF5LmRpcmVjdGlvbiwgd29ybGRUb0xvY2FsLCBvdXRSYXkuZGlyZWN0aW9uKTtcbiAgICBvdXRSYXkuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpO1xuXG4gICAgcmV0dXJuIG91dFJheTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEludk1vZGVsTWF0cml4KCk6IE1hdHJpeCB7XG4gICAgaWYgKHRoaXMuX2ludmVyc2VXb3JsZE1hdEZsYWcuZmxhZykge1xuICAgICAgTWF0cml4LmludmVydCh0aGlzLl90cmFuc2Zvcm0ud29ybGRNYXRyaXgsIHRoaXMuX2ludk1vZGVsTWF0cml4KTtcbiAgICAgIHRoaXMuX2ludmVyc2VXb3JsZE1hdEZsYWcuZmxhZyA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW52TW9kZWxNYXRyaXg7XG4gIH1cbn1cbiIsImltcG9ydCB7IE1hdGhVdGlsLCBNYXRyaXgsIFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBMaXRlVXBkYXRlRmxhZyB9IGZyb20gXCIuL0xpdGVVcGRhdGVGbGFnXCI7XG5pbXBvcnQgeyBMaXRlVXBkYXRlRmxhZ01hbmFnZXIgfSBmcm9tIFwiLi9MaXRlVXBkYXRlRmxhZ01hbmFnZXJcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vc2hhcGUvTGl0ZUNvbGxpZGVyU2hhcGVcIjtcblxuLyoqXG4gKiBVc2VkIHRvIGltcGxlbWVudCB0cmFuc2Zvcm1hdGlvbiByZWxhdGVkIGZ1bmN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVUcmFuc2Zvcm0ge1xuICBwcml2YXRlIHN0YXRpYyBfdGVtcFF1YXQwOiBRdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBNYXQ0MjogTWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuXG4gIHByaXZhdGUgX3Bvc2l0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBfcm90YXRpb246IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xuICBwcml2YXRlIF9yb3RhdGlvblF1YXRlcm5pb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuICBwcml2YXRlIF9zY2FsZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xuICBwcml2YXRlIF93b3JsZFJvdGF0aW9uUXVhdGVybmlvbjogUXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG4gIHByaXZhdGUgX2xvY2FsTWF0cml4OiBNYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gIHByaXZhdGUgX3dvcmxkTWF0cml4OiBNYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gIHByaXZhdGUgX3VwZGF0ZUZsYWdNYW5hZ2VyOiBMaXRlVXBkYXRlRmxhZ01hbmFnZXIgPSBuZXcgTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyKCk7XG4gIHByaXZhdGUgX2lzUGFyZW50RGlydHk6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF9wYXJlbnRUcmFuc2Zvcm1DYWNoZTogTGl0ZVRyYW5zZm9ybSA9IG51bGw7XG4gIHByaXZhdGUgX2RpcnR5RmxhZzogbnVtYmVyID0gVHJhbnNmb3JtRmxhZy5XbVdwV2VXcVdzO1xuXG4gIHByaXZhdGUgX293bmVyOiBMaXRlQ29sbGlkZXJTaGFwZSB8IExpdGVDb2xsaWRlcjtcblxuICBzZXQgb3duZXIodmFsdWU6IExpdGVDb2xsaWRlclNoYXBlIHwgTGl0ZUNvbGxpZGVyKSB7XG4gICAgdGhpcy5fb3duZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbCBwb3NpdGlvbi5cbiAgICogQHJlbWFya3MgTmVlZCB0byByZS1hc3NpZ24gYWZ0ZXIgbW9kaWZpY2F0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFrZXMgZWZmZWN0LlxuICAgKi9cbiAgZ2V0IHBvc2l0aW9uKCk6IFZlY3RvcjMge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgfVxuXG4gIHNldCBwb3NpdGlvbih2YWx1ZTogVmVjdG9yMykge1xuICAgIGlmICh0aGlzLl9wb3NpdGlvbiAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3Bvc2l0aW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4KTtcbiAgICB0aGlzLl91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2FsIHJvdGF0aW9uLCBkZWZpbmluZyB0aGUgcm90YXRpb24gYnkgdXNpbmcgYSB1bml0IHF1YXRlcm5pb24uXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCByb3RhdGlvblF1YXRlcm5pb24oKTogUXVhdGVybmlvbiB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLkxvY2FsUXVhdCkpIHtcbiAgICAgIFF1YXRlcm5pb24ucm90YXRpb25FdWxlcihcbiAgICAgICAgTWF0aFV0aWwuZGVncmVlVG9SYWRpYW4odGhpcy5fcm90YXRpb24ueCksXG4gICAgICAgIE1hdGhVdGlsLmRlZ3JlZVRvUmFkaWFuKHRoaXMuX3JvdGF0aW9uLnkpLFxuICAgICAgICBNYXRoVXRpbC5kZWdyZWVUb1JhZGlhbih0aGlzLl9yb3RhdGlvbi56KSxcbiAgICAgICAgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uXG4gICAgICApO1xuICAgICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Mb2NhbFF1YXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uO1xuICB9XG5cbiAgc2V0IHJvdGF0aW9uUXVhdGVybmlvbih2YWx1ZTogUXVhdGVybmlvbikge1xuICAgIGlmICh0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLl9zZXREaXJ0eUZsYWdUcnVlKFRyYW5zZm9ybUZsYWcuTG9jYWxNYXRyaXggfCBUcmFuc2Zvcm1GbGFnLkxvY2FsRXVsZXIpO1xuICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxRdWF0KTtcbiAgICB0aGlzLl91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdvcmxkIHJvdGF0aW9uLCBkZWZpbmluZyB0aGUgcm90YXRpb24gYnkgdXNpbmcgYSB1bml0IHF1YXRlcm5pb24uXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbigpOiBRdWF0ZXJuaW9uIHtcbiAgICBpZiAodGhpcy5faXNDb250YWluRGlydHlGbGFnKFRyYW5zZm9ybUZsYWcuV29ybGRRdWF0KSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50VHJhbnNmb3JtKCk7XG4gICAgICBpZiAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgUXVhdGVybmlvbi5tdWx0aXBseShwYXJlbnQud29ybGRSb3RhdGlvblF1YXRlcm5pb24sIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbSh0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLldvcmxkUXVhdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbjtcbiAgfVxuXG4gIHNldCB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbih2YWx1ZTogUXVhdGVybmlvbikge1xuICAgIGlmICh0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbiAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3dvcmxkUm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50VHJhbnNmb3JtKCk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgUXVhdGVybmlvbi5pbnZlcnQocGFyZW50LndvcmxkUm90YXRpb25RdWF0ZXJuaW9uLCBMaXRlVHJhbnNmb3JtLl90ZW1wUXVhdDApO1xuICAgICAgUXVhdGVybmlvbi5tdWx0aXBseSh2YWx1ZSwgTGl0ZVRyYW5zZm9ybS5fdGVtcFF1YXQwLCB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbiA9IHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvbjtcbiAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLldvcmxkUXVhdCk7XG4gIH1cblxuICAvKipcbiAgICogTG9jYWwgc2NhbGluZy5cbiAgICogQHJlbWFya3MgTmVlZCB0byByZS1hc3NpZ24gYWZ0ZXIgbW9kaWZpY2F0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFrZXMgZWZmZWN0LlxuICAgKi9cbiAgZ2V0IHNjYWxlKCk6IFZlY3RvcjMge1xuICAgIHJldHVybiB0aGlzLl9zY2FsZTtcbiAgfVxuXG4gIHNldCBzY2FsZSh2YWx1ZTogVmVjdG9yMykge1xuICAgIGlmICh0aGlzLl9zY2FsZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3NjYWxlLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4KTtcbiAgICB0aGlzLl91cGRhdGVXb3JsZFNjYWxlRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2FsIG1hdHJpeC5cbiAgICogQHJlbWFya3MgTmVlZCB0byByZS1hc3NpZ24gYWZ0ZXIgbW9kaWZpY2F0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFrZXMgZWZmZWN0LlxuICAgKi9cbiAgZ2V0IGxvY2FsTWF0cml4KCk6IE1hdHJpeCB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4KSkge1xuICAgICAgTWF0cml4LmFmZmluZVRyYW5zZm9ybWF0aW9uKHRoaXMuX3NjYWxlLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbiwgdGhpcy5fcG9zaXRpb24sIHRoaXMuX2xvY2FsTWF0cml4KTtcbiAgICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxNYXRyaXgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbG9jYWxNYXRyaXg7XG4gIH1cblxuICBzZXQgbG9jYWxNYXRyaXgodmFsdWU6IE1hdHJpeCkge1xuICAgIGlmICh0aGlzLl9sb2NhbE1hdHJpeCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvY2FsTWF0cml4LmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fbG9jYWxNYXRyaXguZGVjb21wb3NlKHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24sIHRoaXMuX3NjYWxlKTtcbiAgICB0aGlzLl9zZXREaXJ0eUZsYWdUcnVlKFRyYW5zZm9ybUZsYWcuTG9jYWxFdWxlcik7XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCk7XG4gICAgdGhpcy5fdXBkYXRlQWxsV29ybGRGbGFnKCk7XG4gIH1cblxuICAvKipcbiAgICogV29ybGQgbWF0cml4LlxuICAgKiBAcmVtYXJrcyBOZWVkIHRvIHJlLWFzc2lnbiBhZnRlciBtb2RpZmljYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0YWtlcyBlZmZlY3QuXG4gICAqL1xuICBnZXQgd29ybGRNYXRyaXgoKTogTWF0cml4IHtcbiAgICBpZiAodGhpcy5faXNDb250YWluRGlydHlGbGFnKFRyYW5zZm9ybUZsYWcuV29ybGRNYXRyaXgpKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnRUcmFuc2Zvcm0oKTtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgTWF0cml4Lm11bHRpcGx5KHBhcmVudC53b3JsZE1hdHJpeCwgdGhpcy5sb2NhbE1hdHJpeCwgdGhpcy5fd29ybGRNYXRyaXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fd29ybGRNYXRyaXguY29weUZyb20odGhpcy5sb2NhbE1hdHJpeCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLldvcmxkTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dvcmxkTWF0cml4O1xuICB9XG5cbiAgc2V0IHdvcmxkTWF0cml4KHZhbHVlOiBNYXRyaXgpIHtcbiAgICBpZiAodGhpcy5fd29ybGRNYXRyaXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl93b3JsZE1hdHJpeC5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dldFBhcmVudFRyYW5zZm9ybSgpO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIE1hdHJpeC5pbnZlcnQocGFyZW50LndvcmxkTWF0cml4LCBMaXRlVHJhbnNmb3JtLl90ZW1wTWF0NDIpO1xuICAgICAgTWF0cml4Lm11bHRpcGx5KExpdGVUcmFuc2Zvcm0uX3RlbXBNYXQ0MiwgdmFsdWUsIHRoaXMuX2xvY2FsTWF0cml4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9jYWxNYXRyaXguY29weUZyb20odmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmxvY2FsTWF0cml4ID0gdGhpcy5fbG9jYWxNYXRyaXg7XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZE1hdHJpeCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxvY2FsIHBvc2l0aW9uIGJ5IFgsIFksIFogdmFsdWUuXG4gICAqIEBwYXJhbSB4IC0gWCBjb29yZGluYXRlXG4gICAqIEBwYXJhbSB5IC0gWSBjb29yZGluYXRlXG4gICAqIEBwYXJhbSB6IC0gWiBjb29yZGluYXRlXG4gICAqL1xuICBzZXRQb3NpdGlvbih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcG9zaXRpb24uc2V0KHgsIHksIHopO1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLl9wb3NpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbG9jYWwgcm90YXRpb24gYnkgdGhlIFgsIFksIFosIGFuZCBXIGNvbXBvbmVudHMgb2YgdGhlIHF1YXRlcm5pb24uXG4gICAqIEBwYXJhbSB4IC0gWCBjb21wb25lbnQgb2YgcXVhdGVybmlvblxuICAgKiBAcGFyYW0geSAtIFkgY29tcG9uZW50IG9mIHF1YXRlcm5pb25cbiAgICogQHBhcmFtIHogLSBaIGNvbXBvbmVudCBvZiBxdWF0ZXJuaW9uXG4gICAqIEBwYXJhbSB3IC0gVyBjb21wb25lbnQgb2YgcXVhdGVybmlvblxuICAgKi9cbiAgc2V0Um90YXRpb25RdWF0ZXJuaW9uKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHc6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvbi5zZXQoeCwgeSwgeiwgdyk7XG4gICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb247XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxvY2FsIHNjYWxpbmcgYnkgc2NhbGluZyB2YWx1ZXMgYWxvbmcgWCwgWSwgWiBheGlzLlxuICAgKiBAcGFyYW0geCAtIFNjYWxpbmcgYWxvbmcgWCBheGlzXG4gICAqIEBwYXJhbSB5IC0gU2NhbGluZyBhbG9uZyBZIGF4aXNcbiAgICogQHBhcmFtIHogLSBTY2FsaW5nIGFsb25nIFogYXhpc1xuICAgKi9cbiAgc2V0U2NhbGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3NjYWxlLnNldCh4LCB5LCB6KTtcbiAgICB0aGlzLnNjYWxlID0gdGhpcy5fc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgd29ybGQgdHJhbnNmb3JtIGNoYW5nZSBmbGFnLlxuICAgKiBAcmV0dXJucyBDaGFuZ2UgZmxhZ1xuICAgKi9cbiAgcmVnaXN0ZXJXb3JsZENoYW5nZUZsYWcoKTogTGl0ZVVwZGF0ZUZsYWcge1xuICAgIHJldHVybiB0aGlzLl91cGRhdGVGbGFnTWFuYWdlci5yZWdpc3RlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3b3JsZE1hdHJpeDogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRQb3NpdGlvbjogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCwgbG9jYWwgcG9zaXRpb24gdXBkYXRlIG9mIGl0c2VsZiBhbmQgdGhlIHdvcmxkTWF0cml4IHVwZGF0ZSBvZiBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBJbiBzdW1tYXJ5LCBhbnkgdXBkYXRlIG9mIHJlbGF0ZWQgdmFyaWFibGVzIHdpbGwgY2F1c2UgdGhlIGRpcnR5IG1hcmsgb2Ygb25lIG9mIHRoZSBmdWxsIHByb2Nlc3MgKHdvcmxkTWF0cml4IG9yIHdvcmxkUm90YXRpb25RdWF0ZXJuaW9uKSB0byBiZSBmYWxzZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZVdvcmxkUG9zaXRpb25GbGFnKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNDb250YWluRGlydHlGbGFncyhUcmFuc2Zvcm1GbGFnLldtV3ApKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdwKTtcbiAgICAgIGlmICh0aGlzLl9vd25lciBpbnN0YW5jZW9mIExpdGVDb2xsaWRlcikge1xuICAgICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLl9vd25lci5fc2hhcGVzO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBuOiBudW1iZXIgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgc2hhcGVzW2ldLl90cmFuc2Zvcm0uX3VwZGF0ZVdvcmxkUG9zaXRpb25GbGFnKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdvcmxkTWF0cml4OiBXaWxsIHRyaWdnZXIgdGhlIHdvcmxkTWF0cml4IHVwZGF0ZSBvZiBpdHNlbGYgYW5kIGFsbCBwYXJlbnQgZW50aXRpZXMuXG4gICAqIEdldCB3b3JsZFBvc2l0aW9uOiBXaWxsIHRyaWdnZXIgdGhlIHdvcmxkTWF0cml4LCBsb2NhbCBwb3NpdGlvbiB1cGRhdGUgb2YgaXRzZWxmIGFuZCB0aGUgd29ybGRNYXRyaXggdXBkYXRlIG9mIGFsbCBwYXJlbnQgZW50aXRpZXMuXG4gICAqIEdldCB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbjogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZCByb3RhdGlvbiAoaW4gcXVhdGVybmlvbikgdXBkYXRlIG9mIGl0c2VsZiBhbmQgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkUm90YXRpb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGQgcm90YXRpb24oaW4gZXVsZXIgYW5kIHF1YXRlcm5pb24pIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIHdvcmxkIHJvdGF0aW9uKGluIHF1YXRlcm5pb24pIHVwZGF0ZSBvZiBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBJbiBzdW1tYXJ5LCBhbnkgdXBkYXRlIG9mIHJlbGF0ZWQgdmFyaWFibGVzIHdpbGwgY2F1c2UgdGhlIGRpcnR5IG1hcmsgb2Ygb25lIG9mIHRoZSBmdWxsIHByb2Nlc3MgKHdvcmxkTWF0cml4IG9yIHdvcmxkUm90YXRpb25RdWF0ZXJuaW9uKSB0byBiZSBmYWxzZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZVdvcmxkUm90YXRpb25GbGFnKCkge1xuICAgIGlmICghdGhpcy5faXNDb250YWluRGlydHlGbGFncyhUcmFuc2Zvcm1GbGFnLldtV2VXcSkpIHtcbiAgICAgIHRoaXMuX3dvcmxkQXNzb2NpYXRlZENoYW5nZShUcmFuc2Zvcm1GbGFnLldtV2VXcSk7XG4gICAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXIpIHtcbiAgICAgICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fb3duZXIuX3NoYXBlcztcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbjogbnVtYmVyID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHNoYXBlc1tpXS5fdHJhbnNmb3JtLl91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3b3JsZE1hdHJpeDogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRQb3NpdGlvbjogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCwgbG9jYWwgcG9zaXRpb24gdXBkYXRlIG9mIGl0c2VsZiBhbmQgdGhlIHdvcmxkTWF0cml4IHVwZGF0ZSBvZiBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRTY2FsZTogV2lsbCB0cmlnZ2VyIHRoZSBzY2FsaW5nIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIGFsbCBwYXJlbnQgZW50aXRpZXMuXG4gICAqIEluIHN1bW1hcnksIGFueSB1cGRhdGUgb2YgcmVsYXRlZCB2YXJpYWJsZXMgd2lsbCBjYXVzZSB0aGUgZGlydHkgbWFyayBvZiBvbmUgb2YgdGhlIGZ1bGwgcHJvY2VzcyAod29ybGRNYXRyaXgpIHRvIGJlIGZhbHNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlV29ybGRTY2FsZUZsYWcoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0NvbnRhaW5EaXJ0eUZsYWdzKFRyYW5zZm9ybUZsYWcuV21XcykpIHtcbiAgICAgIHRoaXMuX3dvcmxkQXNzb2NpYXRlZENoYW5nZShUcmFuc2Zvcm1GbGFnLldtV3MpO1xuICAgICAgaWYgKHRoaXMuX293bmVyIGluc3RhbmNlb2YgTGl0ZUNvbGxpZGVyKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuX293bmVyLl9zaGFwZXM7XG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIG46IG51bWJlciA9IHNoYXBlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzaGFwZXNbaV0uX3RyYW5zZm9ybS5fdXBkYXRlV29ybGRTY2FsZUZsYWcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYWxsIHdvcmxkIHRyYW5zZm9ybSBwcm9wZXJ0eSBkaXJ0eSBmbGFnLCB0aGUgcHJpbmNpcGxlIGlzIHRoZSBzYW1lIGFzIGFib3ZlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlQWxsV29ybGRGbGFnKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNDb250YWluRGlydHlGbGFncyhUcmFuc2Zvcm1GbGFnLldtV3BXZVdxV3MpKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdwV2VXcVdzKTtcbiAgICAgIGlmICh0aGlzLl9vd25lciBpbnN0YW5jZW9mIExpdGVDb2xsaWRlcikge1xuICAgICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLl9vd25lci5fc2hhcGVzO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBuOiBudW1iZXIgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgc2hhcGVzW2ldLl90cmFuc2Zvcm0uX3VwZGF0ZUFsbFdvcmxkRmxhZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGFyZW50VHJhbnNmb3JtKCk6IExpdGVUcmFuc2Zvcm0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX2lzUGFyZW50RGlydHkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRUcmFuc2Zvcm1DYWNoZTtcbiAgICB9XG4gICAgbGV0IHBhcmVudENhY2hlOiBMaXRlVHJhbnNmb3JtID0gbnVsbDtcbiAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgbGV0IHBhcmVudCA9IHRoaXMuX293bmVyLl9jb2xsaWRlcjtcbiAgICAgIHBhcmVudENhY2hlID0gcGFyZW50Ll90cmFuc2Zvcm07XG4gICAgfVxuXG4gICAgdGhpcy5fcGFyZW50VHJhbnNmb3JtQ2FjaGUgPSBwYXJlbnRDYWNoZTtcbiAgICB0aGlzLl9pc1BhcmVudERpcnR5ID0gZmFsc2U7XG4gICAgcmV0dXJuIHBhcmVudENhY2hlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNDb250YWluRGlydHlGbGFncyh0YXJnZXREaXJ0eUZsYWdzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2RpcnR5RmxhZyAmIHRhcmdldERpcnR5RmxhZ3MpID09PSB0YXJnZXREaXJ0eUZsYWdzO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNDb250YWluRGlydHlGbGFnKHR5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5fZGlydHlGbGFnICYgdHlwZSkgIT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldERpcnR5RmxhZ1RydWUodHlwZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGlydHlGbGFnIHw9IHR5cGU7XG4gIH1cblxuICBwcml2YXRlIF9zZXREaXJ0eUZsYWdGYWxzZSh0eXBlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9kaXJ0eUZsYWcgJj0gfnR5cGU7XG4gIH1cblxuICBwcml2YXRlIF93b3JsZEFzc29jaWF0ZWRDaGFuZ2UodHlwZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZGlydHlGbGFnIHw9IHR5cGU7XG4gICAgdGhpcy5fdXBkYXRlRmxhZ01hbmFnZXIuZGlzdHJpYnV0ZSgpO1xuICB9XG59XG5cbi8qKlxuICogRGlydHkgZmxhZyBvZiB0cmFuc2Zvcm0uXG4gKi9cbmVudW0gVHJhbnNmb3JtRmxhZyB7XG4gIExvY2FsRXVsZXIgPSAweDEsXG4gIExvY2FsUXVhdCA9IDB4MixcbiAgV29ybGRQb3NpdGlvbiA9IDB4NCxcbiAgV29ybGRFdWxlciA9IDB4OCxcbiAgV29ybGRRdWF0ID0gMHgxMCxcbiAgV29ybGRTY2FsZSA9IDB4MjAsXG4gIExvY2FsTWF0cml4ID0gMHg0MCxcbiAgV29ybGRNYXRyaXggPSAweDgwLFxuXG4gIC8qKiBXb3JsZE1hdHJpeCB8IFdvcmxkUG9zaXRpb24gKi9cbiAgV21XcCA9IDB4ODQsXG4gIC8qKiBXb3JsZE1hdHJpeCB8IFdvcmxkRXVsZXIgfCBXb3JsZFF1YXQgKi9cbiAgV21XZVdxID0gMHg5OCxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRQb3NpdGlvbiB8IFdvcmxkRXVsZXIgfCBXb3JsZFF1YXQgKi9cbiAgV21XcFdlV3EgPSAweDljLFxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZFNjYWxlICovXG4gIFdtV3MgPSAweGEwLFxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZFBvc2l0aW9uIHwgV29ybGRTY2FsZSAqL1xuICBXbVdwV3MgPSAweGE0LFxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZFBvc2l0aW9uIHwgV29ybGRFdWxlciB8IFdvcmxkUXVhdCB8IFdvcmxkU2NhbGUgKi9cbiAgV21XcFdlV3FXcyA9IDB4YmNcbn1cbiIsImltcG9ydCB7IElDb2xsaWRlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgUmF5LCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IExpdGVIaXRSZXN1bHQgfSBmcm9tIFwiLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlVHJhbnNmb3JtIH0gZnJvbSBcIi4vTGl0ZVRyYW5zZm9ybVwiO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIG9mIHBoeXNpY2FsIGNvbGxpZGVyLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGl0ZUNvbGxpZGVyIGltcGxlbWVudHMgSUNvbGxpZGVyIHtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfc2hhcGVzOiBMaXRlQ29sbGlkZXJTaGFwZVtdID0gW107XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3RyYW5zZm9ybTogTGl0ZVRyYW5zZm9ybSA9IG5ldyBMaXRlVHJhbnNmb3JtKCk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3RyYW5zZm9ybS5vd25lciA9IHRoaXM7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5hZGRTaGFwZSB9XG4gICAqL1xuICBhZGRTaGFwZShzaGFwZTogTGl0ZUNvbGxpZGVyU2hhcGUpOiB2b2lkIHtcbiAgICBjb25zdCBvbGRDb2xsaWRlciA9IHNoYXBlLl9jb2xsaWRlcjtcbiAgICBpZiAob2xkQ29sbGlkZXIgIT09IHRoaXMpIHtcbiAgICAgIGlmIChvbGRDb2xsaWRlcikge1xuICAgICAgICBvbGRDb2xsaWRlci5yZW1vdmVTaGFwZShzaGFwZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zaGFwZXMucHVzaChzaGFwZSk7XG4gICAgICBzaGFwZS5fY29sbGlkZXIgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyLnJlbW92ZVNoYXBlIH1cbiAgICovXG4gIHJlbW92ZVNoYXBlKHNoYXBlOiBMaXRlQ29sbGlkZXJTaGFwZSk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fc2hhcGVzLmluZGV4T2Yoc2hhcGUpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX3NoYXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgc2hhcGUuX2NvbGxpZGVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5zZXRXb3JsZFRyYW5zZm9ybSB9XG4gICAqL1xuICBzZXRXb3JsZFRyYW5zZm9ybShwb3NpdGlvbjogVmVjdG9yMywgcm90YXRpb246IFF1YXRlcm5pb24pOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFJvdGF0aW9uUXVhdGVybmlvbihyb3RhdGlvbi54LCByb3RhdGlvbi55LCByb3RhdGlvbi56LCByb3RhdGlvbi53KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyLmdldFdvcmxkVHJhbnNmb3JtIH1cbiAgICovXG4gIGdldFdvcmxkVHJhbnNmb3JtKG91dFBvc2l0aW9uOiBWZWN0b3IzLCBvdXRSb3RhdGlvbjogUXVhdGVybmlvbik6IHZvaWQge1xuICAgIGNvbnN0IHsgcG9zaXRpb24sIHJvdGF0aW9uUXVhdGVybmlvbiB9ID0gdGhpcy5fdHJhbnNmb3JtO1xuICAgIG91dFBvc2l0aW9uLnNldChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KTtcbiAgICBvdXRSb3RhdGlvbi5zZXQocm90YXRpb25RdWF0ZXJuaW9uLngsIHJvdGF0aW9uUXVhdGVybmlvbi55LCByb3RhdGlvblF1YXRlcm5pb24ueiwgcm90YXRpb25RdWF0ZXJuaW9uLncpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuZGVzdHJveSB9XG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge31cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfcmF5Y2FzdChyYXk6IFJheSwgb25SYXljYXN0OiAob2JqOiBudW1iZXIpID0+IGJvb2xlYW4sIGhpdDogTGl0ZUhpdFJlc3VsdCk6IGJvb2xlYW4ge1xuICAgIGhpdC5kaXN0YW5jZSA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fc2hhcGVzO1xuICAgIGZvciAobGV0IGkgPSAwLCBuID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgY29uc3Qgc2hhcGUgPSBzaGFwZXNbaV07XG4gICAgICBvblJheWNhc3Qoc2hhcGUuX2lkKSAmJiBzaGFwZS5fcmF5Y2FzdChyYXksIGhpdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdC5kaXN0YW5jZSAhPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICB9XG59XG4iLCJpbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IElEeW5hbWljQ29sbGlkZXIgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuXG4vKipcbiAqIEEgZHluYW1pYyBjb2xsaWRlciBjYW4gYWN0IHdpdGggc2VsZi1kZWZpbmVkIG1vdmVtZW50IG9yIHBoeXNpY2FsIGZvcmNlXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlRHluYW1pY0NvbGxpZGVyIGV4dGVuZHMgTGl0ZUNvbGxpZGVyIGltcGxlbWVudHMgSUR5bmFtaWNDb2xsaWRlciB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGR5bmFtaWMgYWN0b3IuXG4gICAqIEBwYXJhbSBwb3NpdGlvbiAtIFRoZSBnbG9iYWwgcG9zaXRpb25cbiAgICogQHBhcmFtIHJvdGF0aW9uIC0gVGhlIGdsb2JhbCByb3RhdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFJvdGF0aW9uUXVhdGVybmlvbihyb3RhdGlvbi54LCByb3RhdGlvbi55LCByb3RhdGlvbi56LCByb3RhdGlvbi53KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5hZGRGb3JjZSB9XG4gICAqL1xuICBhZGRGb3JjZShmb3JjZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgYWRkRm9yY2UuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuYWRkVG9ycXVlIH1cbiAgICovXG4gIGFkZFRvcnF1ZSh0b3JxdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGFkZFRvcnF1ZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5tb3ZlIH1cbiAgICovXG4gIG1vdmUocG9zaXRpb25PclJvdGF0aW9uOiBWZWN0b3IzIHwgUXVhdGVybmlvbiwgcm90YXRpb24/OiBRdWF0ZXJuaW9uKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBtb3ZlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNsZWVwIH1cbiAgICovXG4gIHNsZWVwKCk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgcHV0VG9TbGVlcC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRBbmd1bGFyRGFtcGluZyB9XG4gICAqL1xuICBzZXRBbmd1bGFyRGFtcGluZyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRBbmd1bGFyRGFtcGluZy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRBbmd1bGFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0QW5ndWxhclZlbG9jaXR5KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRBbmd1bGFyVmVsb2NpdHkuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0Q2VudGVyT2ZNYXNzIH1cbiAgICovXG4gIHNldENlbnRlck9mTWFzcyh2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0Q2VudGVyT2ZNYXNzLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUgfVxuICAgKi9cbiAgc2V0Q29sbGlzaW9uRGV0ZWN0aW9uTW9kZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRDb2xsaXNpb25EZXRlY3Rpb25Nb2RlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldENvbnN0cmFpbnRzIH1cbiAgICovXG4gIHNldENvbnN0cmFpbnRzKGZsYWdzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldENvbnN0cmFpbnRzLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldEluZXJ0aWFUZW5zb3IgfVxuICAgKi9cbiAgc2V0SW5lcnRpYVRlbnNvcih2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0SW5lcnRpYVRlbnNvci4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRJc0tpbmVtYXRpYyB9XG4gICAqL1xuICBzZXRJc0tpbmVtYXRpYyh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0SXNLaW5lbWF0aWMuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0TGluZWFyRGFtcGluZyB9XG4gICAqL1xuICBzZXRMaW5lYXJEYW1waW5nKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldExpbmVhckRhbXBpbmcuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0TGluZWFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TGluZWFyVmVsb2NpdHkodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldExpbmVhclZlbG9jaXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldE1hc3MgfVxuICAgKi9cbiAgc2V0TWFzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRNYXNzLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldE1heEFuZ3VsYXJWZWxvY2l0eSB9XG4gICAqL1xuICBzZXRNYXhBbmd1bGFyVmVsb2NpdHkodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWF4QW5ndWxhclZlbG9jaXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eSB9XG4gICAqL1xuICBzZXRNYXhEZXBlbmV0cmF0aW9uVmVsb2NpdHkodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWF4RGVwZW5ldHJhdGlvblZlbG9jaXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldFNsZWVwVGhyZXNob2xkIH1cbiAgICovXG4gIHNldFNsZWVwVGhyZXNob2xkKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldFNsZWVwVGhyZXNob2xkLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldFNvbHZlckl0ZXJhdGlvbnMgfVxuICAgKi9cbiAgc2V0U29sdmVySXRlcmF0aW9ucyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRTb2x2ZXJJdGVyYXRpb25zLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLndha2VVcCB9XG4gICAqL1xuICB3YWtlVXAoKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCB3YWtlVXAuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cbn1cbiIsIi8qKlxuICogSGlnaC1wZXJmb3JtYW5jZSB1bm9yZGVyZWQgYXJyYXksIGRlbGV0ZSB1c2VzIGV4Y2hhbmdlIG1ldGhvZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCBpbnRlcm5hbCBjYXBhY2l0eSBvbmx5IGluY3JlYXNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIERpc29yZGVyZWRBcnJheTxUPiB7XG4gIF9lbGVtZW50czogVFtdO1xuXG4gIGxlbmd0aDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcihjb3VudDogbnVtYmVyID0gMCkge1xuICAgIHRoaXMuX2VsZW1lbnRzID0gbmV3IEFycmF5PFQ+KGNvdW50KTtcbiAgfVxuXG4gIGFkZChlbGVtZW50OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSB0aGlzLl9lbGVtZW50cy5sZW5ndGgpIHRoaXMuX2VsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgZWxzZSB0aGlzLl9lbGVtZW50c1t0aGlzLmxlbmd0aF0gPSBlbGVtZW50O1xuICAgIHRoaXMubGVuZ3RoKys7XG4gIH1cblxuICBkZWxldGUoZWxlbWVudDogVCk6IHZvaWQge1xuICAgIC8vVE9ETzogSXQgY2FuIGJlIG9wdGltaXplZCBmb3IgY3VzdG9tIGJpbmFyeSBzZWFyY2ggYW5kIG90aGVyIGFsZ29yaXRobXMsIGN1cnJlbnRseSB0aGlzLl9lbGVtZW50cz49dGhpcy5sZW5ndGggd2FzdGVzIHBlcmZvcm1hbmNlLlxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcbiAgICB0aGlzLmRlbGV0ZUJ5SW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgZ2V0KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICBpZiAoaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IFwiSW5kZXggaXMgb3V0IG9mIHJhbmdlLlwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudHNbaW5kZXhdO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcmV0dXJucyBUaGUgcmVwbGFjZWQgaXRlbSBpcyB1c2VkIHRvIHJlc2V0IGl0cyBpbmRleC5cbiAgICovXG4gIGRlbGV0ZUJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IFQge1xuICAgIHZhciBlbGVtZW50czogVFtdID0gdGhpcy5fZWxlbWVudHM7XG4gICAgbGV0IGVuZDogVCA9IG51bGw7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5sZW5ndGggLSAxO1xuICAgIGlmIChpbmRleCAhPT0gbGFzdEluZGV4KSB7XG4gICAgICBlbmQgPSBlbGVtZW50c1tsYXN0SW5kZXhdO1xuICAgICAgZWxlbWVudHNbaW5kZXhdID0gZW5kO1xuICAgIH1cbiAgICB0aGlzLmxlbmd0aC0tO1xuICAgIHJldHVybiBlbmQ7XG4gIH1cblxuICBnYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9lbGVtZW50cy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5cbi8qKlxuICogU3RydWN0dXJlIHVzZWQgdG8gZ2V0IGluZm9ybWF0aW9uIGJhY2sgZnJvbSBhIHJheWNhc3Qgb3IgYSBzd2VlcC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgTGl0ZUhpdFJlc3VsdCB7XG4gIC8qKiBUaGUgY29sbGlkZXIgdGhhdCB3YXMgaGl0LiAqL1xuICBzaGFwZUlEOiBudW1iZXIgPSAtMTtcbiAgLyoqIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBvcmlnaW4gdG8gdGhlIGhpdCBwb2ludC4gKi9cbiAgZGlzdGFuY2U6IG51bWJlciA9IDA7XG4gIC8qKiBUaGUgaGl0IHBvaW50IG9mIHRoZSBjb2xsaWRlciB0aGF0IHdhcyBoaXQgaW4gd29ybGQgc3BhY2UuICovXG4gIHBvaW50OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgLyoqIFRoZSBoaXQgbm9ybWFsIG9mIHRoZSBjb2xsaWRlciB0aGF0IHdhcyBoaXQgaW4gd29ybGQgc3BhY2UuICovXG4gIG5vcm1hbDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG59XG4iLCJpbXBvcnQgeyBJQm94Q29sbGlkZXJTaGFwZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgQm91bmRpbmdCb3gsIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4uL0xpdGVIaXRSZXN1bHRcIjtcbmltcG9ydCB7IExpdGVQaHlzaWNzTWF0ZXJpYWwgfSBmcm9tIFwiLi4vTGl0ZVBoeXNpY3NNYXRlcmlhbFwiO1xuXG4vKipcbiAqIEJveCBjb2xsaWRlciBzaGFwZSBpbiBMaXRlLlxuICovXG5leHBvcnQgY2xhc3MgTGl0ZUJveENvbGxpZGVyU2hhcGUgZXh0ZW5kcyBMaXRlQ29sbGlkZXJTaGFwZSBpbXBsZW1lbnRzIElCb3hDb2xsaWRlclNoYXBlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBCb3g6IEJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gIHByaXZhdGUgX2hhbGZTaXplOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBfc2NhbGU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcblxuICAvKiogQGludGVybmFsICovXG4gIF9ib3hNaW46IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygtMC41LCAtMC41LCAtMC41KTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfYm94TWF4OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMC41LCAwLjUsIDAuNSk7XG5cbiAgLyoqXG4gICAqIEluaXQgQm94IFNoYXBlLlxuICAgKiBAcGFyYW0gdW5pcXVlSUQgLSBVbmlxdWVJRCBtYXJrIFNoYXBlLlxuICAgKiBAcGFyYW0gc2l6ZSAtIFNpemUgb2YgU2hhcGUuXG4gICAqIEBwYXJhbSBtYXRlcmlhbCAtIE1hdGVyaWFsIG9mIFBoeXNYQ29sbGlkZXIuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih1bmlxdWVJRDogbnVtYmVyLCBzaXplOiBWZWN0b3IzLCBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5faWQgPSB1bmlxdWVJRDtcbiAgICB0aGlzLl9oYWxmU2l6ZS5zZXQoc2l6ZS54ICogMC41LCBzaXplLnkgKiAwLjUsIHNpemUueiAqIDAuNSk7XG4gICAgdGhpcy5fc2V0Qm9uZGluZ0JveCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRQb3NpdGlvbiB9XG4gICAqL1xuICBzZXRQb3NpdGlvbihwb3NpdGlvbjogVmVjdG9yMyk6IHZvaWQge1xuICAgIHN1cGVyLnNldFBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICB0aGlzLl9zZXRCb25kaW5nQm94KCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zZm9ybS5wb3NpdGlvbiA9IHRoaXMuX3RyYW5zZm9ybS5wb3NpdGlvbi5tdWx0aXBseShzY2FsZSk7XG4gICAgdGhpcy5fc2NhbGUuY29weUZyb20oc2NhbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQm94Q29sbGlkZXJTaGFwZS5zZXRTaXplIH1cbiAgICovXG4gIHNldFNpemUodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl9oYWxmU2l6ZS5zZXQodmFsdWUueCAqIDAuNSwgdmFsdWUueSAqIDAuNSwgdmFsdWUueiAqIDAuNSk7XG4gICAgdGhpcy5fc2V0Qm9uZGluZ0JveCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JheWNhc3QocmF5OiBSYXksIGhpdDogTGl0ZUhpdFJlc3VsdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvY2FsUmF5ID0gdGhpcy5fZ2V0TG9jYWxSYXkocmF5KTtcblxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gTGl0ZUJveENvbGxpZGVyU2hhcGUuX3RlbXBCb3g7XG4gICAgYm91bmRpbmdCb3gubWluLnNldChcbiAgICAgIC10aGlzLl9oYWxmU2l6ZS54ICogdGhpcy5fc2NhbGUueCxcbiAgICAgIC10aGlzLl9oYWxmU2l6ZS55ICogdGhpcy5fc2NhbGUueSxcbiAgICAgIC10aGlzLl9oYWxmU2l6ZS56ICogdGhpcy5fc2NhbGUuelxuICAgICk7XG4gICAgYm91bmRpbmdCb3gubWF4LnNldChcbiAgICAgIHRoaXMuX2hhbGZTaXplLnggKiB0aGlzLl9zY2FsZS54LFxuICAgICAgdGhpcy5faGFsZlNpemUueSAqIHRoaXMuX3NjYWxlLnksXG4gICAgICB0aGlzLl9oYWxmU2l6ZS56ICogdGhpcy5fc2NhbGUuelxuICAgICk7XG4gICAgY29uc3QgcmF5RGlzdGFuY2UgPSBsb2NhbFJheS5pbnRlcnNlY3RCb3goYm91bmRpbmdCb3gpO1xuICAgIGlmIChyYXlEaXN0YW5jZSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUhpdFJlc3VsdChsb2NhbFJheSwgcmF5RGlzdGFuY2UsIGhpdCwgcmF5Lm9yaWdpbik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEJvbmRpbmdCb3goKTogdm9pZCB7XG4gICAgY29uc3QgeyBwb3NpdGlvbjogY2VudGVyIH0gPSB0aGlzLl90cmFuc2Zvcm07XG4gICAgY29uc3QgaGFsZlNpemUgPSB0aGlzLl9oYWxmU2l6ZTtcblxuICAgIFZlY3RvcjMuYWRkKGNlbnRlciwgaGFsZlNpemUsIHRoaXMuX2JveE1heCk7XG4gICAgVmVjdG9yMy5zdWJ0cmFjdChjZW50ZXIsIGhhbGZTaXplLCB0aGlzLl9ib3hNaW4pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJU3BoZXJlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgQm91bmRpbmdTcGhlcmUsIFF1YXRlcm5pb24sIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4uL0xpdGVIaXRSZXN1bHRcIjtcbmltcG9ydCB7IExpdGVQaHlzaWNzTWF0ZXJpYWwgfSBmcm9tIFwiLi4vTGl0ZVBoeXNpY3NNYXRlcmlhbFwiO1xuXG4vKipcbiAqIFNwaGVyZSBjb2xsaWRlciBzaGFwZSBpbiBMaXRlLlxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGUgZXh0ZW5kcyBMaXRlQ29sbGlkZXJTaGFwZSBpbXBsZW1lbnRzIElTcGhlcmVDb2xsaWRlclNoYXBlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBTcGhlcmU6IEJvdW5kaW5nU3BoZXJlID0gbmV3IEJvdW5kaW5nU3BoZXJlKCk7XG5cbiAgcHJpdmF0ZSBfcmFkaXVzOiBudW1iZXIgPSAxO1xuICBwcml2YXRlIF9tYXhTY2FsZTogbnVtYmVyID0gMTtcblxuICBnZXQgd29ybGRSYWRpdXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmFkaXVzICogdGhpcy5fbWF4U2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogSW5pdCBzcGhlcmUgc2hhcGUuXG4gICAqIEBwYXJhbSB1bmlxdWVJRCAtIFVuaXF1ZUlEIG1hcmsgY29sbGlkZXJcbiAgICogQHBhcmFtIHJhZGl1cyAtIFNpemUgb2YgU3BoZXJlQ29sbGlkZXJcbiAgICogQHBhcmFtIG1hdGVyaWFsIC0gTWF0ZXJpYWwgb2YgUGh5c1hDb2xsaWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IodW5pcXVlSUQ6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9yYWRpdXMgPSByYWRpdXM7XG4gICAgdGhpcy5faWQgPSB1bmlxdWVJRDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVNwaGVyZUNvbGxpZGVyU2hhcGUuc2V0UmFkaXVzIH1cbiAgICovXG4gIHNldFJhZGl1cyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcmFkaXVzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX21heFNjYWxlID0gTWF0aC5tYXgoc2NhbGUueCwgTWF0aC5tYXgoc2NhbGUueCwgc2NhbGUueSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JheWNhc3QocmF5OiBSYXksIGhpdDogTGl0ZUhpdFJlc3VsdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJvdW5kaW5nU3BoZXJlID0gTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGUuX3RlbXBTcGhlcmU7XG4gICAgVmVjdG9yMy50cmFuc2Zvcm1Db29yZGluYXRlKHRoaXMuX3RyYW5zZm9ybS5wb3NpdGlvbiwgdGhpcy5fY29sbGlkZXIuX3RyYW5zZm9ybS53b3JsZE1hdHJpeCwgYm91bmRpbmdTcGhlcmUuY2VudGVyKTtcbiAgICBib3VuZGluZ1NwaGVyZS5yYWRpdXMgPSB0aGlzLndvcmxkUmFkaXVzO1xuXG4gICAgY29uc3QgcmF5RGlzdGFuY2UgPSByYXkuaW50ZXJzZWN0U3BoZXJlKGJvdW5kaW5nU3BoZXJlKTtcbiAgICBpZiAocmF5RGlzdGFuY2UgIT09IC0xKSB7XG4gICAgICB0aGlzLl91cGRhdGVIaXRSZXN1bHQocmF5LCByYXlEaXN0YW5jZSwgaGl0LCByYXkub3JpZ2luLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJQ2hhcmFjdGVyQ29udHJvbGxlciwgSVBoeXNpY3NNYW5hZ2VyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBCb3VuZGluZ0JveCwgQm91bmRpbmdTcGhlcmUsIENvbGxpc2lvblV0aWwsIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBEaXNvcmRlcmVkQXJyYXkgfSBmcm9tIFwiLi9EaXNvcmRlcmVkQXJyYXlcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZUhpdFJlc3VsdCB9IGZyb20gXCIuL0xpdGVIaXRSZXN1bHRcIjtcbmltcG9ydCB7IExpdGVCb3hDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vc2hhcGUvTGl0ZUJveENvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vc2hhcGUvTGl0ZUNvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IExpdGVTcGhlcmVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vc2hhcGUvTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGVcIjtcblxuLyoqXG4gKiBBIG1hbmFnZXIgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbGxpZGVycyBhbmQgY29uc3RyYWludHMgd2hpY2ggY2FuIGludGVyYWN0LlxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVBoeXNpY3NNYW5hZ2VyIGltcGxlbWVudHMgSVBoeXNpY3NNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBTcGhlcmU6IEJvdW5kaW5nU3BoZXJlID0gbmV3IEJvdW5kaW5nU3BoZXJlKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wQm94OiBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICBwcml2YXRlIHN0YXRpYyBfY3VycmVudEhpdDogTGl0ZUhpdFJlc3VsdCA9IG5ldyBMaXRlSGl0UmVzdWx0KCk7XG4gIHByaXZhdGUgc3RhdGljIF9oaXRSZXN1bHQ6IExpdGVIaXRSZXN1bHQgPSBuZXcgTGl0ZUhpdFJlc3VsdCgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQ29udGFjdEVudGVyPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNvbnRhY3RFeGl0PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNvbnRhY3RTdGF5PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vblRyaWdnZXJFbnRlcj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25UcmlnZ2VyRXhpdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25UcmlnZ2VyU3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcblxuICBwcml2YXRlIF9jb2xsaWRlcnM6IExpdGVDb2xsaWRlcltdID0gW107XG4gIHByaXZhdGUgX3NwaGVyZTogQm91bmRpbmdTcGhlcmUgPSBuZXcgQm91bmRpbmdTcGhlcmUoKTtcbiAgcHJpdmF0ZSBfYm94OiBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRFdmVudHM6IERpc29yZGVyZWRBcnJheTxUcmlnZ2VyRXZlbnQ+ID0gbmV3IERpc29yZGVyZWRBcnJheTxUcmlnZ2VyRXZlbnQ+KCk7XG4gIHByaXZhdGUgX2V2ZW50TWFwOiBSZWNvcmQ8bnVtYmVyLCBSZWNvcmQ8bnVtYmVyLCBUcmlnZ2VyRXZlbnQ+PiA9IHt9O1xuICBwcml2YXRlIF9ldmVudFBvb2w6IFRyaWdnZXJFdmVudFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgb25Db250YWN0RW50ZXI/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0RXhpdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvbkNvbnRhY3RTdGF5PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlckVudGVyPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlckV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyU3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZFxuICApIHtcbiAgICB0aGlzLl9vbkNvbnRhY3RFbnRlciA9IG9uQ29udGFjdEVudGVyO1xuICAgIHRoaXMuX29uQ29udGFjdEV4aXQgPSBvbkNvbnRhY3RFeGl0O1xuICAgIHRoaXMuX29uQ29udGFjdFN0YXkgPSBvbkNvbnRhY3RTdGF5O1xuICAgIHRoaXMuX29uVHJpZ2dlckVudGVyID0gb25UcmlnZ2VyRW50ZXI7XG4gICAgdGhpcy5fb25UcmlnZ2VyRXhpdCA9IG9uVHJpZ2dlckV4aXQ7XG4gICAgdGhpcy5fb25UcmlnZ2VyU3RheSA9IG9uVHJpZ2dlclN0YXk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5zZXRHcmF2aXR5IH1cbiAgICovXG4gIHNldEdyYXZpdHkodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGdyYXZpdHkuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIuYWRkQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBhZGRDb2xsaWRlclNoYXBlKGNvbGxpZGVyU2hhcGU6IExpdGVDb2xsaWRlclNoYXBlKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRNYXBbY29sbGlkZXJTaGFwZS5faWRdID0ge307XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yZW1vdmVDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHJlbW92ZUNvbGxpZGVyU2hhcGUoY29sbGlkZXJTaGFwZTogTGl0ZUNvbGxpZGVyU2hhcGUpOiB2b2lkIHtcbiAgICBjb25zdCB7IF9ldmVudFBvb2w6IGV2ZW50UG9vbCwgX2N1cnJlbnRFdmVudHM6IGN1cnJlbnRFdmVudHMgfSA9IHRoaXM7XG4gICAgY29uc3QgeyBfaWQ6IHNoYXBlSUQgfSA9IGNvbGxpZGVyU2hhcGU7XG4gICAgZm9yIChsZXQgaSA9IGN1cnJlbnRFdmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gY3VycmVudEV2ZW50cy5nZXQoaSk7XG4gICAgICBpZiAoZXZlbnQuaW5kZXgxID09IHNoYXBlSUQgfHwgZXZlbnQuaW5kZXgyID09IHNoYXBlSUQpIHtcbiAgICAgICAgY3VycmVudEV2ZW50cy5kZWxldGVCeUluZGV4KGkpO1xuICAgICAgICBldmVudFBvb2wucHVzaChldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLl9ldmVudE1hcFtzaGFwZUlEXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLmFkZENvbGxpZGVyIH1cbiAgICovXG4gIGFkZENvbGxpZGVyKGFjdG9yOiBMaXRlQ29sbGlkZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jb2xsaWRlcnMucHVzaChhY3Rvcik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yZW1vdmVDb2xsaWRlciB9XG4gICAqL1xuICByZW1vdmVDb2xsaWRlcihjb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9jb2xsaWRlcnMuaW5kZXhPZihjb2xsaWRlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fY29sbGlkZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIudXBkYXRlIH1cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWU6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBjb2xsaWRlcnMgPSB0aGlzLl9jb2xsaWRlcnM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNvbGxpZGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5fY29sbGlzaW9uRGV0ZWN0aW9uKGRlbHRhVGltZSwgY29sbGlkZXJzW2ldKTtcbiAgICB9XG4gICAgdGhpcy5fZmlyZUV2ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yYXljYXN0IH1cbiAgICovXG4gIHJheWNhc3QoXG4gICAgcmF5OiBSYXksXG4gICAgZGlzdGFuY2U6IG51bWJlcixcbiAgICBvblJheWNhc3Q6IChvYmo6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICBoaXQ/OiAoc2hhcGVVbmlxdWVJRDogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBwb3NpdGlvbjogVmVjdG9yMywgbm9ybWFsOiBWZWN0b3IzKSA9PiB2b2lkXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbGxpZGVycyA9IHRoaXMuX2NvbGxpZGVycztcblxuICAgIGxldCBoaXRSZXN1bHQ6IExpdGVIaXRSZXN1bHQ7XG4gICAgaWYgKGhpdCkge1xuICAgICAgaGl0UmVzdWx0ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl9oaXRSZXN1bHQ7XG4gICAgfVxuXG4gICAgbGV0IGlzSGl0ID0gZmFsc2U7XG4gICAgY29uc3QgY3VySGl0ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl9jdXJyZW50SGl0O1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb2xsaWRlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbGxpZGVyID0gY29sbGlkZXJzW2ldO1xuXG4gICAgICBpZiAoY29sbGlkZXIuX3JheWNhc3QocmF5LCBvblJheWNhc3QsIGN1ckhpdCkpIHtcbiAgICAgICAgaXNIaXQgPSB0cnVlO1xuICAgICAgICBpZiAoY3VySGl0LmRpc3RhbmNlIDwgZGlzdGFuY2UpIHtcbiAgICAgICAgICBpZiAoaGl0UmVzdWx0KSB7XG4gICAgICAgICAgICBoaXRSZXN1bHQubm9ybWFsLmNvcHlGcm9tKGN1ckhpdC5ub3JtYWwpO1xuICAgICAgICAgICAgaGl0UmVzdWx0LnBvaW50LmNvcHlGcm9tKGN1ckhpdC5wb2ludCk7XG4gICAgICAgICAgICBoaXRSZXN1bHQuZGlzdGFuY2UgPSBjdXJIaXQuZGlzdGFuY2U7XG4gICAgICAgICAgICBoaXRSZXN1bHQuc2hhcGVJRCA9IGN1ckhpdC5zaGFwZUlEO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGlzdGFuY2UgPSBjdXJIaXQuZGlzdGFuY2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzSGl0ICYmIGhpdFJlc3VsdCkge1xuICAgICAgaGl0UmVzdWx0LnNoYXBlSUQgPSAtMTtcbiAgICAgIGhpdFJlc3VsdC5kaXN0YW5jZSA9IDA7XG4gICAgICBoaXRSZXN1bHQucG9pbnQuc2V0KDAsIDAsIDApO1xuICAgICAgaGl0UmVzdWx0Lm5vcm1hbC5zZXQoMCwgMCwgMCk7XG4gICAgfSBlbHNlIGlmIChpc0hpdCAmJiBoaXRSZXN1bHQpIHtcbiAgICAgIGhpdChoaXRSZXN1bHQuc2hhcGVJRCwgaGl0UmVzdWx0LmRpc3RhbmNlLCBoaXRSZXN1bHQucG9pbnQsIGhpdFJlc3VsdC5ub3JtYWwpO1xuICAgIH1cbiAgICByZXR1cm4gaXNIaXQ7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5hZGRDaGFyYWN0ZXJDb250cm9sbGVyIH1cbiAgICovXG4gIGFkZENoYXJhY3RlckNvbnRyb2xsZXIoY2hhcmFjdGVyQ29udHJvbGxlcjogSUNoYXJhY3RlckNvbnRyb2xsZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGFkZENoYXJhY3RlckNvbnRyb2xsZXIuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yZW1vdmVDaGFyYWN0ZXJDb250cm9sbGVyIH1cbiAgICovXG4gIHJlbW92ZUNoYXJhY3RlckNvbnRyb2xsZXIoY2hhcmFjdGVyQ29udHJvbGxlcjogSUNoYXJhY3RlckNvbnRyb2xsZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHJlbW92ZUNoYXJhY3RlckNvbnRyb2xsZXIuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBib3VuZGluZyBib3ggaW4gd29ybGQgc3BhY2UgZnJvbSBib3hDb2xsaWRlci5cbiAgICogQHBhcmFtIGJveENvbGxpZGVyIC0gVGhlIGJveENvbGxpZGVyIHRvIGNhbGN1bGF0ZVxuICAgKiBAcGFyYW0gb3V0IC0gVGhlIGNhbGN1bGF0ZWQgYm91bmRpbmdCb3hcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF91cGRhdGVXb3JsZEJveChib3hDb2xsaWRlcjogTGl0ZUJveENvbGxpZGVyU2hhcGUsIG91dDogQm91bmRpbmdCb3gpOiB2b2lkIHtcbiAgICBjb25zdCBtYXQgPSBib3hDb2xsaWRlci5fdHJhbnNmb3JtLndvcmxkTWF0cml4O1xuICAgIG91dC5taW4uY29weUZyb20oYm94Q29sbGlkZXIuX2JveE1pbik7XG4gICAgb3V0Lm1heC5jb3B5RnJvbShib3hDb2xsaWRlci5fYm94TWF4KTtcbiAgICBCb3VuZGluZ0JveC50cmFuc2Zvcm0ob3V0LCBtYXQsIG91dCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzcGhlcmUgaW5mbyBvZiB0aGUgZ2l2ZW4gc3BoZXJlIGNvbGxpZGVyIGluIHdvcmxkIHNwYWNlLlxuICAgKiBAcGFyYW0gc3BoZXJlQ29sbGlkZXIgLSBUaGUgZ2l2ZW4gc3BoZXJlIGNvbGxpZGVyXG4gICAqIEBwYXJhbSBvdXQgLSBUaGUgY2FsY3VsYXRlZCBib3VuZGluZ1NwaGVyZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX3VwV29ybGRTcGhlcmUoc3BoZXJlQ29sbGlkZXI6IExpdGVTcGhlcmVDb2xsaWRlclNoYXBlLCBvdXQ6IEJvdW5kaW5nU3BoZXJlKTogdm9pZCB7XG4gICAgVmVjdG9yMy50cmFuc2Zvcm1Db29yZGluYXRlKHNwaGVyZUNvbGxpZGVyLl90cmFuc2Zvcm0ucG9zaXRpb24sIHNwaGVyZUNvbGxpZGVyLl90cmFuc2Zvcm0ud29ybGRNYXRyaXgsIG91dC5jZW50ZXIpO1xuICAgIG91dC5yYWRpdXMgPSBzcGhlcmVDb2xsaWRlci53b3JsZFJhZGl1cztcbiAgfVxuXG4gIHByaXZhdGUgX2dldFRyaWdnZXIoaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKTogVHJpZ2dlckV2ZW50IHtcbiAgICBsZXQgZXZlbnQ6IFRyaWdnZXJFdmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRQb29sLmxlbmd0aCkge1xuICAgICAgZXZlbnQgPSB0aGlzLl9ldmVudFBvb2wucG9wKCk7XG4gICAgICBldmVudC5pbmRleDEgPSBpbmRleDE7XG4gICAgICBldmVudC5pbmRleDIgPSBpbmRleDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50ID0gbmV3IFRyaWdnZXJFdmVudChpbmRleDEsIGluZGV4Mik7XG4gICAgfVxuICAgIHRoaXMuX2V2ZW50TWFwW2luZGV4MV1baW5kZXgyXSA9IGV2ZW50O1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbGxpc2lvbkRldGVjdGlvbihkZWx0YVRpbWU6IG51bWJlciwgbXlDb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogdm9pZCB7XG4gICAgY29uc3QgY29sbGlkZXJzID0gdGhpcy5fY29sbGlkZXJzO1xuXG4gICAgY29uc3QgbXlDb2xsaWRlclNoYXBlcyA9IG15Q29sbGlkZXIuX3NoYXBlcztcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbXlDb2xsaWRlclNoYXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgbXlTaGFwZSA9IG15Q29sbGlkZXJTaGFwZXNbaV07XG4gICAgICBpZiAobXlTaGFwZSBpbnN0YW5jZW9mIExpdGVCb3hDb2xsaWRlclNoYXBlKSB7XG4gICAgICAgIExpdGVQaHlzaWNzTWFuYWdlci5fdXBkYXRlV29ybGRCb3gobXlTaGFwZSwgdGhpcy5fYm94KTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IGNvbGxpZGVycy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbGxpZGVyU2hhcGUgPSBjb2xsaWRlcnNbal0uX3NoYXBlcztcbiAgICAgICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gY29sbGlkZXJTaGFwZS5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSBjb2xsaWRlclNoYXBlW2tdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgxID0gc2hhcGUuX2lkO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gbXlTaGFwZS5faWQ7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2V2ZW50TWFwW2luZGV4MV1baW5kZXgyXSA6IHRoaXMuX2V2ZW50TWFwW2luZGV4Ml1baW5kZXgxXTtcbiAgICAgICAgICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkICYmICFldmVudC5hbHJlYWR5SW52b2tlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFwZSAhPSBteVNoYXBlICYmIHRoaXMuX2JveENvbGxpc2lvbihzaGFwZSkpIHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2dldFRyaWdnZXIoaW5kZXgxLCBpbmRleDIpIDogdGhpcy5fZ2V0VHJpZ2dlcihpbmRleDIsIGluZGV4MSk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcjtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFdmVudHMuYWRkKGV2ZW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXIpIHtcbiAgICAgICAgICAgICAgICBldmVudC5zdGF0ZSA9IFRyaWdnZXJFdmVudFN0YXRlLlN0YXk7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuU3RheSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobXlTaGFwZSBpbnN0YW5jZW9mIExpdGVTcGhlcmVDb2xsaWRlclNoYXBlKSB7XG4gICAgICAgIExpdGVQaHlzaWNzTWFuYWdlci5fdXBXb3JsZFNwaGVyZShteVNoYXBlLCB0aGlzLl9zcGhlcmUpO1xuICAgICAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gY29sbGlkZXJzLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgY29uc3QgY29sbGlkZXJTaGFwZSA9IGNvbGxpZGVyc1tqXS5fc2hhcGVzO1xuICAgICAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBjb2xsaWRlclNoYXBlLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IGNvbGxpZGVyU2hhcGVba107XG4gICAgICAgICAgICBjb25zdCBpbmRleDEgPSBzaGFwZS5faWQ7XG4gICAgICAgICAgICBjb25zdCBpbmRleDIgPSBteVNoYXBlLl9pZDtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gaW5kZXgxIDwgaW5kZXgyID8gdGhpcy5fZXZlbnRNYXBbaW5kZXgxXVtpbmRleDJdIDogdGhpcy5fZXZlbnRNYXBbaW5kZXgyXVtpbmRleDFdO1xuICAgICAgICAgICAgaWYgKGV2ZW50ICE9PSB1bmRlZmluZWQgJiYgIWV2ZW50LmFscmVhZHlJbnZva2VkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNoYXBlICE9IG15U2hhcGUgJiYgdGhpcy5fc3BoZXJlQ29sbGlzaW9uKHNoYXBlKSkge1xuICAgICAgICAgICAgICBpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gaW5kZXgxIDwgaW5kZXgyID8gdGhpcy5fZ2V0VHJpZ2dlcihpbmRleDEsIGluZGV4MikgOiB0aGlzLl9nZXRUcmlnZ2VyKGluZGV4MiwgaW5kZXgxKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdGF0ZSA9IFRyaWdnZXJFdmVudFN0YXRlLkVudGVyO1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEV2ZW50cy5hZGQoZXZlbnQpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09PSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcikge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRlID0gVHJpZ2dlckV2ZW50U3RhdGUuU3RheTtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09PSBUcmlnZ2VyRXZlbnRTdGF0ZS5TdGF5KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpcmVFdmVudCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IF9ldmVudFBvb2w6IGV2ZW50UG9vbCwgX2N1cnJlbnRFdmVudHM6IGN1cnJlbnRFdmVudHMgfSA9IHRoaXM7XG4gICAgZm9yIChsZXQgaSA9IGN1cnJlbnRFdmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gY3VycmVudEV2ZW50cy5nZXQoaSk7XG4gICAgICBpZiAoIWV2ZW50LmFscmVhZHlJbnZva2VkKSB7XG4gICAgICAgIGlmIChldmVudC5zdGF0ZSA9PSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcikge1xuICAgICAgICAgIHRoaXMuX29uVHJpZ2dlckVudGVyKGV2ZW50LmluZGV4MSwgZXZlbnQuaW5kZXgyKTtcbiAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT0gVHJpZ2dlckV2ZW50U3RhdGUuU3RheSkge1xuICAgICAgICAgIHRoaXMuX29uVHJpZ2dlclN0YXkoZXZlbnQuaW5kZXgxLCBldmVudC5pbmRleDIpO1xuICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5FeGl0O1xuICAgICAgICB0aGlzLl9ldmVudE1hcFtldmVudC5pbmRleDFdW2V2ZW50LmluZGV4Ml0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5fb25UcmlnZ2VyRXhpdChldmVudC5pbmRleDEsIGV2ZW50LmluZGV4Mik7XG5cbiAgICAgICAgY3VycmVudEV2ZW50cy5kZWxldGVCeUluZGV4KGkpO1xuICAgICAgICBldmVudFBvb2wucHVzaChldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYm94Q29sbGlzaW9uKG90aGVyOiBMaXRlQ29sbGlkZXJTaGFwZSk6IGJvb2xlYW4ge1xuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIExpdGVCb3hDb2xsaWRlclNoYXBlKSB7XG4gICAgICBjb25zdCBib3ggPSBMaXRlUGh5c2ljc01hbmFnZXIuX3RlbXBCb3g7XG4gICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwZGF0ZVdvcmxkQm94KG90aGVyLCBib3gpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c0JveEFuZEJveChib3gsIHRoaXMuX2JveCk7XG4gICAgfSBlbHNlIGlmIChvdGhlciBpbnN0YW5jZW9mIExpdGVTcGhlcmVDb2xsaWRlclNoYXBlKSB7XG4gICAgICBjb25zdCBzcGhlcmUgPSBMaXRlUGh5c2ljc01hbmFnZXIuX3RlbXBTcGhlcmU7XG4gICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwV29ybGRTcGhlcmUob3RoZXIsIHNwaGVyZSk7XG4gICAgICByZXR1cm4gQ29sbGlzaW9uVXRpbC5pbnRlcnNlY3RzU3BoZXJlQW5kQm94KHNwaGVyZSwgdGhpcy5fYm94KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3BoZXJlQ29sbGlzaW9uKG90aGVyOiBMaXRlQ29sbGlkZXJTaGFwZSk6IGJvb2xlYW4ge1xuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIExpdGVCb3hDb2xsaWRlclNoYXBlKSB7XG4gICAgICBjb25zdCBib3ggPSBMaXRlUGh5c2ljc01hbmFnZXIuX3RlbXBCb3g7XG4gICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwZGF0ZVdvcmxkQm94KG90aGVyLCBib3gpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c1NwaGVyZUFuZEJveCh0aGlzLl9zcGhlcmUsIGJveCk7XG4gICAgfSBlbHNlIGlmIChvdGhlciBpbnN0YW5jZW9mIExpdGVTcGhlcmVDb2xsaWRlclNoYXBlKSB7XG4gICAgICBjb25zdCBzcGhlcmUgPSBMaXRlUGh5c2ljc01hbmFnZXIuX3RlbXBTcGhlcmU7XG4gICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwV29ybGRTcGhlcmUob3RoZXIsIHNwaGVyZSk7XG4gICAgICByZXR1cm4gQ29sbGlzaW9uVXRpbC5pbnRlcnNlY3RzU3BoZXJlQW5kU3BoZXJlKHNwaGVyZSwgdGhpcy5fc3BoZXJlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUGh5c2ljcyBzdGF0ZVxuICovXG5lbnVtIFRyaWdnZXJFdmVudFN0YXRlIHtcbiAgRW50ZXIsXG4gIFN0YXksXG4gIEV4aXRcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGV2ZW50IHRvIHN0b3JlIGludGVyYWN0aXZlIG9iamVjdCBpZHMgYW5kIHN0YXRlLlxuICovXG5jbGFzcyBUcmlnZ2VyRXZlbnQge1xuICBzdGF0ZTogVHJpZ2dlckV2ZW50U3RhdGU7XG4gIGluZGV4MTogbnVtYmVyO1xuICBpbmRleDI6IG51bWJlcjtcbiAgYWxyZWFkeUludm9rZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihpbmRleDE6IG51bWJlciwgaW5kZXgyOiBudW1iZXIpIHtcbiAgICB0aGlzLmluZGV4MSA9IGluZGV4MTtcbiAgICB0aGlzLmluZGV4MiA9IGluZGV4MjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVBoeXNpY3NNYXRlcmlhbCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuXG4vKipcbiAqIFBoeXNpY3MgbWF0ZXJpYWwgZGVzY3JpYmVzIGhvdyB0byBoYW5kbGUgY29sbGlkaW5nIG9iamVjdHMgKGZyaWN0aW9uLCBib3VuY2luZXNzKS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVQaHlzaWNzTWF0ZXJpYWwgaW1wbGVtZW50cyBJUGh5c2ljc01hdGVyaWFsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc3RhdGljRnJpY3Rpb246IG51bWJlcixcbiAgICBkeW5hbWljRnJpY3Rpb246IG51bWJlcixcbiAgICBib3VuY2luZXNzOiBudW1iZXIsXG4gICAgZnJpY3Rpb25Db21iaW5lOiBudW1iZXIsXG4gICAgYm91bmNlQ29tYmluZTogbnVtYmVyXG4gICkge31cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0Qm91bmNpbmVzcyB9XG4gICAqL1xuICBzZXRCb3VuY2luZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHBoeXNpY3MgbWF0ZXJpYWwuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0RHluYW1pY0ZyaWN0aW9uIH1cbiAgICovXG4gIHNldER5bmFtaWNGcmljdGlvbih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldFN0YXRpY0ZyaWN0aW9uIH1cbiAgICovXG4gIHNldFN0YXRpY0ZyaWN0aW9uKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHBoeXNpY3MgbWF0ZXJpYWwuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0Qm91bmNlQ29tYmluZSB9XG4gICAqL1xuICBzZXRCb3VuY2VDb21iaW5lKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHBoeXNpY3MgbWF0ZXJpYWwuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0RnJpY3Rpb25Db21iaW5lIH1cbiAgICovXG4gIHNldEZyaWN0aW9uQ29tYmluZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLmRlc3Ryb3kgfVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHt9XG59XG4iLCJpbXBvcnQgeyBJU3RhdGljQ29sbGlkZXIgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVDb2xsaWRlclwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5cbi8qKlxuICogQSBzdGF0aWMgY29sbGlkZXIgY29tcG9uZW50IHRoYXQgd2lsbCBub3QgbW92ZS5cbiAqIEByZW1hcmtzIE1vc3RseSB1c2VkIGZvciBvYmplY3Qgd2hpY2ggYWx3YXlzIHN0YXlzIGF0IHRoZSBzYW1lIHBsYWNlIGFuZCBuZXZlciBtb3ZlcyBhcm91bmQuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlU3RhdGljQ29sbGlkZXIgZXh0ZW5kcyBMaXRlQ29sbGlkZXIgaW1wbGVtZW50cyBJU3RhdGljQ29sbGlkZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBzdGF0aWMgYWN0b3IuXG4gICAqIEBwYXJhbSBwb3NpdGlvbiAtIFRoZSBnbG9iYWwgcG9zaXRpb25cbiAgICogQHBhcmFtIHJvdGF0aW9uIC0gVGhlIGdsb2JhbCByb3RhdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFJvdGF0aW9uUXVhdGVybmlvbihyb3RhdGlvbi54LCByb3RhdGlvbi55LCByb3RhdGlvbi56LCByb3RhdGlvbi53KTtcbiAgfVxufVxuIiwiLyoqXG4gKiAgU3RhdGljIGludGVyZmFjZSBpbXBsZW1lbnQgZGVjb3JhdG9yLlxuICogIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzOTU1MTU3L2hvdy10by1kZWZpbmUtc3RhdGljLXByb3BlcnR5LWluLXR5cGVzY3JpcHQtaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQ8VD4oKSB7XG4gIHJldHVybiA8VSBleHRlbmRzIFQ+KGNvbnN0cnVjdG9yOiBVKSA9PiB7XG4gICAgY29uc3RydWN0b3I7XG4gIH07XG59XG4iLCJpbXBvcnQge1xuICBJQm94Q29sbGlkZXJTaGFwZSxcbiAgSUNhcHN1bGVDb2xsaWRlclNoYXBlLFxuICBJQ2hhcmFjdGVyQ29udHJvbGxlcixcbiAgSUR5bmFtaWNDb2xsaWRlcixcbiAgSVBoeXNpY3MsXG4gIElQaHlzaWNzTWFuYWdlcixcbiAgSVBoeXNpY3NNYXRlcmlhbCxcbiAgSVBsYW5lQ29sbGlkZXJTaGFwZSxcbiAgSVNwaGVyZUNvbGxpZGVyU2hhcGUsXG4gIElTdGF0aWNDb2xsaWRlcixcbiAgSUZpeGVkSm9pbnQsXG4gIElIaW5nZUpvaW50LFxuICBJU3ByaW5nSm9pbnQsXG59IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlRHluYW1pY0NvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUR5bmFtaWNDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZVBoeXNpY3NNYW5hZ2VyIH0gZnJvbSBcIi4vTGl0ZVBoeXNpY3NNYW5hZ2VyXCI7XG5pbXBvcnQgeyBMaXRlUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4vTGl0ZVBoeXNpY3NNYXRlcmlhbFwiO1xuaW1wb3J0IHsgTGl0ZVN0YXRpY0NvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZVN0YXRpY0NvbGxpZGVyXCI7XG5pbXBvcnQgeyBMaXRlQm94Q29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVCb3hDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVTcGhlcmVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IFN0YXRpY0ludGVyZmFjZUltcGxlbWVudCB9IGZyb20gXCIuL1N0YXRpY0ludGVyZmFjZUltcGxlbWVudFwiO1xuXG5AU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50PElQaHlzaWNzPigpXG5leHBvcnQgY2xhc3MgTGl0ZVBoeXNpY3Mge1xuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVBoeXNpY3NNYW5hZ2VyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQaHlzaWNzTWFuYWdlcihcbiAgICBvbkNvbnRhY3RCZWdpbj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvbkNvbnRhY3RFbmQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0UGVyc2lzdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJCZWdpbj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJFbmQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyUGVyc2lzdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZFxuICApOiBJUGh5c2ljc01hbmFnZXIge1xuICAgIHJldHVybiBuZXcgTGl0ZVBoeXNpY3NNYW5hZ2VyKFxuICAgICAgb25Db250YWN0QmVnaW4sXG4gICAgICBvbkNvbnRhY3RFbmQsXG4gICAgICBvbkNvbnRhY3RQZXJzaXN0LFxuICAgICAgb25UcmlnZ2VyQmVnaW4sXG4gICAgICBvblRyaWdnZXJFbmQsXG4gICAgICBvblRyaWdnZXJQZXJzaXN0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlU3RhdGljQ29sbGlkZXIgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVN0YXRpY0NvbGxpZGVyKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbik6IElTdGF0aWNDb2xsaWRlciB7XG4gICAgcmV0dXJuIG5ldyBMaXRlU3RhdGljQ29sbGlkZXIocG9zaXRpb24sIHJvdGF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlRHluYW1pY0NvbGxpZGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVEeW5hbWljQ29sbGlkZXIocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKTogSUR5bmFtaWNDb2xsaWRlciB7XG4gICAgcmV0dXJuIG5ldyBMaXRlRHluYW1pY0NvbGxpZGVyKHBvc2l0aW9uLCByb3RhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUNoYXJhY3RlckNvbnRyb2xsZXIgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUNoYXJhY3RlckNvbnRyb2xsZXIoKTogSUNoYXJhY3RlckNvbnRyb2xsZXIge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgY3JlYXRlQ2hhcmFjdGVyQ29udHJvbGxlci4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlUGh5c2ljc01hdGVyaWFsIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQaHlzaWNzTWF0ZXJpYWwoXG4gICAgc3RhdGljRnJpY3Rpb246IG51bWJlcixcbiAgICBkeW5hbWljRnJpY3Rpb246IG51bWJlcixcbiAgICBib3VuY2luZXNzOiBudW1iZXIsXG4gICAgZnJpY3Rpb25Db21iaW5lOiBudW1iZXIsXG4gICAgYm91bmNlQ29tYmluZTogbnVtYmVyXG4gICk6IElQaHlzaWNzTWF0ZXJpYWwge1xuICAgIHJldHVybiBuZXcgTGl0ZVBoeXNpY3NNYXRlcmlhbChzdGF0aWNGcmljdGlvbiwgZHluYW1pY0ZyaWN0aW9uLCBib3VuY2luZXNzLCBmcmljdGlvbkNvbWJpbmUsIGJvdW5jZUNvbWJpbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVCb3hDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVCb3hDb2xsaWRlclNoYXBlKHVuaXF1ZUlEOiBudW1iZXIsIHNpemU6IFZlY3RvcjMsIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsKTogSUJveENvbGxpZGVyU2hhcGUge1xuICAgIHJldHVybiBuZXcgTGl0ZUJveENvbGxpZGVyU2hhcGUodW5pcXVlSUQsIHNpemUsIG1hdGVyaWFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlU3BoZXJlQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU3BoZXJlQ29sbGlkZXJTaGFwZShcbiAgICB1bmlxdWVJRDogbnVtYmVyLFxuICAgIHJhZGl1czogbnVtYmVyLFxuICAgIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsXG4gICk6IElTcGhlcmVDb2xsaWRlclNoYXBlIHtcbiAgICByZXR1cm4gbmV3IExpdGVTcGhlcmVDb2xsaWRlclNoYXBlKHVuaXF1ZUlELCByYWRpdXMsIG1hdGVyaWFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlUGxhbmVDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQbGFuZUNvbGxpZGVyU2hhcGUodW5pcXVlSUQ6IG51bWJlciwgbWF0ZXJpYWw6IExpdGVQaHlzaWNzTWF0ZXJpYWwpOiBJUGxhbmVDb2xsaWRlclNoYXBlIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IFBsYW5lQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlQ2Fwc3VsZUNvbGxpZGVyU2hhcGUgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUNhcHN1bGVDb2xsaWRlclNoYXBlKFxuICAgIHVuaXF1ZUlEOiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgbWF0ZXJpYWw6IExpdGVQaHlzaWNzTWF0ZXJpYWxcbiAgKTogSUNhcHN1bGVDb2xsaWRlclNoYXBlIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IENhcHN1bGVDb2xsaWRlclNoYXBlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVGaXhlZEpvaW50IH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVGaXhlZEpvaW50KGNvbGxpZGVyOiBMaXRlQ29sbGlkZXIpOiBJRml4ZWRKb2ludCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBDYXBzdWxlQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlSGluZ2VKb2ludCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlSGluZ2VKb2ludChjb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogSUhpbmdlSm9pbnQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgQ2Fwc3VsZUNvbGxpZGVyU2hhcGUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVNwcmluZ0pvaW50IH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTcHJpbmdKb2ludChjb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogSVNwcmluZ0pvaW50IHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IENhcHN1bGVDb2xsaWRlclNoYXBlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG59XG4iXSwibmFtZXMiOlsicmVtb3ZlRnJvbUFycmF5IiwiYXJyYXkiLCJpdGVtIiwiaW5kZXgiLCJpbmRleE9mIiwibGFzdCIsImxlbmd0aCIsIkxpdGVVcGRhdGVGbGFnIiwiX2ZsYWdzIiwiZmxhZyIsInB1c2giLCJkZXN0cm95IiwiTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyIiwiX3VwZGF0ZUZsYWdzIiwicmVnaXN0ZXIiLCJkaXN0cmlidXRlIiwidXBkYXRlRmxhZ3MiLCJpIiwiTGl0ZUNvbGxpZGVyU2hhcGUiLCJfdHJhbnNmb3JtIiwiTGl0ZVRyYW5zZm9ybSIsIl9pbnZNb2RlbE1hdHJpeCIsIk1hdHJpeCIsIm93bmVyIiwiX2ludmVyc2VXb3JsZE1hdEZsYWciLCJyZWdpc3RlcldvcmxkQ2hhbmdlRmxhZyIsInNldFJvdGF0aW9uIiwicm90YXRpb24iLCJjb25zb2xlIiwibG9nIiwic2V0UG9zaXRpb24iLCJwb3NpdGlvbiIsIngiLCJ5IiwieiIsInNldENvbnRhY3RPZmZzZXQiLCJvZmZzZXQiLCJzZXRNYXRlcmlhbCIsIm1hdGVyaWFsIiwic2V0VW5pcXVlSUQiLCJpZCIsIl9pZCIsInNldElzVHJpZ2dlciIsInZhbHVlIiwiX3VwZGF0ZUhpdFJlc3VsdCIsInJheSIsInJheURpc3RhbmNlIiwib3V0SGl0Iiwib3JpZ2luIiwiaXNXb3JsZFJheSIsImhpdFBvaW50IiwiX3RlbXBQb2ludCIsImdldFBvaW50IiwiVmVjdG9yMyIsInRyYW5zZm9ybUNvb3JkaW5hdGUiLCJ3b3JsZE1hdHJpeCIsImRpc3RhbmNlIiwicG9pbnQiLCJjb3B5RnJvbSIsInNoYXBlSUQiLCJfZ2V0TG9jYWxSYXkiLCJ3b3JsZFRvTG9jYWwiLCJfZ2V0SW52TW9kZWxNYXRyaXgiLCJvdXRSYXkiLCJfcmF5IiwidHJhbnNmb3JtTm9ybWFsIiwiZGlyZWN0aW9uIiwibm9ybWFsaXplIiwiaW52ZXJ0IiwiUmF5IiwiX3Bvc2l0aW9uIiwiX3JvdGF0aW9uIiwiX3JvdGF0aW9uUXVhdGVybmlvbiIsIlF1YXRlcm5pb24iLCJfc2NhbGUiLCJfd29ybGRSb3RhdGlvblF1YXRlcm5pb24iLCJfbG9jYWxNYXRyaXgiLCJfd29ybGRNYXRyaXgiLCJfdXBkYXRlRmxhZ01hbmFnZXIiLCJfaXNQYXJlbnREaXJ0eSIsIl9wYXJlbnRUcmFuc2Zvcm1DYWNoZSIsIl9kaXJ0eUZsYWciLCJzZXQiLCJzZXRSb3RhdGlvblF1YXRlcm5pb24iLCJ3Iiwicm90YXRpb25RdWF0ZXJuaW9uIiwic2V0U2NhbGUiLCJzY2FsZSIsIl91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZyIsIl9pc0NvbnRhaW5EaXJ0eUZsYWdzIiwiX3dvcmxkQXNzb2NpYXRlZENoYW5nZSIsIl9vd25lciIsIkxpdGVDb2xsaWRlciIsInNoYXBlcyIsIl9zaGFwZXMiLCJuIiwiX3VwZGF0ZVdvcmxkUm90YXRpb25GbGFnIiwiX3VwZGF0ZVdvcmxkU2NhbGVGbGFnIiwiX3VwZGF0ZUFsbFdvcmxkRmxhZyIsIl9nZXRQYXJlbnRUcmFuc2Zvcm0iLCJwYXJlbnRDYWNoZSIsInBhcmVudCIsIl9jb2xsaWRlciIsInRhcmdldERpcnR5RmxhZ3MiLCJfaXNDb250YWluRGlydHlGbGFnIiwidHlwZSIsIl9zZXREaXJ0eUZsYWdUcnVlIiwiX3NldERpcnR5RmxhZ0ZhbHNlIiwicm90YXRpb25FdWxlciIsIk1hdGhVdGlsIiwiZGVncmVlVG9SYWRpYW4iLCJ3b3JsZFJvdGF0aW9uUXVhdGVybmlvbiIsIm11bHRpcGx5IiwiX3RlbXBRdWF0MCIsImxvY2FsTWF0cml4IiwiYWZmaW5lVHJhbnNmb3JtYXRpb24iLCJkZWNvbXBvc2UiLCJfdGVtcE1hdDQyIiwiVHJhbnNmb3JtRmxhZyIsIkxvY2FsRXVsZXIiLCJMb2NhbFF1YXQiLCJXb3JsZFBvc2l0aW9uIiwiV29ybGRFdWxlciIsIldvcmxkUXVhdCIsIldvcmxkU2NhbGUiLCJMb2NhbE1hdHJpeCIsIldvcmxkTWF0cml4IiwiV21XcCIsIldtV2VXcSIsIldtV3BXZVdxIiwiV21XcyIsIldtV3BXcyIsIldtV3BXZVdxV3MiLCJhZGRTaGFwZSIsInNoYXBlIiwib2xkQ29sbGlkZXIiLCJyZW1vdmVTaGFwZSIsInNwbGljZSIsInNldFdvcmxkVHJhbnNmb3JtIiwiZ2V0V29ybGRUcmFuc2Zvcm0iLCJvdXRQb3NpdGlvbiIsIm91dFJvdGF0aW9uIiwiX3JheWNhc3QiLCJvblJheWNhc3QiLCJoaXQiLCJOdW1iZXIiLCJNQVhfVkFMVUUiLCJMaXRlRHluYW1pY0NvbGxpZGVyIiwiYWRkRm9yY2UiLCJmb3JjZSIsImFkZFRvcnF1ZSIsInRvcnF1ZSIsIm1vdmUiLCJwb3NpdGlvbk9yUm90YXRpb24iLCJzbGVlcCIsInNldEFuZ3VsYXJEYW1waW5nIiwic2V0QW5ndWxhclZlbG9jaXR5Iiwic2V0Q2VudGVyT2ZNYXNzIiwic2V0Q29sbGlzaW9uRGV0ZWN0aW9uTW9kZSIsInNldENvbnN0cmFpbnRzIiwiZmxhZ3MiLCJzZXRJbmVydGlhVGVuc29yIiwic2V0SXNLaW5lbWF0aWMiLCJzZXRMaW5lYXJEYW1waW5nIiwic2V0TGluZWFyVmVsb2NpdHkiLCJzZXRNYXNzIiwic2V0TWF4QW5ndWxhclZlbG9jaXR5Iiwic2V0TWF4RGVwZW5ldHJhdGlvblZlbG9jaXR5Iiwic2V0U2xlZXBUaHJlc2hvbGQiLCJzZXRTb2x2ZXJJdGVyYXRpb25zIiwid2FrZVVwIiwiRGlzb3JkZXJlZEFycmF5IiwiY291bnQiLCJfZWxlbWVudHMiLCJBcnJheSIsImFkZCIsImVsZW1lbnQiLCJkZWxldGUiLCJkZWxldGVCeUluZGV4IiwiZ2V0IiwiZWxlbWVudHMiLCJlbmQiLCJsYXN0SW5kZXgiLCJnYXJiYWdlQ29sbGVjdGlvbiIsIkxpdGVIaXRSZXN1bHQiLCJub3JtYWwiLCJMaXRlQm94Q29sbGlkZXJTaGFwZSIsInVuaXF1ZUlEIiwic2l6ZSIsIl9oYWxmU2l6ZSIsIl9ib3hNaW4iLCJfYm94TWF4IiwiX3NldEJvbmRpbmdCb3giLCJzZXRXb3JsZFNjYWxlIiwic2V0U2l6ZSIsImxvY2FsUmF5IiwiYm91bmRpbmdCb3giLCJfdGVtcEJveCIsIm1pbiIsIm1heCIsImludGVyc2VjdEJveCIsImNlbnRlciIsImhhbGZTaXplIiwic3VidHJhY3QiLCJCb3VuZGluZ0JveCIsIkxpdGVTcGhlcmVDb2xsaWRlclNoYXBlIiwicmFkaXVzIiwiX3JhZGl1cyIsIl9tYXhTY2FsZSIsInNldFJhZGl1cyIsIk1hdGgiLCJib3VuZGluZ1NwaGVyZSIsIl90ZW1wU3BoZXJlIiwid29ybGRSYWRpdXMiLCJpbnRlcnNlY3RTcGhlcmUiLCJCb3VuZGluZ1NwaGVyZSIsIkxpdGVQaHlzaWNzTWFuYWdlciIsIm9uQ29udGFjdEVudGVyIiwib25Db250YWN0RXhpdCIsIm9uQ29udGFjdFN0YXkiLCJvblRyaWdnZXJFbnRlciIsIm9uVHJpZ2dlckV4aXQiLCJvblRyaWdnZXJTdGF5IiwiX2NvbGxpZGVycyIsIl9zcGhlcmUiLCJfYm94IiwiX2N1cnJlbnRFdmVudHMiLCJfZXZlbnRNYXAiLCJfZXZlbnRQb29sIiwiX29uQ29udGFjdEVudGVyIiwiX29uQ29udGFjdEV4aXQiLCJfb25Db250YWN0U3RheSIsIl9vblRyaWdnZXJFbnRlciIsIl9vblRyaWdnZXJFeGl0IiwiX29uVHJpZ2dlclN0YXkiLCJzZXRHcmF2aXR5IiwiYWRkQ29sbGlkZXJTaGFwZSIsImNvbGxpZGVyU2hhcGUiLCJyZW1vdmVDb2xsaWRlclNoYXBlIiwiZXZlbnRQb29sIiwiY3VycmVudEV2ZW50cyIsImV2ZW50IiwiaW5kZXgxIiwiaW5kZXgyIiwiYWRkQ29sbGlkZXIiLCJhY3RvciIsInJlbW92ZUNvbGxpZGVyIiwiY29sbGlkZXIiLCJ1cGRhdGUiLCJkZWx0YVRpbWUiLCJjb2xsaWRlcnMiLCJsZW4iLCJfY29sbGlzaW9uRGV0ZWN0aW9uIiwiX2ZpcmVFdmVudCIsInJheWNhc3QiLCJoaXRSZXN1bHQiLCJfaGl0UmVzdWx0IiwiaXNIaXQiLCJjdXJIaXQiLCJfY3VycmVudEhpdCIsImFkZENoYXJhY3RlckNvbnRyb2xsZXIiLCJjaGFyYWN0ZXJDb250cm9sbGVyIiwicmVtb3ZlQ2hhcmFjdGVyQ29udHJvbGxlciIsIl9nZXRUcmlnZ2VyIiwicG9wIiwiVHJpZ2dlckV2ZW50IiwibXlDb2xsaWRlciIsIm15Q29sbGlkZXJTaGFwZXMiLCJteVNoYXBlIiwiX3VwZGF0ZVdvcmxkQm94IiwiaiIsImsiLCJ1bmRlZmluZWQiLCJhbHJlYWR5SW52b2tlZCIsIl9ib3hDb2xsaXNpb24iLCJzdGF0ZSIsIkVudGVyIiwiU3RheSIsIl91cFdvcmxkU3BoZXJlIiwiX3NwaGVyZUNvbGxpc2lvbiIsIkV4aXQiLCJvdGhlciIsImJveCIsIkNvbGxpc2lvblV0aWwiLCJpbnRlcnNlY3RzQm94QW5kQm94Iiwic3BoZXJlIiwiaW50ZXJzZWN0c1NwaGVyZUFuZEJveCIsImludGVyc2VjdHNTcGhlcmVBbmRTcGhlcmUiLCJib3hDb2xsaWRlciIsIm91dCIsIm1hdCIsInRyYW5zZm9ybSIsInNwaGVyZUNvbGxpZGVyIiwiVHJpZ2dlckV2ZW50U3RhdGUiLCJMaXRlUGh5c2ljc01hdGVyaWFsIiwic3RhdGljRnJpY3Rpb24iLCJkeW5hbWljRnJpY3Rpb24iLCJib3VuY2luZXNzIiwiZnJpY3Rpb25Db21iaW5lIiwiYm91bmNlQ29tYmluZSIsInNldEJvdW5jaW5lc3MiLCJzZXREeW5hbWljRnJpY3Rpb24iLCJzZXRTdGF0aWNGcmljdGlvbiIsInNldEJvdW5jZUNvbWJpbmUiLCJzZXRGcmljdGlvbkNvbWJpbmUiLCJMaXRlU3RhdGljQ29sbGlkZXIiLCJTdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQiLCJjb25zdHJ1Y3RvciIsIkxpdGVQaHlzaWNzIiwiY3JlYXRlUGh5c2ljc01hbmFnZXIiLCJvbkNvbnRhY3RCZWdpbiIsIm9uQ29udGFjdEVuZCIsIm9uQ29udGFjdFBlcnNpc3QiLCJvblRyaWdnZXJCZWdpbiIsIm9uVHJpZ2dlckVuZCIsIm9uVHJpZ2dlclBlcnNpc3QiLCJjcmVhdGVTdGF0aWNDb2xsaWRlciIsImNyZWF0ZUR5bmFtaWNDb2xsaWRlciIsImNyZWF0ZUNoYXJhY3RlckNvbnRyb2xsZXIiLCJjcmVhdGVQaHlzaWNzTWF0ZXJpYWwiLCJjcmVhdGVCb3hDb2xsaWRlclNoYXBlIiwiY3JlYXRlU3BoZXJlQ29sbGlkZXJTaGFwZSIsImNyZWF0ZVBsYW5lQ29sbGlkZXJTaGFwZSIsImNyZWF0ZUNhcHN1bGVDb2xsaWRlclNoYXBlIiwiaGVpZ2h0IiwiY3JlYXRlRml4ZWRKb2ludCIsImNyZWF0ZUhpbmdlSm9pbnQiLCJjcmVhdGVTcHJpbmdKb2ludCJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBd0NBO0FBQ08sU0FBUyxVQUFVLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQzFELElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLEVB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@galacean/engine-physics-lite",
|
|
3
|
-
"version": "0.0.0-experimental-animator-additive.
|
|
3
|
+
"version": "0.0.0-experimental-animator-additive.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
"types/**/*"
|
|
23
23
|
],
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@galacean/engine-design": "0.0.0-experimental-animator-additive.
|
|
26
|
-
"@galacean/engine": "0.0.0-experimental-animator-additive.
|
|
25
|
+
"@galacean/engine-design": "0.0.0-experimental-animator-additive.2",
|
|
26
|
+
"@galacean/engine": "0.0.0-experimental-animator-additive.2"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
|
-
"@galacean/engine": "0.0.0-experimental-animator-additive.
|
|
29
|
+
"@galacean/engine": "0.0.0-experimental-animator-additive.2"
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"b:types": "tsc"
|