LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIFdpbmVGaWxlCiAqIEN6ZWNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwNCBEYXZpZCBLcmVkYmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKCi8qIEN6ZWNoIHN0cmluZ3MgaW4gQ1AxMjUwICovCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewogICAgUE9QVVAgIiZTb3Vib3IiICB7CiAgICAgICAgTUVOVUlURU0gIiZPdGV2+O10XHRFbnRlciIsICAgICAgICAgICAgIElEX0FDVElWQVRFCiAgICAgICAgTUVOVUlURU0gIiZQ+GVzdW5vdXQuLi5cdEY3IiwgICAgICAgICAgIElEX0ZJTEVfTU9WRQogICAgICAgIE1FTlVJVEVNICImS29w7XJvdmF0Li4uXHRGOCIsICAgICAgICAgICBJRF9GSUxFX0NPUFkKICAgICAgICBNRU5VSVRFTSAiJlZlIHNjaHLhbmNlLi4uXHRGOSIsICAgICAgICAgMTE4CiAgICAgICAgTUVOVUlURU0gIiZTbWF6YXRcdERlbCIsICAgICAgICAgICAgICAgIElEX0ZJTEVfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIlD4JmVqbWVub3ZhdC4uLiIsICAgICAgICAgICAgIDEwOQogICAgICAgIE1FTlVJVEVNICJWJmxhc3Rub3N0aS4uLlx0QWx0K0VudGVyIiwgICBJRF9FRElUX1BST1BFUlRJRVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJktvbXByZXNlLi4uIiwgICAgICAgICAgICAgICAgMTE5CiAgICAgICAgTUVOVUlURU0gIiZEZWtvbXByZXNlLi4uIiwgICAgICAgICAgICAgIDEyMAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU3B1c3RpdC4uLiIsICAgICAgICAgICAgICAgICBJRF9FWEVDVVRFCiAgICAgICAgTUVOVUlURU0gIiZUaXNrbm91dC4uLiIsICAgICAgICAgICAgICAgIDEwMgogICAgICAgIE1FTlVJVEVNICJBc29jaW92YXQuLi4iLCAgICAgICAgICAgICAgICAxMDMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiViZ5dHZv+Gl0IGFkcmVz4fguLi4iLCAgICAgICAgMTExCiAgICAgICAgTUVOVUlURU0gIiZIbGVkYXQuLi4iLCAgICAgICAgICAgICAgICAgIDEwNAogICAgICAgIE1FTlVJVEVNICImWnZvbGl0IHZvdWJvcnkuLi4iLCAgICAgICAgICAxMTYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJLJm9uZWNcdEFsdCtYIiwgICAgICAgICAgICAgICBJRF9GSUxFX0VYSVQKI2Vsc2UKICAgICAgICBNRU5VSVRFTSAiSyZvbmVjIiwgICAgICAgICAgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbmRpZgogICAgfQoKICAgIFBPUFVQICImRGlzayIgIHsKICAgICAgICBNRU5VSVRFTSAiJktvcO1yb3ZhdCBkaXNrLi4uIiwgICAgICAgICAgMjAxCiAgICAgICAgTUVOVUlURU0gIiZKbWVub3ZrYSBkaXNrLi4uIiwgICAgICAgICAgIDIwMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRm9ybeF0b3ZhdCBkaXNrLi4uIiwgICAgICAgICBJRF9GT1JNQVRfRElTSwojaWZkZWYgX1dJTjk1CiAgICAgICAgTUVOVUlURU0gIiZWeXR2b/hpdCBzeXN0ZW1vdv0gZGlzay4uLiIsIC0xICAvKlRPRE8qLwojZW5kaWYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiUPhpcG9qaXQgJnPtnW926SB6YfjtemVu7SIsICAgSURfQ09OTkVDVF9ORVRXT1JLX0RSSVZFCiAgICAgICAgTUVOVUlURU0gIiZPZHBvaml0ICZz7Z1vdukgemH47Xplbu0iLCAgIElEX0RJU0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTZO1sZXQgamFrby4uLiIsICAgICAgICAgICAgICAyNTQKICAgICAgICBNRU5VSVRFTSAiJk9kc3RyYW5pdCBzZO1sZW7tLi4uIiwgICAgICAgMjU1CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZadm9saXQgemH47Xplbu0uLi4iLCAgICAgICAgIDI1MQogICAgfQoKICAgIFBPUFVQICImQWRyZXPh+GUiICB7CiAgICAgICAgTUVOVUlURU0gIiZEYWya7SD6cm92ZfJcdCsiLCAgICAgICAgICAgIDMwMQogICAgICAgIE1FTlVJVEVNICJSb3piYWxpdCAmc3Ryb21cdCoiLCAgICAgICAgICAzMDIKICAgICAgICBNRU5VSVRFTSAiUm96YmFsaXQgJnaaZVx0U3RyZysqIiwgICAgICAgMzAzCiAgICAgICAgTUVOVUlURU0gIlNiYWxpdCAmc3Ryb21cdC0iLCAgICAgICAgICAgIDMwNAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImT3puYehpdCBwb3RvbWt5IiwgICAgICAgICAgICA1MDUKICAgIH0KCiAgICBQT1BVUCAiJlpvYnJhemVu7SIgIHsKICAgICAgICBNRU5VSVRFTSAiJlN0cm9tIGEgYWRyZXPh+GUiLCAgICAgICAgICAgNDEzCiAgICAgICAgTUVOVUlURU0gIiZKZW4gc3Ryb20iLCAgICAgICAgICAgICAgICAgIDQxMQogICAgICAgIE1FTlVJVEVNICJKZW4gJmFkcmVz4fhlIiwgICAgICAgICAgICAgICA0MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlJvemTsbGl0IiwgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImSm3pbm8iLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX05BTUUKICAgICAgICBNRU5VSVRFTSAiJkRldGFpbHkgdpplY2ggc291Ym9y+SIsICAgICAgSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICLI4SZzdGXobukgZGV0YWlseS4uLiIsICAgICAgICBJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlT47WRpdCBwb2RsZSBqbeluYSIsICAgICAgICAgSURfVklFV19TT1JUX05BTUUKICAgICAgICBNRU5VSVRFTSAiVPjtZGl0ICZwb2RsZSB0eXB1IiwgICAgICAgICAgSURfVklFV19TT1JUX1RZUEUKICAgICAgICBNRU5VSVRFTSAiVPjtZGl0IHBvZGxlICZ2ZWxpa29zdGkiLCAgICAgSURfVklFV19TT1JUX1NJWkUKICAgICAgICBNRU5VSVRFTSAiVPjtZGl0IHBvZGxlICZkYXRhIiwgICAgICAgICAgSURfVklFV19TT1JUX0RBVEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiVPjtZGl0IHBvZGxlICYuLi4iLCAgICAgICAgICAgSURfVklFV19GSUxURVIKICAgIH0KCiAgICBQT1BVUCAiJk5hc3RhdmVu7SIgIHsKICAgICAgICBNRU5VSVRFTSAiJlBvdHZyem924W7tLi4uIiwgICAgICAgICAgICAgNTAxCiAgICAgICAgTUVOVUlURU0gIiZQ7XNtby4uLiIsICAgICAgICAgICAgICAgICAgIElEX1NFTEVDVF9GT05UCiAgICAgICAgTUVOVUlURU0gIlVwcmF2aXQgcGFuZWwgJm7hc3Ryb2r5Li4uIiwgIDUxMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUGFuZWwgbuFzdHJvavkiLCAgICAgICAgICAgICBJRF9WSUVXX1RPT0xfQkFSLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIiZQYW5lbCB6YfjtZW7tIiwgICAgICAgICAgICAgIElEX1ZJRVdfRFJJVkVfQkFSLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIiZTdGF2b3b9IPjhZGVrIiwgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSLCBDSEVDS0VECiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiJkNlbGHhIG9icmF6b3ZrYVx0Q3RybCtTaGlmdCtTIiwgSURfVklFV19GVUxMU0NSRUVOCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTWluaW1hbGl6b3ZhdCBw+Gkgc3B1mnTsbu0iLCA1MDQKICAgICAgICBNRU5VSVRFTSAiJlVsb55pdCBuYXN0YXZlbu0gcPhpIHZ5cG51dO0iLDUxMQogICAgfQoKCiAgICBQT1BVUCAiJlphYmV6cGXoZW7tIiAgewogICAgICAgIE1FTlVJVEVNICImUPjtc3R1cC4uLiIsICAgICAgICAgICAgICAgICA2MDUKICAgICAgICBNRU5VSVRFTSAiJkxvZ2924W7tLi4uIiwgICAgICAgICAgICAgICAgNjA2CiAgICAgICAgTUVOVUlURU0gIiZWbGFzdG7tay4uLiIsICAgICAgICAgICAgICAgIDYwNwogICAgfQoKICAgIFBPUFVQICImT2tubyIgIHsKICAgICAgICBNRU5VSVRFTSAiTm926SAmb2tubyIsICAgICAgICAgICAgICAgICAgSURfV0lORE9XX05FVwogICAgICAgIE1FTlVJVEVNICJLYXNr4WRvduFu7Vx0Q3RybCtGNSIsICAgICAgICBJRF9XSU5ET1dfQ0FTQ0FERQogICAgICAgIE1FTlVJVEVNICJVc3Bv+OFkYXQgJmhvcml6b2504Wxu7CIsICAgICBJRF9XSU5ET1dfVElMRV9IT1JaCiAgICAgICAgTUVOVUlURU0gIlVzcG/44WRhdCAmdmVydGlr4Wxu7Fx0Q3RybCtGNCIsSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIlphcm92bmF0IGF1dG9tYXRpY2t5IiwgICAgICAgIElEX1dJTkRPV19BVVRPU09SVAojZW5kaWYKICAgICAgICBNRU5VSVRFTSAiWmFyb3ZuYXQgJnN5bWJvbHkiLCAgICAgICAgICAgSURfV0lORE9XX0FSUkFOR0UKICAgICAgICBNRU5VSVRFTSAiJkFrdHVhbGl6b3ZhdFx0RjUiLCAgICAgICAgICAgSURfUkVGUkVTSAogICAgfQoKICAgIFBPUFVQICImPyIgIHsKICAgICAgICBNRU5VSVRFTSAiJlTpbWF0YSBu4XBvduxkeVx0RjEiLCAgICAgICAgSURfSEVMUAogICAgICAgIE1FTlVJVEVNICJIbGVk4W7tIHYgJm7hcG927GTsLi4uXHRGMSIsICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIiZKYWsgcG91nu12YXQgbuFwb3bsZHVcdEYxIiwgIElEX0hFTFBfVVNJTkcKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkluZm9ybWFjZSBvIFdpbmVmaWxlLi4uIiwgICAgSURfQUJPVVQKICAgIH0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlNwdXN0aXQiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJlD47WthejoiLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCiAgICBFRElUVEVYVCAgICAgICAgMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKICAgIENPTlRST0wgICAgICAgICAiSmFrbyAmU3ltYm9sIiwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIlpydZppdCIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImUG9tb2MiLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9CgpJRERfU0VMRUNUX0RFU1RJTkFUSU9OIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlp2b2x0ZSBj7WwiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJkNlc3RhOiIsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKICAgIEVESVRURVhUICAgICAgICAyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIlpydZppdCIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImUHJvY2jhemV0IiwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX0ZPTlRfU0VMX0RMR19OQU1FICAgIkFwbGlrb3bhbu0gbmFzdGF2ZW7tIHDtc21hIgogICAgSURTX0ZPTlRfU0VMX0VSUk9SICAgICAgIkNoeWJhIHD4aSB2b2xi7CBub3bpaG8gcO1zbWEuIgp9CgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfV0lORUZJTEUgICAgICAgICAgICAiV2luZWZpbGUiCiAgICBJRFNfRVJST1IgICAgICAgICAgICAgICAiQ2h5YmEiCiAgICBJRFNfUk9PVF9GUyAgICAgICAgICAgICAicm9vdCBmcyIKICAgIElEU19VTklYRlMgICAgICAgICAgICAgICJ1bml4ZnMiCiAgICBJRFNfREVTS1RPUCAgICAgICAgICAgICAiUGxvY2hhIgogICAgSURTX1NIRUxMICAgICAgICAgICAgICAgIlD47Wthem92/SD44WRlayIKICAgIElEU19USVRMRUZNVCAgICAgICAgICAgICIlcyAtICVzIgogICAgSURTX05PX0lNUEwgICAgICAgICAgICAgIlphdO1tIG5laW1wbGVtZW50b3bhbm8iCiAgICBJRFNfV0lORV9GSUxFICAgICAgICAgICAiV2luZSBGaWxlIgp9CgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfQ09MX05BTUUgICAgICAgICAgICAiSm3pbm8iCiAgICBJRFNfQ09MX1NJWkUgICAgICAgICAgICAiVmVsaWtvc3QiCiAgICBJRFNfQ09MX0NEQVRFICAgICAgICAgICAiRGF0dW0gdnl0dm/4ZW7tIgogICAgSURTX0NPTF9BREFURSAgICAgICAgICAgIkRhdHVtIHBvc2xlZG7taG8gcPjtc3R1cHUiCiAgICBJRFNfQ09MX01EQVRFICAgICAgICAgICAiRGF0dW0gcG9zbGVkbu0gbW9kaWZpa2FjZSIKICAgIElEU19DT0xfSURYICAgICAgICAgICAgICJJbmRleC9Jbm9kZSIKICAgIElEU19DT0xfTElOS1MgICAgICAgICAgICJMaW5reSIKICAgIElEU19DT0xfQVRUUiAgICAgICAgICAgICJBdHJpYnV0eSIKICAgIElEU19DT0xfU0VDICAgICAgICAgICAgICJaYWJlenBl6GVu7SIKCiAgICBJRFNfRlJFRV9TUEFDRV9GTVQgICAgICAiJXMgeiAlcyB2b2xu6WhvIgp9Cg==