LyoKICogIE5vdGVwYWQgKEZpbm5pc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTkgYnkgSnVra2EgSWl2b25lbiA8aWl2b25lbkBpa2kuZmk+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GSU5OSVNILCBTVUJMQU5HX0RFRkFVTFQKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImVGllZG9zdG8iIHsKICBNRU5VSVRFTSAiJlV1c2lcdEN0cmwrTiIsCQlDTURfTkVXCiAgTUVOVUlURU0gIiZBdmFhLi4uXHRDdHJsK08iLAkJQ01EX09QRU4KICBNRU5VSVRFTSAiVGEmbGxldGFcdEN0cmwrUyIsCQlDTURfU0FWRQogIE1FTlVJVEVNICJUYWxsZXRhICZuaW1lbGzkLi4uIiwJQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiVCZ1bG9zdGEuLi5cdEN0cmwrUCIsCQlDTURfUFJJTlQKICBNRU5VSVRFTSAiJlNpdnVuIGFzZXR1a3NldC4uLiIsCUNNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIiZLaXJqb2l0dGltZW4gYXNldHVrc2V0Li4uIiwJQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlBvaXN0dSIsCQlDTURfRVhJVAogfQpQT1BVUCAiJk11b2trYWEiIHsKICBNRU5VSVRFTSAiJlBhbGF1dGFcdEN0cmwrWiIsCUNNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZMZWlra2FhXHRDdHJsK1giLAlDTURfQ1VUCiAgTUVOVUlURU0gIiZLb3Bpb2lcdEN0cmwrQyIsCUNNRF9DT1BZCiAgTUVOVUlURU0gIkwmaWl05Fx0Q3RybCtWIiwJQ01EX1BBU1RFCiAgTUVOVUlURU0gIlAmb2lzdGFcdERlbCIsCUNNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlZhbGl0c2Uga2Fpa2tpIiwJQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJkFpa2EvUORpduRt5ORy5Fx0RjUiLAlDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkthJnRrYWlzZSBwaXRr5CByaXZpIiwJQ01EX1dSQVAKICBNRU5VSVRFTSAiJkZvbnQuLi4iLCAgICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJkV0c2kiIHsKICBNRU5VSVRFTSAiRXRzaS4uLiIsCQlDTURfU0VBUkNICiAgTUVOVUlURU0gIkV0c2kgJnNldXJhYXZhXHRGMyIsCUNNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJkFwdWEiIHsKICBNRU5VSVRFTSAiJlNpc+RsdPYiLAkJQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJkV0c2kuLi4iLAkJQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIkFwdWEgJk9wYXN0dWtzZXN0YSIsCUNNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFib3V0IE5vdGVwYWQiLCBDTURfSEVMUF9BQk9VVF9OT1RFUEFECiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiU2l2dW4gYXNldHVrc2V0Igp7CkxURVhUICAgICImWWzkb3RzaWtrbzoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiQWxhbyZ0c2lra286IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFyZ2luYWFsaToiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZWYXNlbjoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiWSZs5DoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImT2lrZWE6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImQWxhOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiUGVydXV0YSIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkFwdWEiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsCSImZiIKU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwJIlNpdnUgJnAiCgpTVFJJTkdfTk9URVBBRCwJCQkJCSJOb3RlcGFkIgpTVFJJTkdfRVJST1IsCQkJCQkiVklSSEUiClNUUklOR19XQVJOSU5HLAkJCQkJIlZBUk9JVFVTIgpTVFJJTkdfSU5GTywJCQkJCSJUaWVkb2l0dXMiCgpTVFJJTkdfVU5USVRMRUQsCQkJCSIob3RzaWtvaW1hdG9uKSIKClNUUklOR19BTExfRklMRVMsCQkJCSJLYWlra2kgdGllZG9zdG90ICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsCQkJIlRla3N0aSB0aWVkb3N0b3QgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwJCQkJIlRpZWRvc3RvICclcycgb24gbGlpYW4gc3V1cmkuXG4gXApQbGVhc2UgdXNlIGEgZGlmZmVyZW50IGVkaXRvci4iClNUUklOR19OT1RFWFQsCQkJCQkiRXQgc3n2dHTkbnl0IGxhaW5rYWFuIHRla3N0aeQuIFwKXG5LaXJqb2l0YSBqb3RhaW4gamEgeXJpdOQgdXVkZWxsZWVuIgpTVFJJTkdfRE9FU05PVEVYSVNULAkJCQkiRmlsZSAnJXMnXG5kb2VzIG5vdCBleGlzdFxuXG4gXApEbyB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgZmlsZSA/IgpTVFJJTkdfTk9UU0FWRUQsCQkJCSJGaWxlICclcydcbmhhcyBiZWVuIG1vZGlmaWVkXG5cbiBcCldvdWxkIHlvdSBsaWtlIHRvIHNhdmUgdGhlIGNoYW5nZXMgPyIKU1RSSU5HX05PVEZPVU5ELAkJCQkJIiclcycgZWkgbPZ5ZHkuIgpTVFJJTkdfT1VUX09GX01FTU9SWSwJCQkiTXVpc3RpYSBlaSBvbGUgcmlpdHTkduRzdGkgdORt5G4gXApcbnRlaHTkduRuIHRla2VtaXNla3NpLiBTdWxqZSBqb2tpbiBzb3ZlbGx1cyB2YXBhdXR0YWFrc2VzaVxuIFwKbXVpc3RpYS4iCgp9Cg==