LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqICBOb3RlcGFkIChDemVjaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1cgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQKICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlCiAqICBDb3B5cmlnaHQgMjAwNCBEYXZpZCBLcmVkYmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19DWkVDSCwgU1VCTEFOR19ERUZBVUxUCgovKiBDemVjaCBzdHJpbmdzIGluIENQMTI1MCAqLwoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZTb3Vib3IiIHsKICBNRU5VSVRFTSAiJk5vdv1cdEN0cmwrTiIsICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIiZPdGV2+O10Li4uXHRDdHJsK08iLCAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJlVsb55pdFx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIlVsb55pdCBqJmFrby4uLiIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZUaXNrLi4uXHRDdHJsK1AiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJOYXMmdGF2ZW7tIHN0cuFua3kuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJOYXN0YXZlbu0gdGlza+Emcm55Li4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJktvbmVjIiwgICAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIlUmcHJhdml0IiB7CiAgTUVOVUlURU0gIiZacOx0XHRDdHJsK1oiLCAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiVnlqbW91JnRcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImS29w7XJvdmF0XHRDdHJsK0MiLCAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiJlZsb55pdFx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZTbWF6YXRcdERlbCIsICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJWeWJyYXQgdpomZVx0Q3RybCtBIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiyCZhcy9EYXR1bVx0RjUiLCAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlphbG8mbWl0IGRsb3Vo6SD44WRreSIsICBDTURfV1JBUAogIE1FTlVJVEVNICImUO1zbW8uLi4iLCAgICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJkhsZWThbu0iIHsKICBNRU5VSVRFTSAiJkhsZWRlai4uLlx0Q3RybCtGIiwgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZOYWpkaSBkYWya7Vx0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImTuFwb3bsZGEiIHsKICBNRU5VSVRFTSAiJk9ic2FoIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImTmFq7XQuLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIiZQb21vYyBrIG7hcG927GTsIiwgICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFib3V0IE5vdGVwYWQuLi4iLCBDTURfSEVMUF9BQk9VVF9OT1RFUEFECiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiTmFzdGF2ZW7tIHN0cuFua3kiCnsKTFRFWFQgICAgIlrhJmhsYXbtOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImWuFwYXTtOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk9rcmFqZToiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZMZXb9OiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImSG9ybu06IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiUCZyYXb9OiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkRvbG7tOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiU3Rvcm5vIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImTuFwb3bsZGEiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJTdHJhbmEgJnAiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm90ZXBhZCIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNIWUJBIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkFST1bBTs0iClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hY2UiCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGJleiBu4Xp2dSkiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVpplY2hueSBzb3Vib3J5ICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIlRleHRvdukgc291Ym9yeSAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvdWJvciAnJXMnIGplIHBybyBub3RlcGFkIHD47WxpmiB2ZWxr/S5cbiBcClBvdZ5panRlIGppbv0gZWRpdG9yLCBwcm9z7W0uIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVieWwgemFk4W4gnuFkbv0gdGV4dC4gXApcblBsZWFzZSB0eXBlIHNvbWV0aGluZyBhbmQgdHJ5IGFnYWluIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU291Ym9yICclcydcbm5lZXhpc3R1amUuXG5cbiBcCkNoY2V0ZSBobyB2eXR2b/hpdCA/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU291Ym9yICclcydcbmJ5bCB6bexu7G4uXG5cbiBcCkNoY2V0ZSB1bG+eaXQgem3sbnkgPyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBuZWJ5bCBuYWxlemVuLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJOZW7tIGRvc3QgcGFt7HRpIG5hIGRva29u6GVu7SB06XRvIPpsb2h5LiBcClxuVXphdvhldGUgamVkbnUg6Gkgdu1jZSBhcGxpa2Fj7SBhYnlzdGUgeu1za2FsaSB27WNlXG52b2xu6SBcCnBhbex0aS4iCgp9Cg==