LyoqCiogQGZpbGUgcnRjX3RpbWVyLmgKKiBAYnJpZWYgUHVibGljIEFQSXMgb2YgU2FuZWNoaXBzCioKKiBDb3B5cmlnaHQgKEMpIDIwMTcgU2FuZWNoaXBzIFRlY2hub2xvZ3kgQ28uLCBMdGQuCiogQGF1dGhvciAgTGlueHUgR2ViaW4KKiBAZGVmZ3JvdXAgc2lfaWQgU2FuZWNoaXBzCioKKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCiNpZm5kZWYgX1JUQ19USU1FUl9ICiNkZWZpbmUgX1JUQ19USU1FUl9ICgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgaGVhZGVyIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaW5jbHVkZSAgPHN5cy90aW1lLmg+CiNpbmNsdWRlICJtZXNzYWdlLmgiCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm8gZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioKKiBAYnJpZWYgcnRjIG1lc3NhZ2UgdHlwZQoqIEBub3RlCiovCmVudW0gUlRDX0NQVSB7CglSVENfQ1BVX0NBUCA9IDAsICAgLy9ydGPTyUNBULeixvAKCVJUQ19DUFVfQVAsICAgICAgIC8vcnRj08lBULeixvAKfTsKCi8qKgoqIEBicmllZiBydGMgdHlwZQoqIEBub3RlCiovCnR5cGVkZWYgZW51bSB7CglSVENfSURfU1RBUlQgPSAwLAoJV0lGSV9JTlRFUlZBTF9TTEVFUCwKCVdJRklfUFdSX1NBVkUsCglXSUZJX1dBS0VfVVBfU1lTVEVNLAoJV0lGSV9XUFNfUkVTVUxUX0NIRUNLLAoJV0lGSV9UU1dfU0xFRVAsCglXSUZJX1RTV19XQUtFVVAsCglXSUZJX0FDTF9TRVJWSUNFLAoJV0RUX1RFTVBfUFJPVEVDVCwKCVJUQ19TQUZFQ0FSRV9DT05USU1FLAoJUlRDX1NBRkVDQVJFX0RFTEFZLAoJUlRDX0lEX0ZQX0NMT0NLLAoJUlRDX0lEX05PVERJU1RVUkJfQkVHSU4sCglSVENfSURfTk9URElTVFVSQl9FTkQsCglSVENfSURfTU1JX0FMQVJNLAoJUlRDX0lEX01NSV9DTE9DS19NT0RFX0NIRUNLLAoJUlRDX0lEX1RSQUNLX0JFR0lOLAoJUlRDX0lEX1RSQUNLX1VQTE9BRD1SVENfSURfVFJBQ0tfQkVHSU4sCglSVENfSURfVFJBQ0tfQkFTRSwKCVJUQ19JRF9UUkFDS19TRVJWRVJfQ09OLAoJUlRDX0lEX1RSQUNLX1NMQVZFX1NFUlZFUl9DT04sCglSVENfSURfVFJBQ0tfU0xBVkVfU0VSVkVSX0NNRCwKCVJUQ19JRF9UUkFDS19ERUJVR19TRVJWRVJfQ09OLAoJUlRDX0lEX1RSQUNLX0xJTkssCglSVENfSURfVFJBQ0tfTElOS19USU1FT1VULAoJUlRDX0lEX1RSQUNLX0FHUFMsCglSVENfSURfVFJBQ0tfV0VBVEhFUl9VUERBVEUsCglSVENfSURfVFJBQ0tfRU5ELAoJUlRDX0lEX1NDX1RJTUVSLAoJUlRDX0lEX1NDX0FMQVJNLAoJUlRDX0lEX0VORCwKfSBSVENfSUQ7CiNlbmRpZgoKLyoqCiogQGJyaWVmIHJ0YyDP+8+iwODQzQoqIEBwYXJhbSBSVENfTVNHX0FMQVJNX0VMQVBTRUQgtbG2qMqxxve0pbeiyrG74bei1eK49s/7z6K4+LaoyrHG99O109DV3woqIEBwYXJhbSBSVENfTVNHX1RJTUVfQ0hBTkdFRCBSVEPKsbzkuPzQwjqx7cq+ysC958qxvOS3osn6seS7r6OsvLTKsbzkzayyvc3qs8m78tXf08O7p8rWtq/W2NDCyejWw7Wxx7C1xMrAvefKsbzkwcujrLTLyrFSVEO9+LPMu+G547KluPjS0deisuHKwL3nyrG85LXExKO/6aOs0tTIw8/gudjEo7/pvfjQ0MrAvefKsbzktqjKscb3tcTW2NDCyejWwwoqIEBub3RlCiovCiNpZm5kZWYgRE9YWUdFTl9TSE9VTERfU0tJUF9USElTCmVudW0gUlRDX01TR19DTUQgewoJUlRDX01TR19HRVRfVElNRSA9IE1TR19DTURfUlRDX0JBU0UsCS8vu/HIocqxvOSjrNaxvdO199PDbGludXjPtc2zyrG85L3Tv9oKCVJUQ19NU0dfU0VUX1RJTUUsCQkJCQkJLy/J6NbDyrG85AoJUlRDX01TR19BRERfQUxBUk0sCQkJCQkJLy/M7bzTcnRjtqjKscb3CglSVENfTVNHX0RFTF9BTEFSTSwJCQkJCQkvL8m+s/1ydGO2qMqxxvcKCVJUQ19NU0dfQUxBUk1fVElNRU9VVCwJCQkJCS8vUlRDIGFsYXJttqjKscb3yrG85LOsyrEKCVJUQ19NU0dfVElNRVJfVElNRU9VVCwJCQkJCS8vUlRDIHRpbWVytqjKscb3yrG85LOsyrEKCVJUQ19NU0dfQUxBUk1fRUxBUFNFRCwJCQkJCS8vtbG2qMqxxve0pbeiyrG74bei1eK49s/7z6K4+LaoyrHG99O109DV3woJUlRDX01TR19ERUxfQUxMLAkJCQkJCS8vx+Wz/cv509C52Lv6sruxo7TmtcS2qMqxxvejrLfx1PJydGO2qMqxxve1vbXju7m74cnPsagKCVJUQ19NU0dfVElNRV9DSEFOR0VELAkJCQkJLy9SVEPKsbzkuPzQwjqx7cq+ysC958qxvOS3osn6seS7r6OsvLTKsbzkzayyvc3qs8m78tXf08O7p8rWtq/W2NDCyejWw7Wxx7C1xMrAvefKsbzkwcujrLTLyrFSVEO9+LPMu+G547KluPjS0deisuHKwL3nyrG85LXExKO/6aOs0tTIw8/gudjEo7/pvfjQ0MrAvefKsbzktqjKscb3tcTW2NDCyejWwwoJUlRDX01TR19TTlRQX1VQREFURSwJCQkJCS8vU05UUM2ssr0KfTsKI2VuZGlmCgovKioKKiBAYnJpZWYgcnRjIGRhdGEgYnVmZmVyCiogQHBhcmFtIHNyY01vZHVsZSC0tL2otqjKscb3tcTEo7/pCiogQHBhcmFtIG1vZHVsZSC2qMqxxvdpZAoqIEBwYXJhbSB1bFNlYyC85Lj0yrG85KOstaXOuzpzCiogQHBhcmFtIHRpbWVfdmFsICC1scewyrG85AoqIEBwYXJhbSB3YWtldXAgICC52Lv6u73Q0aOsMTq08r+qo6wwOrnYsdUKKiBAcGFyYW0gaXNfdXRjICDKx7fxdXRjyrG85KOsCiogQHBhcmFtIGNwdSAgcnRjt6LG8LXEY3B1o6wgMDogY3AsIDE6YXAKKiBAbm90ZSB1dGPKsbzk1f2zo7HIvc+zpKOs08NXS0FMTbaoyrHG9woqLwp0eXBlZGVmIHN0cnVjdCB0YWdfUlRDX0RBVEFfQlVGIHsKCWludCBzcmNNb2R1bGU7Cgl1bnNpZ25lZCBpbnQgICBtb2R1bGU7Cgl1bnNpZ25lZCBsb25nICAgdWxTZWM7Cgl1bnNpZ25lZCBsb25nIHRpbWVfdmFsOwoJaW50IHdha2V1cDsKCWludCBpc191dGM7CglpbnQgY3B1Owp9IFJUQ19EQVRBX0JVRjsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioKKiBAYnJpZWYgIMztvNO2qMqxxvcKKiBAcGFyYW0gdWxTZWMJtqjKscb3yrG85KOstaXOu8PrCiogQHBhcmFtIHJ0Y19pZAm2qMqxxvdJRAoqIEBwYXJhbSBzcmNfaWQJtLS9qLaoyrHG97XExKO/6UlECiogQHJldHVybiCzybmmt7W72DCjrMqnsNy3tbvYLTEKKi8KaW50IHJ0Y190aW1lcl9hZGQodW5zaWduZWQgbG9uZyB1bFNlYywgUlRDX0lEIHJ0Y19pZCwgaW50IHNyY19pZCk7CgovKioKKiBAYnJpZWYgzO2807aoyrHG9woqIEBwYXJhbSB0aW1lCbaoyrHG98qxvOSjrLWlzrvKwL3nyrHW0yzQ6NKqzO46IHRtX3NlYy90bV9taW4vdG1faG91ci90bV9tZGF5L3RtX21vbi90bV95ZWFyCiogQHBhcmFtIHJ0Y19pZAm2qMqxxvdJRKOsCiogQHBhcmFtIHNyY19pZAm0tL2otqjKscb3tcTEo7/pSUQKKiBAcGFyYW0gd2FrZXVwCbnYu/rKx7fxu73Q0QoqIEBub3RlIHdha2V1cAnKxzCyu7u90NEsIDEgu73Q0QoqIEByZXR1cm4gs8m5pre1u9gwo6zKp7Dct7W72C0xCiovCmludCBydGNfdGltZXJfYWRkX3V0YyhzdHJ1Y3QgdG0gKnRpbWUsIFJUQ19JRCBydGNfaWQsIGludCBzcmNfaWQsIGludCB3YWtldXApOwoKCi8qKgoqIEBicmllZiDJvrP9tqjKscb3CiogQHBhcmFtIHJ0Y19pZAm2qMqxxvdJRAoqIEBwYXJhbSBzcmNfaWQJtLS9qLaoyrHG97XExKO/6UlECiogQHJldHVybiCzybmmt7W72DCjrMqnsNy3tbvYLTEKKi8KaW50IHJ0Y190aW1lcl9kZWwoUlRDX0lEIHJ0Y19pZCwgaW50IHNyY19pZCk7CgoKLyoqCiogQGJyaWVmIMm+s/3L+dPQtqjKscb3CiogQHBhcmFtIHNyY19pZAkJyb6z/baoyrHG97XExKO/6UlECiogQHBhcmFtIHJlcV9jbWQJu9i4tLXEz/vPomNtZAoqIEByZXR1cm4gs8m5pre1u9gwo6zKp7Dct7W72C0xCiovCmludCBydGNfdGltZXJfZGVsX2FsbChpbnQgc3JjX2lkLCB1bnNpZ25lZCBzaG9ydCByZXFfY21kKTsKCgovKioKKiBAYnJpZWYgyejWw3J0Y7Wxx7DKsbzkCiogQHBhcmFtIHNyY19pZAnJ6NbDyrG85LXExKO/6UlECiogQHJldHVybiDJ6NbDcnRjtbHHsMqxvOQKKi8KaW50ICBydGNfc2V0X3RpbWUoaW50IHNyY19pZCk7CgojZW5kaWYKCgo=