RnJpIERlYyAzMSAxOToxMDozMSAxOTk5ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogZnVuY3Rpb24uYyAodXBkYXRlX3RlbXBfc2xvdF9hZGRyZXNzKTogSGFuZGxlIGNhc2Ugd2hlcmUgc3VtIG9mCgl0ZW1wb3JhcnkgYWRkcmVzcyBwbHVzIG9mZnNldCBpbiByZWdpc3RlciBpcyBhIHZhbGlkIGFkZHJlc3MuCgoxOTk5LTEyLTMwICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGdlbnJlY29nLmMgKGNoYW5nZV9zdGF0ZSkgQ29ycmVjdGVkIHR5cG8uCgoxOTk5LTEyLTMwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaCAoYmNvcHksIGJjbXAsIGJ6ZXJvLCBpbmRleCwgcmluZGV4LCBhdG9mLCBhdG9sLCBmcmVlLAoJZ2V0Y3dkLCBnZXRlbnYsIGdldHdkLCBzYnJrLCBzdHJzdHIsIG1hbGxvYywgY2FsbG9jLCByZWFsbG9jLAoJc3RyZXJyb3IsIGdldHJsaW1pdCwgc2V0cmxpbWl0LCBhYm9ydCk6IEFkZCBwcm90b3R5cGUgYXJndW1lbnRzLgoKMTk5OS0xMi0zMCAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBpMzg2LmMgKGl4ODZfZXhwYW5kX2ZwX2NvbXBhcmUpOiBJbiBub24tc2FoZiBub24tVEFSR0VUX0lFRUUKCWNhc2UsIGV4cGFuZCBHVCBjb21wYXJpc29ucyBjb3JyZWN0bHkuICBGaXggYSBjb21tZW50IGJlZm9yZSB0aGlzCglwYXJ0IG9mIHRoZSBjb2RlLgoKMTk5OS0xMi0zMCAgR2FicmllbCBEb3MgUmVpcyAgPGRvc3JlaXNAY21sYS5lbnMtY2FjaGFuLmZyPgoKCSogZHdhcmZvdXQuYzogSW5jbHVkZSAiZnJhbWUuaCIKCSogZHdhcmYyb3V0LmM6IExpa2V3aXNlLgoJKiBNYWtlZmlsZS5pbiAoZHdhcmZvdXQubyk6IERlcGVuZCBvbiBmcmFtZS5oCgkoZHdhcmYyb3V0Lm8pOiBMaWtld2lzZS4KCjE5OTktMTItMjkgICJNYXJ0aW4gdi4gTG9ld2lzIiA8bWFydGluQGxvZXdpcy5ob21lLmNzLnR1LWJlcmxpbi5kZT4KCglSZXN0b3JlIGkzODYgYmluYXJ5IGNvbXBhdGliaWxpdHkgaW4gRHdhcmYgRUggaW5mby4KCSogY29uZmlnL2kzODYvaTM4Ni5oIChEV0FSRl9GUkFNRV9SRUdJU1RFUlMpOiBEZWZpbmUgYXMgMTcsIHRoZSBvbGQKCXZhbHVlIG9mIEZJUlNUX1BTRVVET19SRUdJU1RFUi4KCSogZnJhbWUuaCAoRFdBUkZfRlJBTUVfUkVHSVNURVJTKTogRGVmYXVsdCB0byBGSVJTVF9QU0VVRE9fUkVHSVNURVIuCgkoc3RydWN0IGZyYW1lX3N0YXRlKTogVXNlIERXQVJGX0ZSQU1FX1JFR0lTVEVSUy4KCSogZHdhcmZvdXQuYyAob3V0cHV0X3JlZ19udW1iZXIpOiBEaXR0by4KCSogZHdhcmYyb3V0LmMgKHJlZ19udW1iZXIsIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzKTogRGl0dG8uCgkoRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTik6IERlZmF1bHQgdG8gRFdBUkZfRlJBTUVfUkVHSVNURVJTLgoKMTk5OS0xMi0yOSAgQnJ1Y2UgS29yYiAgPGF1dG9nZW5AbGludXhib3guY29tPgoKCSogZml4aW5jL2ZpeGluY2wuYyh3YWl0X2Zvcl9waWQpOiBzb21ldGltZXMgYSBXU1RPUFNJRyBvZiB6ZXJvIGlzIE9LCgkqIGZpeGluYy9maXhpbmNsLnRwbCg8aGFjaz5URVNUX0NUKTogSnVzdCBkbyB0aGUgZXhpc3RlbmNlIHRlc3Qgb25jZQoJKDxoYWNrPl9SRV9DVCk6IG5vdCBuZWVkZWQKCSogZml4aW5jL2ZpeGxpYi5jKGlzX2N4eF9oZWFkZXIpOiBtb3ZlZCBmcm9tIGZpeHRlc3RzLmMKCXJld3JpdHRlbiB0byBzY2FuIHRoZSBmaWxlIHRleHQgb25jZSBvbmx5CgkidGVtcGxhdGU8Li4uIiB0ZXN0IGFkZGVkCgkqIGZpeGluYy9maXhsaWIuaChhcHBseV9maXhfcF90KTogbW92ZWQgZnJvbSBmaXh0ZXN0cy5jCgkoaXNfY3h4X2hlYWRlcik6IGRlY2xhcmF0aW9uIGFkZGVkCgkqIGZpeGluYy9maXh0ZXN0cy5jKGlzX2N4eF9oZWFkZXIpOiByZW1vdmVkCgkoYXBwbHlfZml4X3BfdCk6IHJlbW92ZWQKCShkb3VibGVfc2xhc2hfdGVzdCk6IGlzX2N4eF9oZWFkZXIgaXMgb25seSBjYWxsZWQgb25jZSBub3cKCSogZml4aW5jL2hhY2tzaGVsbC50cGw6IGluZGV4aW5nIHRoZSBmaXhlcyBpcyBub3cgZG9uZSB1bmRlciBERUJVRwoJKiBmaXhpbmMvaW5jbGhhY2suZGVmKEZJWElOQ19ERUJVRyk6IGFkZGVkIGZvciB0ZXN0aW5nIERFQlVHIHN0YXRlCgl3aXRoaW4gdGhlIHRlbXBsYXRlcy4KCVRoZSBib3JrZW4gc3BlbGxpbmcgb2YgImJyb2tlbiIgd2FzIGZpeGVkLgoJKiBmaXhpbmMvaW5jbGhhY2sudHBsOiBUaGUgJFZFUkJPU0UgbGV2ZWwgaXMgdXNlZCBvbiB2YXJpb3VzIG1lc3NhZ2VzCglUaGUgZGVmYXVsdCBsZXZlbCBkZXBlbmRzIG9uIEZJWElOQ19ERUJVRy4KCjE5OTktMTItMjkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNydHN0dWZmLmM6IElmICFpbmhpYml0X2xpYmMsIGluY2x1ZGUgc3RkbGliLmgvdW5pc3RkLmguCglPdGhlcndpc2UgcHJvdmlkZSBhIGRlY2xhcmF0aW9uIGZvciBhdGV4aXQuCgkoaW5pdF9kdW1teSk6IE1ha2Ugc3VyZSBkdW1teSBjYWxsIHRvIGF0ZXhpdCBpcyBuZXZlcnRoZWxlc3MKCWNhbGxlZCB3aXRoIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3MuCgoJKiBmcmFtZS5jOiBVcGRhdGUgY29tbWVudHMgcmVmZXJyaW5nIHRvIG90aGVyIGZpbGVzLgoKCSogbGliZ2NjMi5jOiBMaWtld2lzZS4KCjE5OTktMTItMjkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNzZS5jIChmcmVlX2VsZW1lbnQsIGdldF9lbGVtZW50KTogUmVtb3ZlIHVudXNlZCBwcm90b3R5cGVzLgoKCSogZm9sZC1jb25zdC5jIChleHRyYWN0X211bGRpdik6IEluaXRpYWxpemUgdmFyaWFibGVzIGBvcDAnIGFuZAoJYG9wMScuCgoJKiBqdW1wLmMgKGludmVydF9leHApOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cwoJYGVsc2UnIGNsYXVzZXMuCgpXZWQgRGVjIDI5IDEyOjQ0OjU0IDE5OTkgIERvbmFsZCBMaW5kc2F5ICA8ZGxpbmRzYXlAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbixjb25maWd1cmU6IGNhc2UgYXJtIGZvciBtbjEwMjAwLSotKiBub3cgc2V0cwoJZmxvYXRfZm9ybWF0PWkzMiBzbyB0aGF0IGZsb2F0Lmggd2lsbCBjb3JyZWN0bHkgY2xhaW0gImRvdWJsZSIKCXRvIGJlIDMyIGJpdHMuIFJhbiBhdXRvY29uZiB0byBnZW5lcmF0ZSBjb25maWd1cmUgZnJvbSAuaW4gZmlsZS4KCldlZCBEZWMgMjkgMTA6NTM6MjEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEubWQgKGNvbmRpdGlvbmFsIHplcm8pOiBJZiBvcDEgaXMgYSByZWdpc3RlciwgZm9yY2UgaXQgaW50bwoJdGhlIHNhbWUgcmVnaXN0ZXIgYXMgb3AwLgoKMTk5OS0xMi0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRyZWUuaCAoQklORk9fQkFTRVRZUEVTKTogSW1wcm92ZSBkb2N1bWVudGF0aW9uLgoKMTk5OS0xMi0yOCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlndXJlLmluICgtLWVuYWJsZS1jaGVja2luZyk6IFVzZSBhIG1vcmUgcG9ydGFibGUgYGZvcicKCWxvb3Agc3ludGF4LgoKMTk5OS0xMi0yOCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlndXJlLmluIChBQ19ERUNMX1NZU19TSUdMSVNULCB4bS1zaWdsaXN0LmgsCglhcm0veG0tbmV0YnNkLmgsIE5PX1NZU19TSUdMSVNUKTogRG9uJ3QgdXNlLgoKCSogeG0tc2lnbGlzdC5oLCBhcm0veG0tbmV0YnNkLmgsIG1pcHMveG0tbmV3cy5oLCBtaXBzL3htLXN5c3Y0Lmg6CglEZWxldGUgZmlsZXMuCgoJKiBnY2MudGV4aSAoTk9fU1lTX1NJR0xJU1QsIHN5c19zaWdsaXN0LCBTWVNfU0lHTElTVF9ERUNMQVJFRCk6CglEZWxldGUgZGVzY3JpcHRpb25zLgoKCSogaTM4Ni9vc2YxZWxmLmgsIGkzODYveG0tY3lnd2luLmgsIGkzODYveG0tbWluZ3czMi5oLCBtNjhrLzNiMS5oLAoJbTY4ay9hLXV4LmgsIG02OGsvZHB4Mi5oLCBtNjhrL3BsZXh1cy5oLCBtNjhrL3htLWhwMzIwLmgsCgltODhrL3htLW04OGsuaCwgbWlwcy94LXNuaS1zdnI0LCBwYS94bS1wYS5oLCBwYS94bS1wYWhwdXguaCwKCXBhL3htLXBhcHJvLmgsIHdlMzJrL3htLXdlMzJrLmgsIHdpbm50L3htLXdpbm50LmgsIHhtLWludGVyaXguaCwKCXhtLXN2cjQuaDogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2Ygc3lzX3NpZ2xpc3QgaGFuZGxpbmcuCgoxOTk5LTEyLTI3ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoY21wX3plcm9fcWksCgljbXBfemVyb19leHRlbmRxaXNpMl9hbmRjY19zZXQsIGNtcF96ZXJvX3FpX3NwNjQsCgljbXBfemVyb19leHRlbmRxaWRpMl9hbmRjY19zZXQpOiBOZXcgcGF0dGVybnMuCgoxOTk5LTEyLTI4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1ob2xsc3RlaW5AY3lnbnVzLmNvbT4KCgkqIG02OGsvdC1tb3QzMzAwLWdhbGQgKENST1NTX0xJQkdDQzEpOiBEZWZpbmUgdG8gbGliZ2NjMS1hc20uYS4KCShMSUIxQVNNU1JDLCBMSUIxQVNNRlVOQ1MsIExJQjJGVU5DU19FWFRSQSk6IERlZmluZS4KCShmcGdudWxpYi5jLCB4ZmdudWxpYi5jKTogQWRkIHJ1bGVzLgoJKiBtNjhrL3QtbW90MzMwMC1nYXM6IExpa2V3aXNlLgoKMTk5OS0xMi0yNyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkB6ZW1idS5jb20+CgoJKiBjb25maWd1cmUuaW46IEF2b2lkIFtbIGJ5IHVzaW5nIHRlc3QgYW5kIGNoYW5nZXF1b3RlLiAgQWRkCgljaGFuZ2VxdW90ZSByZXF1aXJlZCBieSAxOTk5LTEyLTE0IGNoYW5nZS4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKMTk5OS0xMi0yNyAgQ2xpbnRvbiBQb3BldHogIDxjcG9wZXR6QGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmg6IEZpeCB0eXBvIGZyb20gMTIvMTcvOTkgbGliZ2NjMiBmaXguCgoxOTk5LTEyLTI3ICBDaHJpc3RvcGhlIEphaWxsZXQgIDxqYWlsbGV0LmNocmlzdG9waGVAY2FyYW1haWwuY29tPgoKCSogYWxpYXMuYyAobm9ubG9jYWxfcmVmZXJlbmNlX3ApOiBBZGQgZWxzZSBmb3IgZGlzam9pbnQgaWZzLgoJKiBmbG93LmMgKGZpbmRfdXNlX2FzX2FkZHJlc3MpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnNfMSk6IExpa2V3aXNlLgoJKHdhbGtfZml4dXBfbWVtb3J5X3N1YnJlZywgZml4dXBfc3RhY2tfMSk6IExpa2V3aXNlLgoJKiBqdW1wLmMgKGludmVydF9leHAsIHJlZGlyZWN0X2V4cCk6IExpa2V3aXNlLgoJKiBsb29wLmMgKHJlcGxhY2VfY2FsbF9hZGRyZXNzKTogTGlrZXdpc2UuCgkoY291bnRfbm9uZml4ZWRfcmVhZHMpOiBMaWtld2lzZS4KCSogcnRsYW5hbC5jIChtb2RpZmllZF9iZXR3ZWVuX3ApOiBMaWtld2lzZS4KCShtb2RpZmllZF9pbl9wLCB2b2xhdGlsZV9pbnNuX3AsIHZvbGF0aWxlX3JlZnNfcCk6IExpa2V3aXNlLgoJKHNpZGVfZWZmZWN0c19wLCByZXBsYWNlX3JlZ3MsIGptcF91c2VzX3JlZ19vcl9tZW0pOiBMaWtld2lzZS4KCSogdW5yb2xsLmMgKHJlbWFwX3NwbGl0X2JpdnMpOiBMaWtld2lzZS4KCjE5OTktMTItMjcgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGRpYWdub3N0aWMuYyAodl9tZXNzYWdlX3dpdGhfZGVjbCk6IFVzZSAuKiBmb3JtYXQgc3BlY2lmaWVyCglpbnN0ZWFkIG9mIGJ1aWxkaW5nIHRoZSBmb3JtYXQgc3BlY2lmaWVyIHdpZHRoIG1hbnVhbGx5LgoKCSogc3lzdGVtLmggKHN0cnNpZ25hbCk6IERvbid0IGNoZWNrIEhBVkVfU1RSU0lHTkFMIHdoZW4KCWRldGVybWluaW5nIHdoZXRoZXIgdG8gcHJvdmlkZSBhIHByb3RvdHlwZS4gIFJlbW92ZSB0aGUKCXN5c19zaWdsaXN0IGNsYXVzZSBpbiB0aGUgY29uZGl0aW9uYWwuCgoxOTk5LTEyLTIzICBNYXJ0aW4gdi4gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBmb2xkLWNvbnN0LmMgKG9wZXJhbmRfZXF1YWxfcCk6IFVzZSBtZW1jbXAgdG8gY29tcGFyZSBzdHJpbmcKCWNvbnN0YW50cy4KCVN1Z2dlc3RlZCBieSBELiBKLiBCZXJuc3RlaW4KCjE5OTktMTItMTcgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgoKCSogY29uZmlnL2g4MzAwL2g4MzAwLmggKFRBUkdFVF9IODMwMEgsIFRBUkdFVF9IODMwMFMpOiBNYWtlIHN1cmUKCVVOSVRTX1BFUl9XT1JEIGFuZCBCSVRTX1BFUl9XT1JEIGFyZSBjb21waWxlIHRpbWUgY29uc3RhbnRzIHdoZW4KCWNvbXBpbGluZyBsaWJnY2MyLgoJKiBjb25maWcvbWlwcy9taXBzLmggKFRBUkdFVF82NEJJVCk6IExpa2V3aXNlLgoJKiBjb25maWcvcnM2MDAwL3JzNjAwMC5oIChUQVJHRVRfUE9XRVJQQzY0KTogTGlrZXdpc2UuCgkqIGxpYmdjYzIuYzogVXNlIHssVX17SFcsVyxEV310eXBlIGFuZCBEV3VuaW9uIGV2ZXJ5d2hlcmUgaW5zdGVhZAoJb2Yge1NJLERJfXR5cGUgYW5kIERJdW5pb24uICBEZWZpbmUgdGhlc2UgdHlwZXMgdG8gUUkvSEkgbW9kZXMgb24KCWRzcHMuICBHaXZlIHJvdXRpbmVzIHByb3BlciBuYW1lcyBpZiBTSS9ESSBtb2RlcyBhcmUgbm90IHVzZWQuCgkqIGxvbmdsb25nLmg6IFVzZSBEV3VuaW9uIGluc3RlYWQgb2YgREl1bmlvbi4KCjE5OTktMTItMjYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIGFjY29uZmlnLmg6IE5ldyBFTkFCTEUgZmxhZ3M6IFRSRUVfQ0hFQ0tJTkcsIFJUTF9DSEVDS0lORywKCUdDX0NIRUNLSU5HLCBHQ19BTFdBWVNfQ09MTEVDVC4KCSogY29uZmlndXJlLmluOiBBbGxvdyAtLWVuYWJsZS1jaGVja2luZyB3aXRoIGFuIGFyZ3VtZW50CglsaXN0aW5nIGNoZWNrIG1vZGVzIHRvIGVuYWJsZS4KCSogY29uZmlnLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGdnYy1wYWdlLmMsIGdnYy1zaW1wbGUuYzogRGVmaW5lIEdHQ19QT0lTT04gKGFuZAoJR0dDX0FMV0FZU19WRVJJRlkgZm9yIGdnYy1zaW1wbGUuYykgb25seSBpZgoJRU5BQkxFX0dDX0NIRUNLSU5HLiAgRGVmaW5lIEdHQ19BTFdBWVNfQ09MTEVDVCBvbmx5IGlmCglFTkFCTEVfR0NfQUxXQVlTX0NPTExFQ1QuCgkqIHJ0bC5oLCBydGwuYzogQ2hhbmdlIEVOQUJMRV9DSEVDS0lORyB0byBFTkFCTEVfUlRMX0NIRUNLSU5HCgl0aHJvdWdob3V0LgoJKiB0cmVlLmgsIHRyZWUuYzogQ2hhbmdlIEVOQUJMRV9DSEVDS0lORyB0bwoJRU5BQkxFX1RSRUVfQ0hFQ0tJTkcgdGhyb3VnaG91dC4KClN1biBEZWMgMjYgMDc6NDg6MjAgMTk5OSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZF90cnV0aG9wKTogUHJvcGVybHkgY2hlY2sgZm9yIEZQIFJIUy4KCjE5OTktMTItMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0b3BsZXYuaCAobm90ZV9kZWZlcmFsbF9vZl9kZWZpbmVkX2lubGluZV9mdW5jdGlvbik6IERlY2xhcmUuCgkqIHRvcGxldi5jIChub3RlX2RlZmVycmFsX29mX2RlZmluZWRfaW5saW5lX2Z1bmN0aW9uKTogTmV3CglmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20gLi4uCgkocmVzdF9vZl9jb21waWxhdGlvbik6IC4uLiBoZXJlLiAgVXNlIGl0LgoKRnJpIERlYyAyNCAxMjozNDoyNiAxOTk5ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IERvbid0IGNhbGwgY2xlYXJfc3RvcmFnZSBpZiBzaXplIGlzCgl2YXJpYWJsZS4KCjE5OTktMTItMjQgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluICh0b3BsZXYubyk6IERlcGVuZCBvbiBsb29wLmguCgoJKiBkd2FyZm91dC5jOiBJbmNsdWRlIHRtX3AuaC4KCgkqIGVtaXQtcnRsLmMgKHJlc3RvcmVfZW1pdF9zdGF0dXMpOiBNYXJrIHBhcmFtZXRlciB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogTGlrZXdpc2UuCgoJKiBmbG93LmMgKGZsb3dfbm9kZXNfcHJpbnQsIGZsb3dfZXhpdHNfcHJpbnQsIGZsb3dfbG9vcHNfY2ZnX2R1bXAsCglmbG93X2xvb3BfbmVzdGVkX3AsIGZsb3dfbG9vcF9leGl0c19maW5kLCBmbG93X2xvb3Bfbm9kZXNfZmluZCwKCWZsb3dfZGVwdGhfZmlyc3Rfb3JkZXJfY29tcHV0ZSwgZmxvd19sb29wX3ByZV9oZWFkZXJfZmluZCwKCWZsb3dfbG9vcF90cmVlX25vZGVfYWRkLCBmbG93X2xvb3BzX3RyZWVfYnVpbGQsCglmbG93X2xvb3BfbGV2ZWxfY29tcHV0ZSwgZmxvd19sb29wc19sZXZlbF9jb21wdXRlLAoJZmxvd19sb29wX291dHNpZGVfZWRnZV9wKTogQWRkIHByb3RvdHlwZXMuCgkocmVjb21wdXRlX3JlZ191c2FnZSk6IE1hcmsgcGFyYW1ldGVycyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBnZ2MtY2FsbGJhY2tzLmMgKGxhbmdfbWFya190cmVlLCBsYW5nX21hcmtfZmFsc2VfbGFiZWxfc3RhY2spOgoJTWFyayB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCgkqIGhhc2guYyAoaGFzaF9uZXdmdW5jKTogTWFyayBwYXJhbWV0ZXIgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogbG9jYWwtYWxsb2MuYyAobm9fY29uZmxpY3RfcCk6IExpa2V3aXNlLgoKCSogbG9vcC5jIChpbnNlcnRfYmN0KTogSGlkZSBkZWZpbml0aW9ucyBvZiB2YXJpYWJsZXMgd2l0aCBoaWRkZW4KCXVzYWdlLgoJKG5vdGVfcmVnX3N0b3JlZCk6IE1hcmsgcGFyYW1ldGVyIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIHJlZ2NsYXNzLmMgKG1lbW9yeV9tb3ZlX3NlY29uZGFyeV9jb3N0KTogTWFyayB2YXJpYWJsZSBgbWVtJwoJd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKHJlY29yZF9yZWdfY2xhc3Nlcyk6IE1hcmsgcGFyYW1ldGVyIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShyZWdfc2Nhbik6IExpa2V3aXNlLgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBjaGFuZ2VkJy4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX3JlZ19jbGFzc19sb3dlcik6IERvbid0IHVubmVjZXNzYXJpbHkgY2FzdAoJYXdheSBjb25zdC1uZXNzLgoJKGFsbG9jYXRlX3JlbG9hZF9yZWcpOiBNYXJrIHBhcmFtZXRlciB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCglSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBpbnNuJy4KCgkqIHRvcGxldi5jOiBJbmNsdWRlIGxvb3AuaC4KCShyZXBvcnRfZmlsZV9hbmRfbGluZSk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBwcm90b3R5cGUuCgoJKiB0cmVlLmMgKGJ1aWxkX2Jsb2NrKTogTWFyayBwYXJhbWV0ZXIgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogdW5yb2xsLmMgKGJpdl90b3RhbF9pbmNyZW1lbnQpOiBMaWtld2lzZS4KClRodSBEZWMgMjMgMjM6MTU6MjIgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChlbWl0X2lucHV0X3JlbG9hZF9pbnNucyk6IFJlc3RvcmUgb2xkIGJlaGF2aW9yCgl3cnQuICdzcGVjaWFsJyByZWxvYWRzLgoKMTk5OS0xMi0yMyAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogTWFrZWZpbGUuaW4gKGdnYy1zaW1wbGUuYywgZ2djLXBhZ2UuYyk6IERvbid0IGRlcGVuZCBvbgoJaGFzaC5oLiAgKGNzZS5jKTogRG9uJ3QgZGVwZW5kIG9uIGhhc2h0YWIuaC4KCgkqIGNzZS5jOiBEb24ndCBpbmNsdWRlIGhhc2h0YWIuaC4KCShoYXNoX2NzZV9yZWdfaW5mbywgY3NlX3JlZ19pbmZvX2VxdWFsX3ApOiBEZWxldGUgcHJvdG90eXBlcwoJb2YgZGVhZCBmdW5jdGlvbnMuCgkqIGdnYy1zaW1wbGUuYzogRG9uJ3QgaW5jbHVkZSBoYXNoLmguCgoxOTk5LTEyLTIyICBKYXNvbiBNZXJyaWxsICA8amFzb25AY2FzZXkuY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChhZGRfYWJzdHJhY3Rfb3JpZ2luX2F0dHJpYnV0ZSk6IENhbGwKCWdlbl9hYnN0cmFjdF9mdW5jdGlvbiBvbiBvdXIgZnVuY3Rpb24gY29udGV4dC4KClRodSBEZWMgMjMgMDM6NTc6MTAgMTk5OSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYml0cmFuZ2UuY29tPgoKCSogTWFrZWZpbGUuaW4gKElOVEVHUkFURV9IKTogRml4IHR5cG86IElOVEVHUkFURV9ILCBub3QgSU5UUkVHUkFURV9ILgoKMTk5OS0xMi0yMyAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X2FkZHJlc3NfY29zdCk6IEFkZCBzdGF0ZW1lbnQgdG8gZGVmYXVsdAoJY2FzZSBpbiBzd2l0Y2guCgoxOTk5LTEyLTIyICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoKmFkZHFpM19ub2Nsb2JiZXJfcmVsb2FkKTogQ2hhbmdlIG9wZXJhbmQgMAoJY29uc3RyYWludHMgdG8gImEhciIuCgoxOTk5LTEyLTIxICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKGNhbGxzLm8pOiBEZXBlbmQgb24gZnVuY3Rpb24uaC4KCShhbGlhcy5vKTogTGlrZXdpc2UuCgoxOTk5LTEyLTIxICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBCcmVhayBvdXQgY29kZSBhbmQgdmFyaWFibGVzIGludG8uLi4KCShpbnB1dF9yZWxvYWRfaW5zbnMsIG90aGVyX2lucHV0X2FkZHJlc3NfcmVsb2FkX2luc25zLAoJb3RoZXJfaW5wdXRfcmVsb2FkX2luc25zLCBpbnB1dF9hZGRyZXNzX3JlbG9hZF9pbnNucywKCWlucGFkZHJfYWRkcmVzc19yZWxvYWRfaW5zbnMsIG91dHB1dF9yZWxvYWRfaW5zbnMsCglvdXRwdXRfYWRkcmVzc19yZWxvYWRfaW5zbnMsIG91dGFkZHJfYWRkcmVzc19yZWxvYWRfaW5zbnMsCglvcGVyYW5kX3JlbG9hZF9pbnNucywgb3RoZXJfb3BlcmFuZF9yZWxvYWRfaW5zbnMsCglvdGhlcl9vdXRwdXRfcmVsb2FkX2luc25zKTogLi4uIG5ldyBzdGF0aWMgdmFyaWFibGVzLCBhbmQuLi4KCShlbWl0X2lucHV0X3JlbG9hZF9pbnNucywgZW1pdF9vdXRwdXRfcmVsb2FkX2luc25zLCBkb19pbnB1dF9yZWxvYWQsCglkb19vdXRwdXRfcmVsb2FkKTogLi4uIG5ldyBmdW5jdGlvbnMuCgpUdWUgRGVjIDIxIDA3OjA2OjM2IDE5OTkgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBwYS5oIChGVU5DVElPTl9BUkdfQk9VTkRBUlkpOiBOZXZlciByZXR1cm4gMC4KCjE5OTktMTItMjEgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIG1kLnRleGk6IEFkZCBjNHggY29uc3RyYWludHMgZG9jdW1lbnRhdGlvbi4KCjE5OTktMTItMjEgIE1hcnRpbiB2LiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNvbmZpZy9pMzg2L2RndXguYyAoc3RydWN0IG9wdGlvbik6IFJlbmFtZSB0bwoJbGFuZ19pbmRlcGVuZGVudF9vcHRpb24uCgkoc3RydWN0IG1fb3B0aW9ucyk6IEFkZCBkZXNjcmlwdGlvbiBmaWVsZC4KCShvdXRwdXRfb3B0aW9ucyk6IFJlbmFtZSBvcHRpb24gdHlwZSwgYWRkIHNlcCBkZWNsYXJhdGlvbiwgb3V0cHV0CglpeDg2X2NwdV9zdHJpbmcgYW5kIGl4ODZfYXJjaF9zdHJpbmcgb25seSBpZiBzZXQuCgkob3V0cHV0X2ZpbGVfc3RhcnQpOiBSZW5hbWUgb3B0aW9uIHR5cGUuCgpNb24gRGVjIDIwIDIzOjE1OjM2IDE5OTkgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChjcnRiZWdpbi5vLCBjcnRlbmQubywgcy1jcnRTKTogRGVwZW5kIG9uCglzdG1wLWludC1oZHJzLgoJKGxpYmdjYzIuYSk6IFNpbWlsYXJseS4KCk1vbiBEZWMgMjAgMjM6MDY6NDcgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogbG9uZ2xvbmcuaCAoX0FSQ0hfUFBDKTogT25seSBwcm90ZWN0IGFkZF9zc2FhYWEgYW5kIHN1Yl9kZG1tc3MKCXdpdGggV19UWVBFX1NJWkUgPT0gMzIuICBEbyBub3QgZmFsbCB0aHJvdWdoIHRvIFBPV0VSIGFyY2hpdGVjdHVyZQoJZm9yIHVtdWxfcHBtbSBhbmQgc211bF9wcG1tIGlmICFfQVJDSF9QUEMgYW5kICFfQVJDSF9QT1dFUi4KCk1vbiBEZWMgMjAgMjM6MDI6MDMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZm9sZC1jb25zdC5jIChyZWFsX2hleF90b19mKTogUmVtb3ZlIHVudXNlZCAiaXNsZG91YmxlIiB2YXJpYWJsZS4KCVJlbW92ZSByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb2YgImZyZXhwb24iIGFuZCAiZXhwb24iLgoKTW9uIERlYyAyMCAxNTowMDowNCAxOTk5ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogdHJlZS5jIChyZWFsX3ZhbHVlX2Zyb21faW50X2NzdCk6IENsZWFyIFJFQUxfVkFMVUVfVFlQRSBvYmplY3QgZmlyc3QuCgoJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yKTogTmV3IGFyZ3VtZW50IFNJWkU7IHBhc3MgdG8gY2xlYXJfc3RvcmFnZS4KCShzdG9yZV9jb25zdHJ1Y3Rvcl9maWVsZCwgZXhwYW5kX2V4cHIpOiBQYXNzIG5ldyBhcmcuCgoxOTk5LTEyLTIwICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKGV4cGxvdy5vKTogRGVwZW5kIG9uIGZ1bmN0aW9uLmguCgoJKiBzdG9yLWxheW91dC5jIChzZXRfc2l6ZXR5cGUpOiBGaXggdHlwby4KCjE5OTktMTItMjAgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZnVuY3Rpb24uYyAoY2Z1bik6IFJlbmFtZWQgZnJvbSBjdXJyZW50X2Z1bmN0aW9uLiAgQWxsIHVzZXJzCgljaGFuZ2VkLgoJKiBmdW5jdGlvbi5oIChjZnVuKTogUmVuYW1lIGRlY2xhcmF0aW9uIGFzIHdlbGwuCgoJKiByZWxvYWQuaCAoc3RydWN0IGluc25fY2hhaW4pOiBDaGFuZ2UgbGl2ZV90aHJvdWdob3V0IGFuZCBkZWFkX29yX3NldAoJdG8gYmUgb2YgdHlwZSByZWdzZXRfaGVhZCwgbm90IHJlZ3NldC4gIEFsbCB1c2VycyBjaGFuZ2VkIGJ5IGFkZGluZwoJYWRkcmVzcyBvcGVyYXRvci4KCSogcmVsb2FkMS5jIChuZXdfaW5zbl9jaGFpbik6IERvbid0IGFsbG9jYXRlIHJlZ3NldHMsIGp1c3QgY2xlYXIgdGhlbS4KCjE5OTktMTItMjAgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvcnRlbXMuaDogTmV3IGZpbGUuCgoxOTk5LTEyLTE5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoc3BpbGxfZmFpbHVyZSk6IFRha2UgY2xhc3Mgb2YgZmFpbGVkIHJlbG9hZCBhcyBhcmd1bWVudAoJYW5kIHByaW50IGl0LiAgQ2FsbGVyIGNoYW5nZWQuCgpTdW4gRGVjIDE5IDA3OjUwOjQyIDE5OTkgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiByczYwMDAuaCAoU1VCVEFSR0VUX0RFRkFVTFQpOiBOZXcgbWFjcm8uCgkoVEFSR0VUX1NXSVRDSEVTKTogQWxsb3cgc3VidGFyZ2V0cyB0byBkZWZhdWx0IHN3aXRjaGVzLgoJKiByczYwMDAvdnhwcGMuaCAoU1VCVEFSR0VUX0RFRkFVTFQpOiBOZXcgbWFjcm8uCgoxOTk5LTEyLTE4ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3J0c3R1ZmYuYyAoX19kb19nbG9iYWxfY3RvcnNfYXV4KTogRG8gbm90IGNhbGwgX19jeGFfZmluYWxpemUKCWluIGEgbWFpbiBwcm9ncmFtLgoKU2F0IERlYyAxOCAyMDo0Mjo0MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY2NjcC5jIChtYWluKTogRGVmaW5lIF9fU1REQ19WRVJTSU9OX18gYXMgbmVjZXNzYXJ5LgoJKiBjcHBpbml0LmMgKGNwcF9oYW5kbGVfb3B0aW9uKTogTGlrZXdpc2UuCgoJKiBnaW5jbHVkZS9zdGRhcmcuaCAodmFfY29weSk6IFVzZSBfX1NURENfVkVSU0lPTl9fIHRvCglkZXRlcm1pbmUgd2hlbiB0byBkZWZpbmUuCgpTYXQgRGVjIDE4IDIwOjM0OjAwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9lbWl0X2NvbmRpdGlvbmFsX21vdmUpOiBJZiBUQVJHRVRfRklYLCBoYW5kbGUKCWNtb3ZlIHdpdGggbWlzbWF0Y2hlZCB0ZXN0IGFuZCBkYXRhIG1vZGVzLgoKU2F0IERlYyAxOCAyMDozMDoxNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYy10eXBlY2suYyAoY19leHBhbmRfc3RhcnRfY2FzZSk6IERvbid0IHdhcm4gZm9yIGxvbmcgc3dpdGNoCglpbiBzeXN0ZW0gaGVhZGVycy4KClNhdCBEZWMgMTggMTY6Mjg6NDMgMTk5OSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGFsaWFzLmM6IE1pbm9yIHJlZm9ybWF0dGluZy4KCSogZmxvdy5jOiBMaWtld2lzZS4KCSogcmVncy5oOiBMaWtld2lzZS4KCSogc3Rvci1sYXlvdXQuYzogTGlrZXdpc2UuCgkqIGZvbGQtY29uc3QuYzogTGlrZXdpc2UuCgkoT1ZFUkZMT1dfU1VNX1NJR04pOiBSZW5hbWVkIGZyb20gb3ZlcmZsb3dfc3VtX3NpZ24uCgkoc3RydWN0IGNiX2FyZ3MsIGNvbnN0X2Jpbm9wXzEsIGNvbnN0X2Jpbm9wKTogUGFzcyB0eXBlIG9mIGFyZywKCW5vdCBhcmcgaXRzZWxmLgoJKHNpemVfaW50X3dpZGUpOiBDYWNoZSBub2RlcyBldmVuIGlmIGdhcmJhZ2UgY29sbGVjdGluZy4KCSh0d292YWxfY29tcGFyaXNvbl9wKTogUmVlbmFibGUgU0FWRV9FWFBSIGNhc2UgaWYgb3BlcmFuZAoJb2YgU0FWRV9FWFBSIGhhcyBubyBzaWRlIGVmZmVjdHMuCgkqIGNzZS5jOiBNb3ZlIGEgY29tbWVudC4KCSogdHJlZS5jOiBNaW5vciByZWZvcm1hdHRpbmcuCgkoaW50X3NpemVfaW5fYnl0ZXMpOiBSZXR1cm4gLTEgaWYgY29uc3RhbnQgb3ZlcmZsb3dzLgoKU2F0IERlYyAxOCAxODozMDoyMCAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBEb24ndCB0cmVhdCBhIFJFRyBsaWtlIGEgUExVUy4KCjE5OTktMTItMTggMTA6NDIgLTA4MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIG9iamMvb2JqYy1wYXJzZS5jOiBSZWdlbmVyYXRlLiAgVGhpcyBmaWxlIG11c3QgYmUgcmVidWlsdAoJYWZ0ZXIgYW55IGNoYW5nZSB0byBjLXBhcnNlLmluLCBldmVuIGlmIG9iamMtcGFyc2UueSBkaWRuJ3QKCWNoYW5nZS4gIE9vcHMuCgoxOTk5LTEyLTE4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUByZWRoYXQuY29tPgoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBSZXN0b3JlIEJMT0NLIHRyZWUKCXJlY29uc3RydWN0aW9uIGFuZCBicmFuY2ggc2hvcnRlbmluZyBjaGFuZ2VzIGxvc3QgaW4KCURlY2VtYmVyIDE4dGggY2hhbmdlLgoKU2F0IERlYyAxOCAwNToyOToyOSAxOTk5ICBTY290dCBCYW1icm91Z2ggIDxzY290dGJAbmV0d2luZGVyLm9yZz4KCgkqIGNvbmZpZy9hcm0vbGludXgtZWxmLmg6IENoYW5nZSBhbGwgaW5zdGFuY2VzIG9mCglBUk1fRkxBR19TSE9SVF9CWVRFUyB0byBBUk1fRkxBR19NTVVfVFJBUFMuCgkqIGNvbmZpZy9hcm0vdWNsaW51eC1lbGYuaDogTGlrZXdpc2UuCgoxOTk5LTEyLTE4IEdhYnJpZWwgRG9zIFJlaXMgIDxnZHJAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRvcGxldi5jIChub3RpY2UsIHZtZXNzYWdlLCB2X21lc3NhZ2Vfd2l0aF9maWxlX2FuZF9saW5lLAoJdl9tZXNzYWdlX3dpdGhfZGVjbCwgZmlsZV9hbmRfbGluZV9mb3JfYXNtLAoJdl9lcnJvcl93aXRoX2ZpbGVfYW5kX2xpbmUsIHZfZXJyb3Jfd2l0aF9kZWNsLCB2X2Vycm9yX2Zvcl9hc20sCgl2ZXJyb3IsIHZmYXRhbCwgdl93YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSwgdl93YXJuaW5nX3dpdGhfZGVjbCwKCXZfd2FybmluZ19mb3JfYXNtLCB2d2FybmluZywgdnBlZHdhcm4sIHZfcGVkd2Fybl93aXRoX2RlY2wsCgl2X3BlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lLCB2c29ycnksIHZub3RpY2UsIGNvdW50X2Vycm9yLAoJcGZhdGFsX3dpdGhfbmFtZSwgZmF0YWxfaW9fZXJyb3IsIG5lZWRfZXJyb3JfbmV3bGluZSwKCWxhc3RfZXJyb3JfZnVuY3Rpb24sIGxhc3RfZXJyb3JfdGljaywgYW5ub3VuY2VfZnVuY3Rpb24sCglkZWZhdWx0X3ByaW50X2Vycm9yX2Z1bmN0aW9uLCBwcmludF9lcnJvcl9mdW5jdGlvbiwKCXJlcG9ydF9lcnJvcl9mdW5jdGlvbiwgZm5vdGljZSwgZXJyb3Jfd2l0aF9maWxlX2FuZF9saW5lLAoJZXJyb3Jfd2l0aF9kZWNsLCBlcnJvcl9mb3JfYXNtLCBlcnJvciwgc2V0X2ZhdGFsX2Z1bmN0aW9uLCBmYXRhbCwKCV9mYXRhbF9pbnNuLCBfZmF0YWxfaW5zbl9ub3RfZm91bmQsIHdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLAoJd2FybmluZ193aXRoX2RlY2wsIHdhcm5pbmdfZm9yX2FzbSwgd2FybmluZywgcGVkd2FybiwKCXBlZHdhcm5fd2l0aF9kZWNsLCBwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSwgc29ycnkpOiBNb3ZlIHRvCglkaWFnbm9zdGljLmMKCShjb21waWxlX2ZpbGUpOiBVc2UgZm5vdGljZSBpbnN0ZWFkIG9mIG5vdGljZS4gIEFkanVzdCBjYWxsLgoKCSogZGlhZ25vc3RpYy5jOiBOZXcgZmlsZS4KCgkqIE1ha2VmaWxlLmluIChPQkpTKTogSW5jbHVkZSBkaWFnbm9zdGljLm8KCShkaWFnbm9zdGljLm8pOiBEZWZpbmUgZGVwZW5kZW5jZS4KCjE5OTktMTItMTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKEFTTV9PVVRQVVRfWFhYKTogV3JhcCBpbiBkby13aGlsZSgwKS4KCVR3ZWFrIGZvcm1hdHRpbmcuCgoxOTk5LTEyLTE4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAocnB0c190b3AsIHJwdGJfdG9wKTogQWRkIGNsb2JiZXJzIGZvciBycyBhbmQgcmUuCgoxOTk5LTEyLTE3IDEzOjIxIC0wODAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGZpeHRlc3RzLmMgKGlzX2N4eF9oZWFkZXIpOiBOZXcgZm4sIHNwbGl0IG91dCBvZgoJZG91YmxlX3NsYXNoX3Rlc3QuCgkoZWxzZV9lbmRpZl9sYWJlbCk6IEFsbG93ICIjZW5kaWYgLy8gY29tbWVudCIgaW4gQysrIGhlYWRlcnMsCglhcyBkZXRlcm1pbmVkIGJ5IGlzX2N4eF9oZWFkZXIuCgkqIGZpeGZpeGVzLmMgKGVsc2VfZW5kaWZfbGFiZWxfZml4KTogVXBkYXRlIGNvbW1lbnQuCgkqIGZpeGluY2wuYzogRG9uJ3Qgb3V0cHV0IFZFUkJfUFJPR1JFU1MgbGluZXMgaWYgc3Rkb3V0IGlzIG5vdAoJYSB0dHkuCgkqIGdlbmZpeGVzOiBDb3JyZWN0IGRvdWJsZSB0aGlua28gaW4gY29tbWFuZGxpbmUgcGFyc2luZy4KCSogaGFja3NoZWxsLnRwbDogR2VuZXJhdGUgY29ycmVjdCBzaCBzeW50YXggZm9yIGJ5cGFzcwoJZW50cmllcy4KCgkqIGluY2xoYWNrLmRlZiAoYWxsKTogV2hlbmV2ZXIgYW4gaW5zZXJ0ZWQgcHJlcHJvY2Vzc29yCgljb25kaXRpb25hbCBpcyBzcGxpdCBvdmVyIG11bHRpcGxlIGxpbmVzLCB1c2UgZG91YmxlCgliYWNrc2xhc2hlcyBpbiB0aGlzIGZpbGUgc28gdGhlIGZpeGVkIGhlYWRlciB3aWxsIGJlIHJlYWRhYmxlLgoKCShBQUJfZmRfemVyb19nbGliY18xXzApOiBSZW5hbWUgdG8gQUFCX2ZkX3plcm9fYXNtX3Bvc2l4X3R5cGVzX2gKCWFuZCBhZGQgYnlwYXNzIGVudHJ5IGZvciBjb3JyZWN0IHZlcnNpb24gb2YgdGhpcyBoZWFkZXIuCgkoQUFCX2ZkX3plcm9fZ2xpYmNfMV94KTogUmVuYW1lIHRvIEFBQl9mZF96ZXJvX2dudV90eXBlc19oLgoJKEFBQl9mZF96ZXJvX2dsaWJjXzJfMCk6IFJlbmFtZSB0byBBQUJfZmRfemVyb19zZWxlY3RiaXRzX2guCgoJKGhwdXg4X2JvZ3VzX2lubGluZXMpOiBOZXcgZml4LCBzcGxpdCBmcm9tLi4uCgkodWx0cml4X2F0b2ZfcGFyYW0pIC4uLiBoZXJlLgoJKG1hdGhfZXhwcmVzc2lvbik6IEFkZCBieXBhc3MgZW50cnkga2V5ZWQgdG8gZ2xpYmMgY29tbWVudAoJaW5kaWNhdGluZyB0aGUgcHJvYmxlbSBoYXMgYmVlbiBkZWFsdCB3aXRoOyBkaXNhYmxlCgl1bm5lY2Vzc2FyeSBzZWQgb3BlcmF0aW9uczsgdXBkYXRlIGNvbW1lbnRhcnkuCgkobWF0aF9nY2NfaWZuZGVmcyk6IFJlbmFtZSB0byBtYXRoX2h1Z2VfdmFsX2Zyb21fZGJsX21heCwKCWFkZCBzZWxlY3QgYW5kIGJ5cGFzcyBlbnRyaWVzLCBzaW1wbGlmeSBzaGVsbCBvcGVyYXRpb24uCgkobWF0aF9odWdlX3ZhbF9pZm5kZWYpOiBTcGxpdCBmcm9tIG1hdGhfZ2NjX2lmbmRlZnMuCgoJKGlwX21pc3Npbmdfc2VtaSwgcnM2MDAwX3BhcmFtLCB0aW5mb19jcGx1c3BsdXMsCgkgdWx0cml4X2F0b2ZfcGFyYW0pOiBBZGQgc2VsZWN0IGVudHJ5LgoJKHN0ZGlvX3ZhX2xpc3QsIHN1bm9zX21hdGhlcl9kZWNsKTogQWRkIGJ5cGFzcyBlbnRyeS4KCShzeXN0eXBlc19mb3JfYWl4LCBzeXN2ODZfc3RyaW5nLCB0aW5mb19jcGx1c3BsdXMpOiBQdXQgdGhlCgljb21tZW50cyB3aXRoIHRoZSBmaXhlcyB0aGV5IGRlc2NyaWJlLgoKCSogYy1wYXJzZS5pbiAoc3RyaW5nIGFjdGlvbik6IERvIG5vdCB3YXJuIGFib3V0IEFOU0kgc3RyaW5nCgljb25jYXRlbmF0aW9uIGluIHN5c3RlbSBoZWFkZXJzLiAgQWZmZWN0cyBDIHBhcnNlciBvbmx5LgoJKiBjLXBhcnNlLnksIGMtcGFyc2UuYywgYy1wYXJzZS5oOiBSZWJ1aWxkLgoKMTk5OS0xMi0xNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoVEFSR0VUX0FSQ0gzMik6IEV4Y2hhbmdlIGlmZGVmcyBzbyB0aGF0IGlmCgljb21waWxpbmcgbGliZ2NjMiB0aGUgbWFjcm8gZGVwZW5kcyBhbHdheXMgb24gYXJjaCBjcHAgZGVmaW5lcy4KCkZyaSBEZWMgMTcgMTA6MzQ6MTYgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyA8cmVhcm5zaGFAYXJtLmNvbT4KCgkqIGxvb3AuYyAoaW5zZXJ0X2xvb3BfbWVtKTogRG9uJ3QgcmVjb3JkIE1FTXMgZnJvbSBpbnNpZGUKCUVYUFJfTElTVHMuCgpGcmkgRGVjIDE3IDEyOjA4OjExIE1FVCAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnRyLmN6PgoKCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBEbyBub3QgdXNlIGZsb3dncmFwaCB3aGVuIG5vdCBvcHRpbWl6aW5nLgoKCSogZ2NzZS5jICh0cnlfcmVwbGFjZV9yZWcpOiBEbyByZXBsYWNlbWVudHMgaW4gUkVHX0VRVUFML1JFR19FUVVJVgoJbm90ZXMgdG9vLCBjcmVhdGUgb25lIHdoZW4gcmVwbGFjZW1lbnQgZmFpbGVkLCBhdHRlbXB0IHRvIHNpbXBsaWZ5CglyZXN1bHRpbmcgbm90ZXMuCgkoY3Byb3BfaW5zbik6IFByb3BhZ2F0ZSBldmVuIHRvIHJlZ2lzdGVycyBtZW50aW9uZWQgb25seSBpbiBSRUdfRVFVQUwKCW9yIFJFR19FUVVJViBub3Rlcy4KCjE5OTktMTItMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcnRzdHVmZi5jIChfX2Rzb19oYW5kbGUpOiBEZWNsYXJlLgoJKF9fY3hhX2ZpbmFsaXplKTogTGlrZXdpc2UuCgkoZG9fZ2xvYmFsX2R0b3JzX2F1eCk6IENhbGwgX19jeGFfZmluYWxpemUgaWYgX19kc29faGFuZGxlIGlzCglub24tTlVMTC4KCgkqIGludm9rZS50ZXhpOiBEb2N1bWVudCAtZnVzZS1jeGEtYXRleGl0LgoKCSogdHJlZS5oIChwdHJfdHlwZV9ub2RlKTogRG9jdW1lbnQuCgkoY29uc3RfcHRyX3R5cGVfbm9kZSk6IExpa2V3aXNlLgoKRnJpIERlYyAxNyAwMTozMjozOCBNRVQgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogcmVnbW92ZS5jIChvcHRpbWl6ZV9yZWdfY29weV8xKTogSWdub3JlIExPT1Agbm90ZXMuCgkob3B0aW1pemVfcmVnX2NvcHlfMik6IExpa2V3aXNlLgoJKG9wdGltaXplX3JlZ19jb3B5XzMpOiBMaWtld2lzZS4KCShmaXh1cF9tYXRjaF8yKTogTGlrZXdpc2UuCgkocmVnbW92ZV9vcHRpbWl6ZSk6IExpa2V3aXNlLgoJKGZpeHVwX21hdGNoXzEpOiBMaWVrd2lzZS4KCgkqIGkzODYubWQgKEhJIHRvIFNJbW9kZSBwcm9tb3Rpbmcgc3BsaXR0ZXJzKTogUmV3cml0ZS4KCShwdXNoc2YgbWVtIHBlZXAyKTogTmV3LgoJKHRlc3RoaSB0byBhbmRoaSBwZWVwMik6IFJlbW92ZS4KCSogaTM4Ni5oICh4ODZfcHJvbW90ZV9RSW1vZGUpOiBOZXcuCgkoVEFSR0VUX1BST01PVEVfUUltb2RlKTogTmV3LgoJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBwcm9tb3RhYmxlX2JpbmFyeV9vcGVyYXRvci4KCSogaTM4Ni5jICh4ODZfcHJvbW90ZV9RSW1vZGUwOiBOZXcuCgkocHJvbW90YWJsZV9iaW5hcnlfb3BlcmF0b3IpOiBOZXcuCgkqIGkzODYtcHJvdG9zLmggKHByb21vdGFibGVfYmluYXJ5X29wZXJhdG9yKTogTmV3LgoKCSogaTM4Ni5tZCAodGVzdD9pXzEpOiBVc2UgIm5vbm1lbW9yeV9vcGVyYW5kIiBwcmVkaWNhdGUsIHNpbXBsaWZ5Cgljb25kaXRpb24uCgkob25lX2NtcGw/aSopOiBQYXNzICJOT1QiIHRvIHVuYXJ5X29wZXJhdG9yX29rLgoKMTk5OS0xMi0xNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIE1ha2VmaWxlLmluIChJTlRSRUdSQVRFX0gpOiBSZW5hbWUgdG8gSU5URUdSQVRFX0guCgkqIGZ1bmN0aW9uLmMgKGluc2VydF9ibG9ja19hZnRlcl9ub3RlKTogUmVtb3ZlLgoJKHJldHJvZml0X2Jsb2NrKTogTGlrZXdpc2UuCgkoaWRlbnRpZnlfYmxvY2tzKTogRml4IGluZGVudGF0aW9uLgoJKHJlb3JkZXJfYmxvY2tzKTogRG9uJ3QgTlVMTCBvdXQgTk9URV9TT1VSQ0VfRklMRSBmb3IgYQoJTk9URV9JTlNOX0JMT0NLX0JFRyBvciBOT1RFX0lOU05fQkxPQ0tfRU5ELgoJKiBmdW5jdGlvbi5oIChpbnNlcnRfYmxvY2tfYWZ0ZXJfbm90ZSk6IFJlbW92ZSBwcm90b3R5cGUuCgkocmV0cm9maXRfYmxvY2spOiBMaWtld2lzZS4KCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBEb24ndCBjYWxsCglmaW5kX2xvb3BfdHJlZV9ibG9ja3MuICBVc2UgZXhwYW5kX3N0YXJ0X2JpbmRpbmdzX2FuZF9ibG9jaywgbm90CglqdXN0IGV4cGFuZF9zdGFydF9iaW5kaW5ncy4gIFVzZSB0aGUgYmxvY2tfbWFwIHRvIHJlbWFwIG9sZAoJTk9URV9CTE9DS3MgdG8gbmV3IG9uZXMuCgkoaW50ZWdyYXRlX2RlY2xfdHJlZSk6IEtlZXAgdHJhY2sgb2YgcmVtYXBwZWQgYmxvY2tzLgoJKiBpbnRlZ3JhdGUuaCAoc3RydWN0IGlubGluZV9yZW1hcCk6IEFkZCBibG9ja19tYXAuCgkqIHN0bXQuYyAoZXhwYW5kX2ZpeHVwKTogRG9uJ3QgdHJ5IHRvIHJldHJvZml0X2Jsb2Nrcy4gIEp1c3Qgc2V0CglOT1RFX0JMT0NLIG9uIHRoZSBub3Rlcy4KCShleHBhbmRfc3RhcnRfYmluZGluZ3MpOiBSZW5hbWUgdG8gLi4uCgkoZXhwYW5kX3N0YXJ0X2JpbmRpbmdzX2FuZF9ibG9jayk6IEFkZCBwYXJhbWV0ZXIuICBTZXQgTk9URV9CTE9DSy4KCShleHBhbmRfZW5kX2JpbmRpbmdzKTogU2V0IE5PVEVfQkxPQ0suCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogSW4gZnVuY3Rpb24tYXQtYS10aW1lLW1vZGUsCglyZWNvbnN0cnVjdCB0aGUgQkxPQ0sgdHJlZS4KCSogdHJlZS5oIChleHBhbmRfc3RhcnRfYmluZGluZ3MpOiBNYWNyb2l6ZS4gIENhbGwgLi4uCgkoZXhwYW5kX3N0YXJ0X2JpbmRpbmdzX2FuZF9ibG9jayk6IE5ldyBmdW5jdGlvbi4KCjE5OTktMTItMTYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHByaW50X29wZXJhbmQpOiBDYXN0IGZwcmludGYgYXJndW1lbnRzCgl0byBtYXRjaCB0aGUgZm9ybWF0LgoKMTk5OS0xMi0xNiAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcmVkaGF0LmNvbT4KCgkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc25fMSk6IE9ubHkgZW1pdCBjbG9iYmVycyBpZiBvbmUgb2YKCXRoZSBvdXRwdXRzIGlzIGEgU1VCUkVHLgoJKiBydGxhbmFsLmMgKHJlZ19vdmVybGFwX21lbnRpb25lZF9wKTogUmV2ZXJ0IERlY2VtYmVyIDE1dGgKCWNoYW5nZS4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChlcGlsb2d1ZV9yZW51bWJlcik6IEFkZCBkZWZhdWx0IGNhc2UKCXRvIHN3aXRjaCBzdG10LgoKVGh1IERlYyAxNiAxMTozMzo1NyBNRVQgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBSdW4gYnJhbmNoIHNob3J0ZW5pbmcgYWZ0ZXIKCXJlZy1zdGFjay4KCgkqIHJlZ2NsYXNzLmMgKGxvb3BfZGVwdGgpOiBSZW1vdmUKCShzY2FuX29uZV9pbnNuKTogRG8gbm90IGhhbmRsZSBMT09QX05PVEUgaW5zbnMuCgkocmVnY2xhc3MpOiBHbyB0aHJvdWdoIGJhc2ljIGJsb2NrcyBhbmQgc2V0IGxvb3BfY29zdAoKVGh1IERlYyAxNiAwMjo1NjoyNSAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0BiaXRtb3Zlci5jb20+CgoJKiB0cmVlLmggKERFQ0xfRlJPTV9JTkxJTkUpOiBDaGVjayBERUNMX0FCU1RSQUNUX09SSUdJTiB0b28uCgpUaHUgRGVjIDE2IDEwOjQzOjM1IE1FVCAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2Lm1kIChtb3ZxaSk6IFVzZSAibm9uaW1tZWRpYXRlX29wZXJhbmQiIGZvciBvdXRwdXQgb3BlcmFuZC4KCShtb3ZzdHJpY3RxaSwgbW92ZGksIG1vdnNmLCBtb3ZkZiwgbW92eGYpOiBMaWtld2lzZS4KCShhZGRkaSwgYWRkcWksIGFkZGhpLCBzdWJkaSwgc3VicWksIHN1YmhpLCBmZnMpOiBMaWtld2lzZS4KClRodSBEZWMgMTYgMDI6NDE6MjYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gKHJ0aEBjeWdudXMuY29tKQoKCSogbG9vcC5jIChpbnNlcnRfbG9vcF9tZW0pOiBJZ25vcmUgbWVtb3J5IGNsb2JiZXJzLgoKCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKTogUmVkdWNlIChPUCAoTUlOVVMgQSBCKSAwKQoJdG8gKE9QIEEgQikuCgpUaHUgRGVjIDE2IDAyOjI2OjExIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHByb2ZpbGUuYzogUmVtb3ZlIHJlZHVuZGFudCAjaW5jbHVkZSAib3V0cHV0LmgiLgoKCSogaDgzMDAubWQgKEhJbW9kZSBwcmVpbmMgcGVlcGhvbGUpOiBGaXggdHlwby4KCjE5OTktMTItMTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBjYXNleS5jeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAocmV0cm9maXRfYmxvY2spOiBBYm9ydCBpZiB3ZSBkb24ndCBmaW5kIGEgc3VpdGFibGUgaW5zbi4KCShpbnNlcnRfYmxvY2tfYWZ0ZXJfbm90ZSk6IEFib3J0IGlmIHdlIGRvbid0IGhhdmUgYSBwcmV2aW91cyBibG9jay4KCVJlbW92ZSBGTiBwYXJhbWV0ZXIuCgkqIGZ1bmN0aW9uLmg6IEFkanVzdC4KCjE5OTktMTItMTUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBidWlsdGlucy5jIChleHBhbmRfYnVpbHRpbl9tYXRoZm4pOiBNYWtlIHN1cmUgbm90IHRvIGV4cGFuZCB0aGUKCWFyZ3VtZW50IG1vcmUgdGhhbiBvbmNlLgoKMTk5OS0xMi0xNSAgSmFzb24gTWVycmlsbCAgPGphc29uQGNhc2V5LmN5Z251cy5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogRXhwYW5kIHVwcGVyIGJvdW5kIG9mIGEgZHluYW1pYyBhcnJheS4KCjE5OTktMTItMTUgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgoKCSogZXhwci5jIChlbWl0X2dyb3VwX2xvYWQpOiBVc2UgZHN0IG1vZGUgaWYgc3JjIGlzIFZPSURtb2RlLgoKV2VkIERlYyAxNSAxNjoxMTo1NSBNRVQgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogZnVuY3Rpb24uYyAoUFJFRkVSUkVEX1NUQUNLX0JPVUROQVJZKTogUHJvdmlkZSBkZWZhdWx0IHZhbHVlLgoJKGFzc2lnbl9zdGFja19sb2NhbF8xKTogTGltaXQgYWxpZ25tZW50IHRvIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSwKCXVwZGF0ZSBzdGFja19hbGlnbm1lbnRfbmVlZGVkLgoJKHByZXBhcmVfZnVuY3Rpb25fc3RhcnQpOiBJbml0aWFsaXplIHN0YWNrX2FsaWdubWVudF9uZWVkZWQKCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIGZpZWxkIHN0YWNrX2FsaWdubWVudF9uZWVkZWQuCgpXZWQgRGVjIDE1IDE0OjU1OjI0IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNhbGxlci1zYXZlLmMgKGluc2VydF9vbmVfaW5zbik6IFJldHVybnMgc3RydWN0IGluc25fY2hhaW4gKi4KCUhhbmRsZSBsaXZlX3Rocm91Z2hvdXQgLyBkZWFkX29yX3NldCBpbnN0ZWFkIG9mIGxpdmVfYmVmb3JlIC8KCWxpdmVfYWZ0ZXIuCgkoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogR2V0IHJlZ2lzdGVyIGxpdmVuZXNzaW5mb3JtYXRpb24gZnJvbQoJY2hhaW4tPmxpdmVfdGhyb3VnaG91dC4KCShhZGRfc3RvcmVkX3JlZ3MpOiBOZXcgZnVuY3Rpb24uCgkoaW5zZXJ0X3Jlc3RvcmUsIGluc2VydF9zYXZlKTogQWRkIHJlc3RvcmVkIC8gc2F2ZWQgcmVnaXN0ZXJzIHRvCglkZWFkX29yX3NldC4KCSogZ2xvYmFsLmMgKHJlZ19kaWVzKTogTmV3IHBhcmFtZXRlciBjaGFpbi4KCShyZWdfYmVjb21lc19saXZlKTogVGhpcmQgcGFyYW1ldGVyIGlzIHJlZ3Nfc2V0IG5vdy4KCUNoYW5nZWQgYWxsIGNhbGxlcnMuCgkocmVnX2RpZXMpOiBOZXcgcGFyYW1ldGVyIGNoYWluLiAgQ2hhbmdlZCBhbGwgY2FsbGVycy4KCShidWlsZF9pbnNuX2NoYWluKTogU2V0IGxpdmVfdGhyb3VnaG91dCBpbnN0ZWFkIG9mCglsaXZlX2JlZm9yZSAvIGxpdmVfYWZ0ZXIuCgkqIHJlbG9hZC5oIChzdHJ1Y3QgaW5zbl9jaGFpbik6IFJlcGxhY2UgbWVtYmVycyBsaXZlX2JlZm9yZSAvCglsaXZlX2FmdGVyIHdpdGggbGl2ZV90aHJvdWdob3V0IC8gZGVhZF9vcl9zZXQuCgkqIHJlbG9hZDEuYyAobmV3X2luc25fY2hhaW4pOiBIYW5kbGUgbGl2ZV90aHJvdWdob3V0IC8gZGVhZF9vcl9zZXQKCWluc3RlYWQgb2YgbGl2ZV9iZWZvcmUgLyBsaXZlX2FmdGVyLgoJKG1heWJlX2ZpeF9zdGFja19hc21zLCBmaW5kX3JlbG9hZF9yZWdzLCBmaW5pc2hfc3BpbGxzKTogTGlrZXdpc2UuCgkob3JkZXJfcmVnc19mb3JfcmVsb2FkLCBmaW5kX3JlZywgZmluaXNoX3NwaWxscyk6IExpa2V3aXNlLgoJKGNob29zZV9yZWxvYWRfcmVnc19pbml0KTogTGlrZXdpc2UuCgkqIHN0dXBpZC5jIChjdXJyZW50X2NoYWluLCBmaW5kX2Nsb2JiZXJlZF9yZWdzKTogRGVsZXRlLgoJKHN0dXBpZF9saWZlX2FuYWx5c2lzKTogU2V0IGNoYWluLT5saXZlX3Rocm91Z2hvdXQgY2hhaW4tPmRlYWRfb3Jfc2V0CglpbnN0ZWFkIG9mIGNoYWluLT5saXZlX2JlZm9yZSAvIGNoYWluLT5saXZlX2FmdGVyLgoJKG1hcmtfaGFyZF9yZWYpOiBOZXcgZnVuY3Rpb24uCgkoc3R1cGlkX21hcmtfcmVmcyk6IENhbGwgbWFya19oYXJkX3JlZi4gQ2xlYXIgY2hhaW4tPmxpdmVfdGhyb3VnaG91dC4KCjE5OTktMTItMTUgIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+CgoJKiBydGxhbmFsLmMgKHJlZ19vdmVybGFwX21lbnRpb25lZF9wKTogSGFuZGxlIENPTkNBVC4KCldlZCBEZWMgMTUgMTU6MDU6MzAgTUVUIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGZsb3cuYyAoY2FsY3VsYXRlX2xvb3BfZGVwdGgpOiBNYWtlIGdsb2JhbCwgcmVtb3ZlIHByb3RvdHlwZSwKCXJld3JpdGUgdG8gdXNlIG5ldyBsb29wIGluZnJhc3RydWN0dXJlLgoJKGZpbmRfYmFzaWNfYmxvY2spOiBSZW1vdmUgY2FsY3VsYXRlX2xvb3BfZGVwdGggY2FsbC4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIGZpbmRfYmFzaWNfYmxvY2suCgkqIG91dHB1dC5oIChjYWxjdWxhdGVfbG9vcF9kZXB0aCk6IERlY2xhcmUuCgoJKiBmbG93LmMgKGR1bXBfZmxvd19pbmZvKTogRHVtcCBsb29wX2RlcHRoLgoJKGZsb3dfbG9vcHNfbm9kZXNfZmluZCk6IEluY3JlYXNlIGxvb3BfZGVwdGggZm9yIGJhc2ljIGJsb2NrIGluIHRoZQoJYm9keS4KCShmbG93X2xvb3BzX2ZpbmQpOiBJbml0aWFsaXplIHRoZSBsb29wX2RlcHRoIGZvciBlYWNoIGJhc2ljIGJsb2NrLgoKMTk5OS0xMi0xNSAgSmFzb24gTWVycmlsbCAgPGphc29uQGNhc2V5LmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGRlY2xfZnVuY3Rpb25fY29udGV4dCk6IEhhbmRsZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KCgkqIHRsaW5rLmMgKHNjYW5fbGlua2VyX291dHB1dCk6IERvbid0IGxvb2sgaW4gZGVtYW5nbGVkIG5hbWUgd2hlbgoJbG9va2luZyBmb3IgbGlua2VyIG91dHB1dCBrZXl3b3Jkcy4KCgkqIGR3YXJmb3V0LmMgKG91dHB1dF90eXBlKTogV2UgY2FuIGRlZmVyIG5hbWVzcGFjZS1zY29wZSBjbGFzc2VzLgoKV2VkIERlYyAxNSAwMToyMzoyOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWdjbGFzcy5jIChyZWNvcmRfcmVnX2NsYXNzZXMpOiBVcGRhdGUgY29tbWVudCBmb3IgbWVyZ2luZwoJcmVnaXN0ZXIgY2xhc3MgcHJlZmVyZW5jZXMgaW4gcmVnLT5yZWcgY29waWVzLiAgVGlnaHRlbiBjb25kaXRpb25zCglmb3IgbWVyZ2luZyByZWdpc3RlciBjbGFzcyBwcmVmZXJlbmNlcyBpbiByZWctPnJlZyBjb3BpZXMuCgpXZWQgRGVjIDE1IDAyOjE5OjMyIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAodGFibGVqdW1wZGkpOiBHZW5lcmF0ZSBESW1vZGUgTEFCRUxfUkVGLgoKMTk5OS0xMi0xNCAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BjeWdudXMuY29tPgoKCSogY29uZmlnL202OGsvbTY4MDIwLWVsZi5oIChFTkRGSUxFX1NQRUMpOiBEZWxldGUuCgkoSU5JVF9TRUNUSU9OX0FTTV9PUCk6IERlbGV0ZS4KCShGSU5JX1NFQ1RJT05fQVNNX09QKTogRGVsZXRlLgoJKFNUQVJURklMRV9TUEVDKTogRGVmaW5lIHRvIGhvbGQganVzdCBjcnRiZWdpbi5vLgoKMTk5OS0xMi0xNCAgSmFzb24gTWVycmlsbCAgPGphc29uQGNhc2V5LmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoYWRkX2Fic3RyYWN0X29yaWdpbl9hdHRyaWJ1dGUpOiBEbyBjYWxsIGFib3J0IGlmCgl0aGUgYWJzdHJhY3Qgb3JpZ2luIHdhc24ndCBlbWl0dGVkLgoKCSogZHdhcmYyb3V0LmMgKGNsYXNzX3Njb3BlX3ApOiBOZXcgZm4uCgkoZ2VuX3N1YnByb2dyYW1fZGllKTogVXNlIGl0LgoJKGdlbl92YXJpYWJsZV9kaWUpOiBVc2UgaXQuICBUd2VhayBsb2dpYy4KCShnZW5fc3RydWN0X29yX3VuaW9uX3R5cGVfZGllKTogQ2hlY2sgY29udGV4dF9kaWUgdG8gZGV0ZXJtaW5lCglpZiB3ZSdyZSBmdW5jdGlvbi1sb2NhbC4KCShkd2FyZjJvdXRfZGVjbCk6IENoZWNrIERFQ0xfQlVJTFRfSU4sIG5vdCBERUNMX0ZVTkNUSU9OX0NPREUuCgoxOTk5LTEyLTE0ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQ2FuJ3QgcmV2ZXJzZSBhIGJpdiB0aGF0IGhhcwoJbWF5YmVfbXVsdGlwbGUgc2V0LgoKMTk5OS0xMi0xNCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmM6IEFkZCBzdXBwb3J0IGZvciAtbWNwdT1hcm03MjAgY29tbWFuZCBsaW5lCglzd2l0Y2guCgpUdWUgRGVjIDE0IDE4OjEzOjMyIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRml4IHNpZ24gb2YgZ2l2IGxpZmV0aW1lIGNhbGN1bGF0aW9uCglmb3IgZ2l2cyBtYWRlIGZyb20gYml2IGluY3JlbWVudHMuCgpUdWUgRGVjIDE0IDA4OjExOjI3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGFscGhhLW9zZiwgYWxwaGEtbGludXgpOiBIYW5kbGUgZXY2Wzc4XS4KCSogYWxwaGEuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IFJlY29nbml6ZSAtbWNwdT1ldjY3LgoJKiBhbHBoYS5oIChDUFBfQ1BVX0VWNjdfU1BFQyk6IE5ldy4KCShDUFBfQ1BVX0RFRkFVTFRfU1BFQyk6IEV4YW1pbmUgVEFSR0VUX0NQVV9ERUZBVUxUIHRvIHVzZSBpdC4KCShFWFRSQV9TUEVDUyk6IFVwZGF0ZS4KClR1ZSBEZWMgMTQgMDg6MDQ6MjggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNwcHAuYyAobWFpbik6IFNldCB0cmlncmFwaHMgYW5kIF9fU1RSSUNUX0FOU0lfXyBhcwoJYXBwcm9wcmlhdGUgZm9yIC1sYW5nLWM4OSBhbmQgLXN0ZD0qLgoJKiBjcHBpbml0LmMgKGNwcF9oYW5kbGVfb3B0aW9uKTogTGlrZXdpc2UuCgkobmV3X3BlbmRpbmdfZGVmaW5lKTogTmV3LCBzcGxpdCBvdXQgZnJvbSBjcHBfaGFuZGxlX29wdGlvbi4KCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogRG9uJ3QgZGVmaW5lIF9fU1RSSUNUX0FOU0lfXwoJb3IgZW5hYmxlIHRyaWdyYXBocyBmb3IgLWFuc2kvLXN0ZD0qLgoKCSogZ2luY2x1ZGUvc3RkYXJnLmggKF9fdmFfY29weSk6IE5ldy4KCSh2YV9jb3B5KTogRG9uJ3QgZGVmaW5lIGZvciBDODkuCgpUdWUgRGVjIDE0IDA4OjM3OjI3IENTVCAxOTk5IENsaW50b24gUG9wZXR6ICA8Y3BvcGV0ekBjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0ubWQgKG11bHNpZGkzYWRkZGksIHVtdWxzaWRpM2FkZGRpKTogTmV3IHBhdHRlcm5zCglmb3IgbG9uZyBsb25nIG11bHRpcGx5LWFjY3VtdWxhdGUuCgpUdWUgRGVjIDE0IDEzOjUxOjM4IE1FVCAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiByZWdjbGFzcy5jIChzY2FuX29uZV9pbnNuKTogU2V0IGxvb3BfY29zdCB0byAxIHdoZW4KCW9wdGltaXppbmcgZm9yIHNpemUuCgoxOTk5LTEyLTE0ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogQ2FuJ3QgYXZvaWQgc2VsZWN0X3JlbG9hZF9yZWdzL2ZpbmlzaF9zcGlsbHMKCWlmIHNvbWV0aGluZyBjaGFuZ2VkLiAgQmFjayBvdXQgdGhhdCBwYXJ0IG9mIHllc3RlcmRheSdzIGNoYW5nZXMuCgoJKiBsb29wLmMgKGxvb3BfbWF4X3JlZyk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCgkobG9vcF9vcHRpbWl6ZSk6IEluaXRpYWxpemUgaXQuICBFbGltaW5hdGUgb25lIHVubmVjZXNzYXJ5IGNhbGwgdG8KCW1heF9yZWdfbnVtLgoJKHNjYW5fbG9vcCk6IENhbGwgcmVnX3NjYW5fdXBkYXRlIHdoZW5ldmVyIHdlIG1heSBoYXZlIGFkZGVkIG5ldwoJcmVnaXN0ZXJzLCBhbmQgdXBkYXRlIGxvb3BfbWF4X3JlZy4KClR1ZSBEZWMgMTQgMTI6MDc6MjkgTUVUIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIHJlZ2NsYXNzLmMgIChyZWNvcmRfcmVnX2NsYXNzZXMpOiBEbyBub3QgZG8gdGhlIGNvcHlpbmcgcHJlZmVycmVuY2luZwoJd2hlbiBzb3VyY2UgZG9lcyBub3QgZGllLgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzKTogSGFuZGxlIElOT1VUIG9wZXJhbmRzIHByb3Blcmx5LgoKMTk5OS0xMi0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CgoJKiBjb25maWcvc3BhcmMvbGludXg2NC5oIChUQVJHRVRfTElWRV9HMCwKCVRBUkdFVF9CUk9LRU5fU0FWRVJFU1RPUkUpOiBEb24ndCBzdXBwb3J0IHdlaXJkIFNQQVJDCgl2YXJpYW50cyBvbiBMaW51eC4KCSogY29uZmlnL3NwYXJjL2xpbnV4LmggKFRBUkdFVF9MSVZFX0cwLAoJVEFSR0VUX0JST0tFTl9TQVZFUkVTVE9SRSk6IExpa2V3aXNlLgoJKiBjb25maWcvc3BhcmMvbGludXgtYW91dC5oIChUQVJHRVRfTElWRV9HMCwKCVRBUkdFVF9CUk9LRU5fU0FWRVJFU1RPUkUpOiBMaWtld2lzZS4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChTUEFSQ19ERUZBVUxUX0NNT0RFTCk6IERlZmF1bHQgdG8gQ01fMzIuCgkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBGb3IgYmxvY2sgcHJvZmlsaW5nIGZpeCAlZzQgb24gc3BhcmM2NCwKCW5vdCAlZzIuCgkoTUFDSElORV9TVEFURV9TQVZFLCBNQUNISU5FX1NUQVRFX1JFU1RPUkUpOiBVc2UgJWc0IGluc3RlYWQgb2YgJWcyCglhcyBzcGFyYzY0IGJsb2NrIHByb2ZpbGluZyByZWdpc3Rlci4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX292ZXJyaWRlX29wdGlvbnMpOiBBbGxvdyBibG9jawoJcHJvZmlsaW5nIHdpdGggLW0zMi4KCShzcGFyY19ibG9ja19wcm9maWxlcik6IFVzZSAlZzQgaW5zdGVhZCBvZiAlZzIgYXMgc3BhcmM2NCBibG9jawoJcHJvZmlsaW5nIHJlZ2lzdGVyLgoJKiBjb25maWcvc3BhcmMvbGludXg2NC5oIChNQUNISU5FX1NUQVRFXyopOiBPbmx5IHByb3ZpZGUgdGhlc2UKCW1hY3JvcyBvbiBUQVJHRVRfQVJDSDMyLiBzcGFyYy5oIGhhcyBtYWNyb3MgZ29vZCBlbm91Z2ggZm9yIHNwYXJjNjQuCgkqIGNvbmZpZy9zcGFyYy9zb2wyLmggKE1BQ0hJTkVfU1RBVEVfKik6IExpa2V3aXNlLgoKCSogY29uZmlnL3NwYXJjL3htLXNwNjQuaDogQXZvaWQgdXNpbmcgX19zcGFyY192OV9fIHdoZW4gdGVzdGluZwoJZm9yIHNwYXJjNjQuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3htLXN5c3Y0LTY0Lmg6IExpa2V3aXNlLgoJKiBjb25maWcvZmxvYXQtc3BhcmMuaDogTGlrZXdpc2UuCgkqIGdsaW1pdHMuaDogTGlrZXdpc2UuCgkqIGxvbmdsb25nLmg6IExpa2V3aXNlLgoKCSogY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAoREVGQVVMVF9WVEFCTEVfVEhVTktTKTogRGVmaW5lIHRvIDEuCgkoQVNNX0lERU5USUZZX0dDQyk6IFJlbW92ZS4KCjE5OTktMTItMTQgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogY29tYmluZS5jIChjb21iaW5lX3NpbXBsaWZ5X3J0eCk6IERvbid0IG1ha2Ugc2hhcmVkIHJ0bC4KCShzaW1wbGlmeV9sb2dpY2FsKTogTGlrZXdpc2UuCgoxOTk5LTEyLTE0ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGNjY3AuYyAoSU5PX1RfRVEpOiBEaXNhYmxlIGlub2RlLWJhc2VkIG9wdGltaXphdGlvbiBmb3IgQ3lnd2luLgoJKiBjcHBmaWxlcy5jIChJTk9fVF9FUSk6IExpa2V3aXNlLgoKMTk5OS0xMi0xNCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2NydGRsbC5oIChTVEFSVEZJTEVfU1BFQyk6IEFkZCAtcGcgcHJvZmlsaW5nIHN1cHBvcnQuCgkqIGkzODYvbWluZ3czMi5oIChMSUJfU1BFQyk6IExpa2V3aXNlLgoJKFNUQVJURklMRV9TUEVDKTogTGlrZXdpc2UuCgkqIGkzODYvdXdpbi5oIChMSUJfU1BFQyk6IExpa2V3aXNlLgoJKFNUQVJURklMRV9TUEVDKTogTGlrZXdpc2UuCgoJKiBpMzg2L21pbmd3MzIuaCAoU1VCVEFSR0VUX1BST0xPR1VFKTogT3ZlcnJpZGUgQ3lnd2luIGRlZmluaXRpb24uCgkqIGkzODYvdXdpbi5oIChTVUJUQVJHRVRfUFJPTE9HVUUpOiBMaWtld2lzZS4KCk1vbiBEZWMgMTMgMjA6MjU6MjkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29tYmluZS5jIChjb21iaW5lX3NpbXBsaWZ5X3J0eCk6IEZpeCBvcmRlciBvZiBjaGVja3MgZm9yCgkoYXNoaWZ0cnQgZm9vIEMpIC0+IChsdCBmb28gKGNvbnN0X2ludCAwKSkgc2ltcGxpZmljYXRpb24uCgoxOTk5LTEyLTEzICBDbGludG9uIFBvcGV0eiAgPGNwb3BldHpAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kICAoKm11bHNpZGkzYWRkZGksICp1bXVsc2lkaTNhZGRkaSkgQmFja2VkIG91dAoJMTIvMTAvOTkgY2hhbmdlLCByZWFwcGxpZWQgdG8gbWVyZ2VkLWFybS10aHVtYi1iYWNrZW5kLWJyYW5jaC4KCjE5OTktMTItMTAgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogaGFyZC1yZWctc2V0LmggKGludl9yZWdfYWxsb2Nfb3JkZXIpOiBEZWNsYXJlIGlmIFJFR19BTExPQ19PUkRFUiBpcwoJZGVmaW5lZC4KCSogcmVnY2xhc3MuYyAoaW52X3JlZ19hbGxvY19vcmRlcik6IE5ldyBhcnJheS4KCShyZWdjbGFzc19pbml0KTogSWYgUkVHX0FMTE9DX09SREVSIGlzIGRlZmluZWQsIGluaXRpYWxpemUgaXQuCgoJKiByZWxvYWQuaCAoc3RydWN0IGluc25fY2hhaW4pOiBEZWxldGUgZmllbGRzIGdyb3VwX3NpemUsIGdyb3VwX21vZGUsCgljb3VudGVkX2Zvcl9ncm91cHMsIGNvdW50ZWRfZm9yX25vbmdyb3Vwcy4gIEFkZCBmaWVsZHMgcmxkIGFuZAoJbl9yZWxvYWRzLgoJKiByZWxvYWQuYyAocHVzaF9zZWNvbmRhcnlfcmVsb2FkKTogRG9uJ3Qgc2V0IG5vbmdyb3VwIGZpZWxkIG9mCgluZXcgcmVsb2Fkcy4KCShwdXNoX3JlbG9hZCk6IExpa2V3aXNlLgoJKGZpbmRfcmVsb2Fkcyk6IERlbGV0ZSBjb2RlIHRvIGNvbXB1dGUgbm9uZ3JvdXAgZmllbGRzLgoJKiByZWxvYWQxLmMgKHJlbG9hZF9pbnNuX2ZpcnN0b2JqKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShwc2V1ZG9zX2NvdW50ZWQsIHNwaWxsZWRfcHNldWRvcyk6IE5vdyBvZiB0eXBlIHJlZ3NldF9oZWFkLiAgQWxsCgl1c2VycyBjaGFuZ2VkLgoJKGNhbGN1bGF0ZV9uZWVkcywgZmluZF90d29yZWdfZ3JvdXAsIGZpbmRfZ3JvdXAsIHBvc3NpYmxlX2dyb3VwX3AsCgljb3VudF9wb3NzaWJsZV9ncm91cHMsIG1vZGVzX2VxdWl2X2Zvcl9jbGFzc19wLCBuZXdfc3BpbGxfcmVnLAoJZHVtcF9uZWVkcywgbWF5YmVfbWFya19wc2V1ZG9fc3BpbGxlZCwgaGFyZF9yZWdfdXNlX2NvbXBhcmUpOiBEZWxldGUKCWZ1bmN0aW9ucy4KCShjb3VudF9wc2V1ZG8sIHNlbGVjdF9yZWxvYWRfcmVncywgY29weV9yZWxvYWRzLCBmaW5kX3JlZyk6IE5ldwoJZnVuY3Rpb25zLgoJKHN0cnVjdCBoYXJkX3JlZ19uX3VzZXMpOiBEZWxldGVkLgoJKHBvdGVudGlhbF9yZWxvYWRfcmVncyk6IERlbGV0ZWQuCgkoaW5pdF9yZWxvYWQpOiBJbml0aWFsaXplIHNwaWxsZWRfcHNldWRvcyBhbmQgcHNldWRvc19jb3VudGVkLgoJKHJlbG9hZCk6IERvbid0IHRyeSB0byBhbGxvY2F0ZSByZWxvYWQgcmVnaXN0ZXJzIGlmIHdlIGFscmVhZHkga25vdwoJd2UgaGF2ZSB0byBtYWtlIGFub3RoZXIgcGFzcy4gIENhbGwgc2VsZWN0X3JlbG9hZF9yZWdzLiAgRnJlZSBtZW1vcnkKCXN0YXJ0aW5nIHdpdGggcmVsb2FkX2ZpcnN0b2JqIHdoZW4gc3RhcnRpbmcgYW5vdGhlciBwYXNzLgoJRG9uJ3QgYWxsb2NhdGUgc3BpbGxlZF9wc2V1ZG9zLgoJKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBDYWxsIGNvcHlfcmVsb2FkcyBmb3IgYW4gaW5zbiB0aGF0CgluZWVkcyByZWxvYWRzOyBkb24ndCBjYWxsIGNhbGN1bGF0ZV9uZWVkcy4KCShzcGlsbF9jb3N0KTogTmV3IHN0YXRpYyBhcnJheS4KCSh1c2VkX3NwaWxsX3JlZ3NfbG9jYWwpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IFJld3JpdGUgdG8gbG9zZSBoYXJkX3JlZ19uX3VzZXMgYW5kIHRoZSBjb2RlCgl0byBjb21wdXRlIHBvdGVudGlhbF9yZWxvYWRfcmVncy4KCShmaW5kX3JlbG9hZF9yZWdzKTogQ29tcGxldGVseSByZXdyaXR0ZW4gdG8gdXNlIGZpbmRfcmVnLgoJKGFsbG9jYXRlX3JlbG9hZF9yZWcpOiBEb24ndCB0ZXN0IGNvdW50ZWRfZm9yX2dyb3VwcyBvcgoJY291bnRlZF9mb3Jfbm9uZ3JvdXBzLiAgTG9zZSBOT0VSUk9SIGFyZyBhbmQgY29kZSB0byBnaXZlIGFuIGVycm9yOwoJYWxsIGNsbGVycyBjaGFuZ2VkLgoJKGNob29zZV9yZWxvYWRfcmVncyk6IEFkZCBmYWxsYmFjayBjb2RlIHRoYXQgdXNlcyB0aGUgZXhpc3RpbmcKCXJlZ2lzdGVyIGFsbG9jYXRpb24gZnJvbSBmaW5kX3JlbG9hZF9yZWdzLgoKTW9uIERlYyAxMyAwMDo1NDoxNCAxOTk5ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIGZsb3cuYyAoY3JlYXRlX2VkZ2VfbGlzdCk6IENhc3QgeG1hbGxvYyByZXR1cm4gdmFsdWUuCgpNb24gRGVjIDEzIDAwOjQ3OjU4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGRvcHJudC5jOiBSZW1vdmUgaW5jb3JyZWN0IGNvbW1lbnQgY2xvc3VyZS4KCgkqIGNzZS5jOiBGaXggYSBmZXcgbWlub3Igd2hpdGVzcGFjZSBnb29mcy4KCjE5OTktMTItMTMgIERvbiBCb3dtYW4gIDxkb25AcGl4c3RyZWFtLmNvbT4KCgkqIG1pcHMvdnh3b3Jrcy5oOiBGaXggcHJvYmxlbSB3aXRoIGNvbW1lbnQgdGVybWluYXRpb24uCgkoRVhUUkFfU0VDVElPTlMpOiBBZGQgaW5fc2Jzcy4KCShFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyk6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KCjE5OTktMTItMTIgIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+CgoJKiBjc2UuYyAoc3RydWN0IGNzZV9yZWdfaW5mbyk6IEFkZCBoYXNoX25leHQgbWVtYmVyLAoJcmVvcmRlciByZXN0IG9mIHN0cnVjdCBmb3IgYmV0dGVyIHBhY2tpbmcgb24gNjQtYml0Cglob3N0cy4KCShjc2VfcmVnX2luZm9fdHJlZSk6IEtpbGwuCgkoUkVHSEFTSF9TSElGVCwgUkVHSEFTSF9TSVpFLCBSRUdIQVNIX01BU0ssIHJlZ19oYXNoLAoJUkVHSEFTSF9GTik6IE5ldyBjdXN0b20gcG93MiBoYXNoIG1lY2hhbmlzbS4KCShOQlVDS0VUUyk6IEtpbGwuCgkoSEFTSF9TSElGVCwgSEFTSF9TSVpFLCBIQVNIX01BU0ssIEhBU0gsIHRhYmxlKTogUmV3b3JrIHRvCgl1c2UgYSBwb3cyIGhhc2ggdGFibGUuCgkoZ2V0X2NzZV9yZWdfaW5mbyk6IFJld29yayB0byB1c2UgbmV3IFJFR0hBU0guCgkobmV3X2Jhc2ljX2Jsb2NrKTogTGlrZXdpc2UsIHVzZSBIQVNIX1NJWkUsIGFuZCBpbmxpbmUKCWZyZWVfZWxlbWVudCBjYWxsLgoJKHJlbW92ZV9mcm9tX3RhYmxlKTogUmV3b3JrIHRvIHVzZSBIQVNIX1NJWkUvSEFTSF9NQVNLLAoJYW5kIGlubGluZSBmcmVlX2VsZW1lbnQgY2FsbC4KCShsb29rdXBfYXNfZnVuY3Rpb24sIGluc2VydCwgZmx1c2hfaGFzaF90YWJsZSwgaW52YWxpZGF0ZSwKCXJlbW92ZV9pbnZhbGlkX3JlZnMsIHJlbW92ZV9pbnZhbGlkX3N1YnJlZ19yZWZzLCByZWhhc2hfdXNpbmdfcmVnLAoJaW52YWxpZGF0ZV9mb3JfY2FsbCwgdXNlX3JlbGF0ZWRfdmFsdWUsIGZpbmRfY29tcGFyaXNvbl9hcmdzLAoJZm9sZF9ydHgsIGVxdWl2X2NvbnN0YW50LCBjc2VfaW5zbiwgaW52YWxpZGF0ZV9tZW1vcnkpOiBMaWtld2lzZS4KCShoYXNoX2NzZV9yZWdfaW5mbywgY3NlX3JlZ19pbmZvX2VxdWFsX3AsIGZyZWVfZWxlbWVudCwKCWdldF9lbGVtZW50KTogS2lsbC4KClN1biBEZWMgMTIgMjE6MzE6NDQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3NlLmMgKGNzZV9iYXNpY19ibG9jayk6IEZyZWUgcXR5X3RhYmxlIGNvbnNpc3RlbnRseS4KCjE5OTktMTItMTIgIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+CgkgICAgSmFrdWIgSmVsaW5layAgICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92dGYgcmVnL3JlZyBzcGxpdCk6IERvbid0IGdlbmVyYXRlCglTVUJSRUdzIGJ5IGhhbmQsIGdlbiB0aGUgYXBwcm9wcmlhdGUgaGFyZCByZWcgZGlyZWN0bHkuCgkobW92dGYgcmVnL21lbSBzcGxpdCk6IExpa2V3aXNlIGFuZCBhbHRlcl9zdWJyZWcgb24gZGVzdGluYXRpb24KCWlmIG5lY2Vzc2FyeS4KCShtb3Z0ZiBtZW0vcmVnIHNwbGl0KTogU2ltaWxhcmx5LgoJKG1vdmRmX2NjX3NwNjQpOiBSZW5hbWUgZnJvbSBoaWRkZW4gcGF0dGVybi4KCShtb3Z0Zl9jY19ocV9zcDY0KTogUmVuYW1lZCBmcm9tIG1vdnRmX2NjX3NwNjQuCgkobW92dGZfY2Nfc3A2NCwgZm9sbG93aW5nIHNwbGl0KTogTmV3IHBhdHRlcm4gYW5kIHNwbGl0dGVyLgoJKG1vdmRmX2NjX3JlZ19zcDY0KTogUmVuYW1lIGZyb20gaGlkZGVuIHBhdHRlcm4uCgkobW92dGZfY2NfcmVnX2hxX3NwNjQpOiBSZW5hbWVkIGZyb20gbW92dGZfY2NfcmVnX3NwNjQsIHJlcXVpcmUKCVRBUkdFVF9IQVJEX1FVQUQuCgkobW92dGZfY2NfcmVnX3NwNjQsIGZvbGxvd2luZyBzcGxpdCk6IE5ldyBwYXR0ZXJuIGFuZCBzcGxpdHRlci4KCjE5OTktMTItMTIgIFN0ZXBoZW4gTCBNb3NoaWVyIDxtb3NoaWVyQG1lZGlhb25lLm5ldD4KCgkqIGxvb3AuYyAobG9hZF9tZW1zKTogRG9uJ3QgaG9pc3Qgd3JpdHRlbiBmbG9hdGluZyBwb2ludCBtZW0KCWlmIC1mZmxvYXQtc3RvcmUuCgoxOTk5LTEyLTEyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZXhjZXB0LmggKHN0cnVjdCBlaF9xdWV1ZSk6IEFkZCBgbmV4dCcgcG9pbnRlci4KCShzdHJ1Y3QgZWhfc3RhdHVzKTogTWFrZSB4X2VocXVldWUgYSBwb2ludGVyLgoJKHB1c2hfZWhxdWV1ZSk6ICBEZWNsYXJlLgoJKHBvcF9laHF1ZXVlKTogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jIChleHBhbmRfZWhfcmVnaW9uX2VuZCk6IEFkanVzdCBub3cgdGhhdCBlaHF1ZXVlIGlzIGEKCXBvaW50ZXIuCgkoZXhwYW5kX2ZpeHVwX3JlZ2lvbl9lbmQpOiBMaWtld2lzZS4KCShleHBhbmRfbGVmdG92ZXJfY2xlYW51cHMpOiBMaWtld2lzZS4KCShwdXNoX2VocXVldWUpOiBEZWZpbmUuCgkocG9wX2VocXVldWUpOiBMaWtld2lzZS4KCShlbWl0X2NsZWFudXBfaGFuZGxlcik6IFVzZSBwdXNoX2VocXVldWUgYW5kIHBvcF9laHF1ZXVlIHJhdGhlcgoJdGhhbiBkb2luZyBpdCBpbmxpbmUuCgkoZXhwYW5kX3N0YXJ0X2FsbF9jYXRjaCk6ICBBZGp1c3Qgbm93IHRoYXQgZWhxdWV1ZSBpcyBhCglwb2ludGVyLgoJKG1hcmtfZWhfcXVldWUpOiBNYXJrIGFsbCBsZXZlbCBvZiB0aGUgcXVldWUuCgkobWFya19laF9zdGF0dXMpOiAgQWRqdXN0IG5vdyB0aGF0IGVocXVldWUgaXMgYQoJcG9pbnRlci4KCShpbml0X2VoX2Zvcl9mdW5jdGlvbik6IEFsbG9jYXRlIGVocXVldWUuCgkoZnJlZV9laF9zdGF0dXMpOiBGcmVlIGl0LgoJKiBzdG10LmMgKGV4cGFuZF9jbGVhbnVwcyk6IFNhdmUgdGhlIGVocXVldWUgYXJvdW5kIHRoZSBjbGVhbnVwCglleHBhbnNpb24gZm9yIGEgZml4dXAuCgoxOTk5LTEyLTEyICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBndGhyLXNpbmdsZS5oIChfX2d0aHJlYWRfYWN0aXZlX3ApOiBBZGQgcHJvdG90eXBlIGFyZ3VtZW50cy4KCgkqIGxpYmdjYzIuYyAoX191ZGl2bW9kZGk0KTogUmVtb3ZlIHVubmVjZXNzYXJ5IGRlY2xzLgoJKF9fZHVtbXksIF9fYnVpbHRpbl9zYXZlcmVncywgX19iYl9leGl0X3RyYWNlX2Z1bmMsIF9fYmJfaW5pdF9wcmcsCglfX2JiX3RyYWNlX2Z1bmMsIF9fYmJfdHJhY2VfZnVuY19yZXQsIF9fYmJfdHJhY2VfcmV0LAoJZnVuY3Rpb25fcHRyLCBnZXRwYWdlc2l6ZSwgX19lbmFibGVfZXhlY3V0ZV9zdGFjaywKCV9fZW5hYmxlX2V4ZWN1dGVfc3RhY2ssIF9fY2xlYXJfaW5zbl9jYWNoZSwKCV9fZW5hYmxlX2V4ZWN1dGVfc3RhY2ssIF9fZG9fZ2xvYmFsX2R0b3JzLCBfX2RvX2dsb2JhbF9jdG9ycywKCV9jbGVhbnVwLCBfZXhpdCwgX19kZWZhdWx0X3Rlcm1pbmF0ZSwgX190ZXJtaW5hdGVfZnVuYywKCV9fdGVybWluYXRlLCBfX2VtcHR5LCBfX3Rocm93LCBuZXdfZWhfY29udGV4dCwKCWVoX2NvbnRleHRfaW5pdGlhbGl6ZSwgZWhfY29udGV4dF9zdGF0aWMsIGVoX2NvbnRleHRfc3BlY2lmaWMsCglnZXRfZWhfY29udGV4dCwgX19nZXRfZWhfY29udGV4dCwgX19nZXRfZWhfaW5mbywKCWluaXRfcmVnX3NpemVfdGFibGUsIGVoX3RocmVhZHNfaW5pdGlhbGl6ZSwKCV9fZ2V0X2R5bmFtaWNfaGFuZGxlcl9jaGFpbiwgX19zanRocm93LCBfX3NqcG9wbnRocm93LAoJX191bndpbmRpbmdfY2xlYW51cCwgdGhyb3dfaGVscGVyLCBfX3Rocm93LCBfX3JldGhyb3csCglfX3B1cmVfdmlydHVhbCk6IEFkZCBwcm90b3R5cGUgYXJndW1lbnRzLgoJKF9fYmJfZXhpdF9mdW5jKTogQ2FzdCBhIHNpemVvZiB0byBsb25nIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJQ2FzdCBhIHNpZ25lZCB2YWx1ZSB0byB1bnNpZ25lZCBsb25nIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKG5ld19laF9jb250ZXh0KTogV3JhcCBpbiBfR1RIUkVBRFMgbWFjcm8uCgkoX19zanRocm93LCBfX3NqcG9wbnRocm93KTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgY2xlYW51cCcgYXQKCWRlY2xhcmF0aW9uLgoJKGluX3JlZ193aW5kb3cpOiBNYXJrIHBhcmFtZXRlcnMgd2l0aCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLgoJKHRocm93X2hlbHBlcik6IEluaXRpYWxpemUgdmFyaWFibGVzIGBoYW5kbGVyX3AnIGFuZCBgcGNfcCcuCgoxOTk5LTEyLTExICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb21iaW5lLmMgKHJlY29yZF9wcm9tb3RlZF92YWx1ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKCWBsaW5rczInLgoKCSogZW1pdC1ydGwuYyAocmVudW1iZXJfaW5zbnMpOiBMaWtld2lzZSBmb3IgYG9sZF9tYXhfdWlkJy4KCgkqIGdsb2JhbC5jIChyZWNvcmRfY29uZmxpY3RzKTogTGlrZXdpc2UgZm9yIGBqJy4KCgkqIGdlbm91dHB1dC5jIChvdXRwdXRfaW5zbl9kYXRhKTogRG9uJ3QgdW5uZWNlc3NhcmlseSBjYXN0IGF3YXkKCWNvbnN0LW5lc3MuCgoxOTk5LTEyLTExICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBpMzg2LXByb3Rvcy5oIChvdXRwdXRfMzg3X2JpbmFyeV9vcCwgb3V0cHV0X2ZpeF90cnVuYywKCW91dHB1dF9mcF9jb21wYXJlKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGkzODYuYyAoaXg4Nl9zcGxpdF90b19wYXJ0cywgaXg4Nl9zYWZlX2xlbmd0aF9wcmVmaXgpOiBBZGQKCXN0YXRpYyBwcm90b3R5cGVzLgoJKG92ZXJyaWRlX29wdGlvbnMsIGl4ODZfY29tcF90eXBlX2F0dHJpYnV0ZXMsIHByaW50X29wZXJhbmQsCglvdXRwdXRfMzg3X2JpbmFyeV9vcCwgb3V0cHV0X2ZpeF90cnVuYywgb3V0cHV0X2ZwX2NvbXBhcmUpOgoJQ29uc3RpZnkgYSBjaGFyKi4KCShpeDg2X3NjaGVkX3Jlb3JkZXIpOiBNYXJrIHBhcmFtZXRlciBgY2xvY2tfdmFyJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogaTM4Ni5oIChERUJVR19QUklOVF9SRUcpOiBDb25zdGlmeSBhIGNoYXIqLgoKRnJpIERlYyAxMCAxNjoxMjoxMyAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmIChFWFBSX1dJVEhfRklMRV9MT0NBVElPTik6IFRlbXBvcmFyaWx5IGFkZCBhIHRoaXJkCglvcGVyYW5kLCBmb3IgdXNlIGluIHRoZSBKYXZhIGZyb250LWVuZC4KCjE5OTktMTItMTAgIEJlbiBDb2xsaW5zICA8YmNvbGxpbnNAZGViaWFuLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogRml4IHR5cG8gZm9yICItNjQiIGluIDY0Yml0IGFzIGNoZWNrLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoxOTk5LTEyLTEwICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIGxvbmdsb25nLmggKF9fc3BhcmNfdjlfXyk6IFVzZSAlckRJR0lUIGluc3RlYWQgb2YgJURJR0lUIHdoZXJlCglhcHByb3ByaWF0ZS4KCjE5OTktMTItMTAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtcGFyc2UuaW4gKHN0cmluZyk6IFdpdGggLVd0cmFkaXRpb25hbCwgd2FybiBpZiBBTlNJIHN0cmluZwoJY29uY2F0ZW5hdGlvbiBpcyB1dGlsaXplZC4KCgkqIGludm9rZS50ZXhpICgtV3RyYWRpdGlvbmFsKTogRG9jdW1lbnQgaXQuCgoxOTk5LTEyLTEwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmbG93LmMgKGZsb3dfbG9vcHNfZHVtcCk6IEF2b2lkIEFOU0kgc3RyaW5nIGNvbmNhdGVuYXRpb24uCglDYXN0IGEgcHRyZGlmZl90IHRvIGxvbmcgYW5kIHBhc3MgaXQgdG8gcHJpbnRmIHdpdGggJWxkLgoKMTk5OS0xMi0xMCAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BjeWdudXMuY29tPgoKCSogY29uZmlnL202OGsvbTY4ay5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IElmIHdlIGhhdmUgbm8KCTY4ODgxLCB3ZSBoYXZlIG5vIDY4ODgxIHJlZ2lzdGVycyBhdCBhbGwuCgkoSEFSRF9SRUdOT19NT0RFX09LKTogSXQgaXMgYWx3YXlzIE9LIHRvIHB1dCBhIE1PREVfRkxPQVQKCXZhbHVlIGluIGEgNjg4ODEgcmVnaXN0ZXIgaWYgaXQgaXMgYXZhaWxhYmxlLgoKMTk5OS0xMi0xMCAgQ2xpbnRvbiBQb3BldHogIDxjcG9wZXR6QGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5tZCAoKm11bHNpZGkzYWRkZGksICp1bXVsc2lkaTNhZGRkaSk6IE5ldyBwYXR0ZXJucwoJZm9yIGxvbmcgbG9uZyBtdWx0aXBseS1hY2N1bXVsYXRlLgoKMTk5OS0xMi0xMCAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGluc2VydF9sb29wX21lbSk6IFVuZG8gbGFzdCBjaGFuZ2UuCgoxOTk5LTEyLTEwICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUByZWRoYXQuY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGZwX3NldGhpX3AsIGZwX21vdl9wLCBmcF9oaWdoX2xvc3VtX3ApOgoJTmV3IGZ1bmN0aW9ucy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLXByb3Rvcy5oOiBBZGQgdGhlbS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmg6IEFkZCB0aGVtIHRvIFBSRURJQ0FURV9DT0RFUy4KCShFWFRSQV9DT05TVFJBSU5UX0JBU0UpOiBOZXcgbWFjcm8sIGhhbmRsaW5nIFEsIFIsIGFuZCBTCgljb25zdHJhaW50cyB3aGljaCB1c2UgdGhvc2UgaGVscGVycy4KCShFWFRSQV9DT05TVFJBSU5UKTogVXNlIHRoaXMgbmV3IG1hY3JvLgoJKiBtZC50ZXhpOiBVcGRhdGUgc3BhcmMgdGFyZ2V0IGNvbnN0cmFpbnRzIGRvY3VtZW50YXRpb24uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoY2xlYXJfc2YsIGNsZWFyX3NmcCwgbW92c2ZfY29uc3RfaW50cmVnLAoJbW92c2ZfY29uc3RfaGlnaCwgbW92c2ZfY29uc3RfbG8sIG1vdnNmX2luc24pOiBEZWxldGUuCgkobW92c2ZfaW5zbl9ub3Zpc19saXZlZzAsIG1vdnNmX2luc25fbm92aXNfbm9saXZlZzAsCgltb3ZzZl9pbnNuX3ZpcywgbW92c2ZfbG9fc3VtLCBtb3ZzZl9oaWdoKTogTmV3IHBhdHRlcm5zLgoJKG1vdnNmIGhpZ2gvbG9fc3VtIHNwbGl0KTogUmV3b3JrIGZvciBuZXcgcGF0dGVybnMuCgkobW92c2YgZXhwYW5kZXIpOiBBbGxvdyBzdG9yaW5nIGZwX3plcm8gdG8gbWVtb3J5IGlmICEgbGl2ZV9nMC4KCjE5OTktMTItMDkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjZXR1cy5jeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoY19jb21tb25fbm9kZXNfYW5kX2J1aWx0aW5zKToKCUNyZWF0ZSBfX2J1aWx0aW5fcHRyZGlmZl90IGFuZCBfX2J1aWx0aW5fc2l6ZV90LgoKVGh1IERlYyAgOSAxODowNTo0OCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS9lbGYuaCAoTUFYX09GSUxFX0FMSUdOTUVOVCk6IERlZmluZS4KCkZyaSBEZWMgMTAgMDA6NTM6MTAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVnY2xhc3MuYyAoZ2xvYmFsaXplX3JlZyk6IFJlLWluc3RhdGUgdGVzdCB0aGF0IGFsbG93cwoJZml4ZWQgcmVnaXN0ZXJzIHRvIGJlIGRlY2xhcmVkIGFzIGEgdmFyaWFibGUgZXZlbiBhZnRlciBmdW5jdGlvbnMKCWFyZSBkZWZpbmVkLgoKRnJpIERlYyAxMCAwMDo1MjoxMyBNRVQgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogaTM4Ni5tZCAoY3B1IGF0dHJpYnV0ZSk6IEFkZCAiYXRobG9uIi4KCShhdGhsb25fZGVjb2RlKTogTmV3IGF0dHJpYnV0ZS4KCShBdGhsb24gc2NoZWR1bGluZyB1bml0cyBkZWZpbml0aW9ucyk6IE5ldy4KCShmY21wIGFuZCBzaGxkIHBhdHRlcm5zKTogU2V0IGF0aGxvbl9kZWNvZGUgdG8gInZlY3RvciIuCgkqIGkzODYuYyAoYXRobG9uX2Nvc3QpOiBOZXcuCgkobV9BVEhMT04pOiBOZXcuCgkoeDg2X3VzZV9sZWF2ZSwgeDg2X3B1c2hfbWVtb3J5LCB4ODZfbW92eCwgeDg2X2Ntb3ZlLCB4ODZfZGVlcF9icmFuY2gsCgl4ODZfdXNlX3NhaGYpOiBTZXQgZm9yIEF0aGxvbi4KCSh4ODZfdXNlX2Zpb3ApOiBVbnNldCBmb3IgQXRobG9uLgoJKG92ZXJyaWRlX29wdGlvbnMpOiBEZWZpbmUgQXRobG9uIGFsaWdubWVudHMgYW5kICJhdGhsb24iIG5hbWUuCgkoeDg2X2FkanVzdF9jb3N0KTogUGVuYWxpemUgQUdJIGFuZCBkZWxheWVkIGxhdGVuY2llcyBmb3IgQXRobG9uLgoJKiBpMzg2LmggKFRBUkdFVF9BVEhMT04pOiBOZXcuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfQVRITE9OLgoJKFRBUkdFVF9DUFVfREVGQVVMVF9TUEVDKTogU2V0IHRvICItRF9fdHVuZV9hdGhsb25fXyIKCWZvciBDUFVfREVGQVVMVD09NQoJKFRBUkdFVF9DUFBfQ1BVX1NQRUNTKTogU2V0IC1EX190dW5lX2F0aGxvbl9fIGZvciBBdGhsb24uCgoxOTk5LTEyLTA5ICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CgoJKiBsb29wLmMgKHJlY29yZF9iaXYpOiBEZWNsYXJlIHBhcmFtZXRlciBhcyBpbnQuCgoJKiBjb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oOiBEZWNsYXJlIGxvbmdfbWVtb3J5X29wZXJhbmQuCgoxOTk5LTEyLTA5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdHJlZS5jIChjb3B5X25vZGUpOiBEbyB6ZXJvIHRoZSBUUkVFX0NIQUlOLCBldmVuIGZvciBhbgoJRVhQUl9XSVRIX0ZJTEVfTE9DQVRJT04uCgpUaHUgRGVjICA5IDExOjM2OjI0IE1FVCAxOTk5IEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKG5lZz8/LCBhYnM/Ziwgb25lX2NtcGw/aSk6IFVzZSBub25pbW1lZGlhdGVfb3BlcmFuZAoJaW4gZXhwYW5kZXIuCgoJKiBmbG93LmMgKHJlY29tcHV0ZV9yZWdfdXNhZ2UpOiBVc2UgYmFzaWMgYmxvY2sgaW5mbyB0byBnZXQgbG9vcF9kZXB0aC4KCgkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUsIGRpc3RyaWJ1dGVfbm90ZXMpOiBSZW1vdmUgUkVHX05fUkVGUwoJdXBkYXRpbmcgY29kZS4KCjE5OTktMTItMDkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgoKCSogY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAoVEFSR0VUX0RFRkFVTFQpOiBNYWtlIC1tYXBwLXJlZ3MKCWRlZmF1bHQgb24gbGludXg2NCBhZ2Fpbi4KCSogY29uZmlnL3NwYXJjL3QtbGludXg2NDogQWRkIG1uby1hcHAtcmVncyBhbmQgbm9uLW1lZGxvdyBjb2RlCgltb2RlbHMgZm9yIG11bHRpbGliaW5nLgoJKiBnZW5tdWx0aWxpYjogQWNjZXB0IHwgYXMgYWx0ZXJuYXRpdmUgc2VwYXJhdG9yIHdpdGhpbiBhIHNldCBpbgoJTVVMVElMSUJfT1BUSU9OUy4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChQUk9NT1RFX0ZPUl9DQUxMX09OTFkpOiBEZWZpbmUuCgoJKiBjYWxscy5jIChwcmVjb21wdXRlX2FyZ3VtZW50cyk6IE1ha2Ugc3VyZSBpbml0aWFsX3ZhbHVlIGNvbnRhaW5zCgl2YWx1ZSBwc2V1ZG8gd2hpY2ggQ1NFIGV4cGVjdHMuCgkqIGNzZS5jIChzdHJ1Y3Qgc2V0KTogTmV3IGVudHJ5IG9yaWdfc3JjLgoJKGNzZV9pbnNuKTogU2V0IGl0IGVhcmx5IG9uIGVudHJ5LCB1c2UgaXQgZm9yIGxpYmNhbGwgRVFVSVYgbm90ZQoJcmVwbGFjZW1lbnQuCgpXZWQgRGVjICA4IDIyOjI0OjE1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGNvdW50X2Jhc2ljX2Jsb2Nrcyk6IERvbid0IGFkZCAodXNlIChjb25zdF9pbnQgMCkpIGluc25zLgoKMTk5OS0xMi0wOCAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGluc2VydF9sb29wX21lbSk6IERvbid0IGhvaXN0IHZvbGF0aWxlIG1lbXMgb3V0IG9mIGxvb3BzLgoKMTk5OS0xMi0wOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAodWx0cmFfY21vdmVfcmVzdWx0c19yZWFkeV9wLAoJdWx0cmFfZnBtb2RlX2NvbmZsaWN0X2V4aXN0cywgdWx0cmFfZmx1c2hfcGlwZWxpbmUpOiBUeXBvIGZpeC4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChTUEFSQ19TRVRISV9QKTogRG9uJ3QgbG9vayBhdCB0b3Btb3N0IDMyIGJpdHMKCWlmIFRBUkdFVF9BUkNIMzIuCgoJKiBsb25nbG9uZy5oOiBNZXJnZSBpbiBjaGFuZ2VzIGZyb20gZ2xpYmMuCglBbHNvIGRvbid0IGNsb2JiZXIgJWcyIHJlZ2lzdGVyIGluIDMyYml0IFNQQVJDIGFzc2VtYmx5LCBzbyB0aGF0CgktbW5vLWFwcC1yZWdzIGxpYmdjYyBjYW4gYmUgY29tcGlsZWQuCgkqIGxpYmdjYzIuYzogQWRkIGRlZmluZXMgc28gdGhhdCB0aGUgdXBkYXRlZCBsb25nbG9uZy5oCgljYW4gYmUgdXNlZCBpbiBsaWJnY2MyLmEuIEFsc28sIG1ha2Ugc3VyZSBvbiBtb3N0IGFyY2hpdGVjdHVyZXMKCShhdCBsZWFzdCBvbiBhbGwgd2hpY2ggaGF2ZSBvcHRpbWl6ZWQgY29kZSBpbiBsb25nbG9uZy5oIGRlZmluZWQKCWZvcikge1NJLFd9X1RZUEVfU0laRSBpcyBzdWl0YWJsZSBmb3IgcHJlcHJvY2Vzc29yIHRlc3RzLgoKMTk5OS0xMi0wOCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAbHNkLmljLnVuaWNhbXAuYnI+CgoJKiBjb25maWcvc3BhcmMvc29sMi02NC5oOiBTYW1lIGFzIHNvbDItc2xkLTY0LmgsIGV4Y2VwdCB0aGF0CglgLW0gRU1VTEFUSU9OJyBpcyBhZGRlZCB0byBub24tZGVmYXVsdCBMSU5LX0FSQ0hfU1BFQ3MuCgkqIGNvbmZpZ3VyZS5pbjogVXNlIHNvbDItNjQuaCBpbnN0ZWFkIG9mIHNvbDItc2xkLTY0LmggaWYgbGlua2VyCglpcyBHTlUgbGQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCldlZCBEZWMgIDggMDM6NDU6NDAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBGb3IgIUJXWCwgc3ViLXNpbW9kZQoJb3V0cHV0cyByZXF1aXJlIGEgcmVnaXN0ZXIuCgoxOTk5LTEyLTA4ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKEZQQklUX0ZVTkNTLCBEUEJJVF9GVU5DUyk6IEFkZCBfc2ZfdG9fdXNpCglfZGZfdG9fdXNpLiAgUmVxdWlyZWQgYnkgc29tZSB0YXJnZXRzLCBzbyBVU19TT0ZUV0FSRV9HT0ZBU1QgY2FsbHMgdG8KCWZ1bmN0aW9ucyBsaWtlIGRwdG91bCB3aWxsIGJlIHJlc29sdmVkLgoJKGxpYmdjYzIuYSk6IE1ha2Ugc3VyZSB0aGF0IHRoZSBvYmplY3QgZmlsZXMgZnJvbSBEUEJJVCBhcmUgbmFtZWQKCWRpZmZlcmVudGx5IChwcmVmaXggYF9kcCcpIGZyb20gdGhvc2UgdGhhdCB3b3VsZCBiZSBjb21pbmcgZnJvbQoJRlBCSVQuCgoxOTk5LTEyLTA4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBsc2QuaWMudW5pY2FtcC5icj4sICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogV2hlbiB0YXJnZXQgaXMgc3BhcmMqIGFuZCB0bV9maWxlIGNvbnRhaW5zIDY0LAoJdGVzdCBmb3IgNjRiaXQgc3VwcG9ydCBpbiBhc3NlbWJsZXIuICBJZiBub3Qgc3VwcG9ydGVkLCByZW1vdmUKCXNwYXJjL3Qtc29sMi02NCBmcm9tIHRhcmdldC1kZXBlbmRlbnQgTWFrZWZpbGUgZnJhZ21lbnRzLgoJKEFTX1NQQVJDNjRfRkxBRyk6IERlZmluZSB0byB0aGUgYXNzZW1ibGVyIGZsYWcgZm9yIDY0Yml0LgoJKEhBVkVfQVNfT0ZGU0VUQUJMRV9MTzEwKTogUmV3b3JrIHRlc3QgdG8gdXNlIHRoZXNlIGZsYWdzLgoJKEhBVkVfQVNfUkVHSVNURVJfUFNFVURPX09QKTogVXNlIGNvbmZpZy5jYWNoZS4KCSogYWNjb25maWcuaCAoQVNfU1BBUkM2NF9GTEFHKTogQWRkZWQuCgkqIGNvbmZpZ3VyZSwgY29uZmlnLmluOiBSZWJ1aWx0LgoJKiBjb25maWcvc3BhcmMvc29sMi1zbGQtNjQuaDogU2FtZSBhcyBzb2wyLmgsIGlmIHdpdGhvdXQgNjRiaXQKCXN1cHBvcnQuICBVc2UgQVNfU1BBUkM2NF9GTEFHLgoKMTk5OS0xMi0wNyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoaGFyZF8zMmJpdF9tb2RlX2NsYXNzZXMpOiBNYXJrIHJlZ2lzdGVycwoJc3VpdGFibGUgZm9yIGhvbGRpbmcgT0Ztb2RlIHZhbHVlcyBzbyB0aGF0IGdjYyB3b3JrcyB3aXRoIGNvbXBsZXgKCXF1YWQgbG9uZyBkb3VibGVzLgoJKGhhcmRfNjRiaXRfbW9kZV9jbGFzc2VzKTogTGlrZXdpc2UuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHNldGhpX2RpX21lZGxvd19lbWJtZWRhbnlfcGljKTogRml4IHBhdHRlcm4KCXNvIHRoYXQgaXQgaXMgYWN0dWFsbHkgbWF0Y2hlZC4KCShzZXRoaV9kaV9tZWRsb3cpOiBMaWtld2lzZS4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBDb25zaWRlciBURm1vZGUgMC4wTAoJYXMgbGVnaXRpbWF0ZSBjb25zdGFudCBpZiAtbXZpcy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3Z0Zik6IExpa2V3aXNlLgoJKGNsZWFyX3NmKTogVXNlIGNvbnN0X2RvdWJsZV9vcGVyYW5kLgoJKGNsZWFyX3NmcCwgY2xlYXJfZGZwLCBjbGVhcl90ZiwgY2xlYXJfdGZwKTogTmV3IHBhdHRlcm5zLgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2VtaXRfZmxvYXRfbGliX2NtcCk6IE5ldyBmdW5jdGlvbi4KCSogY29uZmlnL3NwYXJjL3NwYXJjLXByb3Rvcy5oIChzcGFyY19lbWl0X2Zsb2F0X2xpYl9jbXApOiBQcm90b3R5cGUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oICgqX0xJQkNBTEwpOiBPbmx5IHVzZSBmb3IgX1FfKgoJcm91dGluZXMsIF9RcF8qIGNhbm5vdCBiZSBoYW5kbGVkIGxpa2UgdGhhdCBub3cuCgkoSU5JVF9UQVJHRVRfT1BUQUJTKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoY21wdGYpOiBBY2NlcHQgc29mdCBmbG9hdCBBUkNINjQuCgkoc2VxLCBzbmUsIHNndCwgc2dlLCBzbHQsIHNsZSwgYmVxLCBibmUsIGJndCwgYmdlLCBibHQsIGJsZSk6IENhbGwKCXNwYXJjX2VtaXRfZmxvYXRfbGliX2NtcCBpZiBBUkNINjQgYW5kIHNvZnQgZmxvYXQuCgkoZXh0ZW5kc2Z0ZjIsIGV4dGVuZGRmdGYyLCB0cnVuY3Rmc2YyLCB0cnVuY3RmZGYyLCBmbG9hdHNpdGYyLAoJZmxvYXRkaXRmMiwgZml4X3RydW5jdGZzaTIsIGZpeF90cnVuY3RmZGkyLCBhZGR0ZjMsIHN1YnRmMywgbXVsdGYzLAoJZGl2dGYzLCBzcXJ0dGYzKTogTmV3IGV4cGFuZGVycy4KCShleHRlbmRzZnRmMl9ocSwgZXh0ZW5kZGZ0ZjJfaHEsIHRydW5jdGZzZjJfaHEsIHRydW5jdGZkZjJfaHEsCglmbG9hdHNpdGYyX2hxLCBmbG9hdGRpdGYyX2hxLCBmaXhfdHJ1bmN0ZnNpMl9ocSwgZml4X3RydW5jdGZkaTJfaHEsCglhZGR0ZjNfaHEsIHN1YnRmM19ocSwgbXVsdGYzX2hxLCBkaXZ0ZjNfaHEsIHNxcnR0ZjNfaHEpOiBSZW5hbWUgZnJvbQoJbm9uLV9ocSBwYXR0ZXJucy4KCgkqIGNvbmZpZ3VyZS5pbiAoc3BhcmM2NC0qLWxpbnV4Kik6IFVzZSBwb3NpeCB0aHJlYWRzIGlmIGVuYWJsZWQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogY29uZmlnL3NwYXJjL2xpbnV4NjQuaDogRGVmYXVsdCB0byAtbWNwdT11bHRyYXNwYXJjIGlmIG5vCgktbWNwdSBpcyBnaXZlbiBhbmQgd2UncmUgZG9pbmcgNjRiaXQgY29tcGlsZXMuCgpUdWUgRGVjICA3IDE5OjIyOjA2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsb29wLmggKHN0cnVjdCBpbmR1Y3Rpb24pOiBBZGQgbXVsdGlfaW5zbl9pbmNyLgoJKiBsb29wLmMgKGJhc2ljX2luZHVjdGlvbl92YXIpOiBOZXcgbXVsdGlfaW5zbl9pbmNyIGFyZ3VtZW50LgoJU2V0IGl0IGlmIHdlIHNlYXJjaCBiYWNrIHRocm91Z2ggcHJldmlvdXMgaW5zbnMgZm9yIHRoZSBiaXYuCgkocmVjb3JkX2Jpdik6IE5ldyBtdWx0aV9pbnNuX2luY3IgYXJndW1lbnQ7IGZpbGwgaW4gc3RydWN0IGluZHVjdGlvbi4KCShzdHJlbmd0aF9yZWR1Y2UpOiBEaXNjYXJkIGFuIGl2IHdpdGggbXVsdGlwbGUgYml2cywgYW55IG9mCgl3aGljaCByZXF1aXJlIG11bHRpcGxlIGluc25zIHRvIGluY3JlbWVudC4KCjE5OTktMTItMDcgIE1hcnRpbiB2LiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGludm9rZS50ZXhpIChDIERpYWxlY3QgT3B0aW9ucyk6IFJlbW92ZSAtZmxhbmctYzl4LCBhZGQgLXN0ZAoJZG9jdW1lbnRhdGlvbi4KCjE5OTktMTItMDYgIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+CgoJKiBjb21iaW5lLmMgKGNoZWNrX3Byb21vdGVkX3N1YnJlZyk6IERvIG5vdCBjb25kaXRpb25hbGl6ZSB0aGlzCXVwb24KCVBST01PVEVfRlVOQ1RJT05fUkVUVVJOLgoKTW9uIERlYyAgNiAxNToxMjoxNCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzEpOiBJZiBubyBSRUdfREVBRCBub3RlLCBjaGVjayBmb3IKCWFuZCBoYW5kbGUgUkVHX1VOVVNFRCBub3RlIG9uIGluc24uCgoJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIGNhc2UgTFNISUZUUlQpOiBOZXcgbG9jYWwgaW5uZXJfbWFzay4gIFNldAoJaW5uZXJfbWFzayBpbnN0ZWFkIG9mIG1hc2suCgoxOTk5LTEyLTA2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGZpZWxkX2J5dGVfb2Zmc2V0KTogQXMgd2l0aCBkd2FyZm91dC5jLCBzaXplIGNhbiBiZQoJemVybyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCgoxOTk5LTEyLTA2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAocmV0dXJuX2xvc3VtX2RpKTogRml4IHR5cG8gaW4gYXNtCglvdXRwdXQgc3RyaW5nLgoKCSogbG9uZ2xvbmcuaDogRml4IGNsb2JiZXJzIGluIFNQQVJDIGFzbSBzdGF0ZW1lbnRzLgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGlucHV0X29wZXJhbmQpOiBBbGxvdyBISW1vZGUgYW5kIFFJbW9kZQoJdmFsaWQgc2V0aGkgb3BlcmF0aW9ucyB3aGVuIFRBUkdFVF9BUkNINjQuCgoJKiBjYWxscy5jIChzYXZlX2ZpeGVkX2FyZ3VtZW50X2FyZWEpOiBJZiBzYXZlX21vZGUgaXMgQkxLbW9kZSwKCWFsd2F5cyB1c2UgbW92ZV9ieV9waWVjZXMgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uLgoJKHJlc3RvcmVfZml4ZWRfYXJndW1lbnRfYXJlYSk6IExpa2V3aXNlLgoKCSogY29tYmluZS5jIChjaGVja19wcm9tb3RlZF9zdWJyZWcsIHJlY29yZF9wcm9tb3RlZF92YWx1ZSk6IE5ldwoJZnVuY3Rpb25zLgoJKGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKTogVXNlIHRoZW0gdG8gcmV0YWluIG5vbnplcm8gYW5kIHNpZ24gYml0CglpbmZvcm1hdGlvbiBhZnRlciBTVUJSRUdzIGFyZSBlbGltaW5hdGVkIGJ5IG9wdGltaXphdGlvbnMgaW4KCXRoaXMgcGFzcyBpZiBQUk9NT1RFX0ZVTkNUSU9OX1JFVFVSTi4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChBU01fREVDTEFSRV9SRUdJU1RFUl9HTE9CQUwpOiBEb2N1bWVudAoJLnJlZ2lzdGVyIGRlY2xhcmF0aW9uLiBEb24ndCB1c2UgdmFyaWFibGVzIHdpdGggX18gcHJlZml4ZXMuCgpNb24gRGVjICA2IDEyOjI0OjUyIDE5OTkgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBmb2xkLWNvbnN0LmMgKG9wdGltaXplX2JpdF9maWVsZF9jb21wYXJlKTogT25seSB1c2Ugb25lIG1vZGUKCWZvciBib3RoIFJIUyBhbmQgTEhTIGluIG5vbi1jb25zdGFudCBjYXNlLgoKMTk5OS0xMi0wNiAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGZyYW1lLmMgKHN0YXJ0X2ZkZV9zb3J0KTogT25seSBhbGxvY2F0ZSBlcnJhdGljIGFycmF5LCBpZgoJbGluZWFyIG9uZSB3YXMgYWxsb2NhdGVkLiBSZXR1cm4gYWxsb2NhdGVkIGZsYWcuCgkoZmRlX2luc2VydCk6IE9ubHkgaW5zZXJ0LCBpZiB0aGVyZSdzIGEgdmFsaWQgYXJyYXkuCgkoZmRlX2VuZF9zb3J0KTogU3BsaXQsIHNvcnQgYW5kIG1lcmdlIGlmIGxpbmVhciBhbmQgZXJyYXRpYwoJYXJyYXlzIGV4aXN0LCBlbHNlIGp1c3Qgc29ydCBsaW5lYXIgb25lLgoJKHNlYXJjaF9mZGVzKTogTmV3IGZ1bmN0aW9uLiBMaW5lYXIgc2VhcmNoIHRocm91Z2ggb3JpZ2luYWwgZmRlCglzdHJ1Y3R1cmUuCgkoZnJhbWVfaW5pdCk6IFBlcm1pdCBtdWx0aXBsZSBpbml0aWFsaXphdGlvbnMuIENvcGUgd2l0aAoJbWVtb3J5IHNob3J0YWdlcy4KCShmaW5kX2ZkZSk6IEZhbGxiYWNrIG9uIGxpbmVhciBzZWFyY2gsIGlmIGZhaWxlZCB0byBzb3J0IGFycmF5LgoJKF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvKTogT25seSBmcmVlIHNvcnRlZCBhcnJheSwgaWYgd2UKCWFsbG9jYXRlZCBpdC4KCjE5OTktMTItMDYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKE1VU1RfUEFTU19JTl9TVEFDSyk6IE5ldyBtYWNyby4KCjE5OTktMTItMDUgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjNjRfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogVXNlIGdlbl9mbHVzaGRpLgoKMTk5OS0xMi0wNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRyZWUuaCAoc3BlY2lhbF9mdW5jdGlvbl9wKTogRGVjbGFyZS4KCSogY2FsbHMuYyAoc3BlY2lhbF9mdW5jdGlvbl9wKTogTWFrZSBpdCBnbG9iYWwuICBEb24ndCB0YWtlIGBuYW1lJwoJYXMgYSBwYXJhbWV0ZXIuICBGaXggdHlwbyBpbiAxOTk5LTExLTI4IGNoYW5nZS4KCShleHBhbmRfY2FsKTogQWRqdXN0LgoKMTk5OS0xMi0wNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRyZWUuZGVmIChFWFBSX1dJVEhfRklMRV9MT0NBVElPTik6IEZpeCBjb21tZW50IGZvcm1hdHRpbmcuCgkqIHRyZWUuaCAoRVhQUl9XRkxfRklMRU5BTUUpOiBEZWZpbmUgaW4gdGVybXMgb2YKCUVYUFJfV0ZMX0ZJTEVOQU1FX05PREUuCgkoRVhQUl9XRkxfRklMRU5BTUVfTk9ERSk6IFVzZSB0aGUgc2Vjb25kIG9wZXJhbmQgc2xvdCByYXRoZXIgdGhhbgoJdGhlIFRSRUVfQ0hBSU4uCgkqIHByaW50LXRyZWUuYyAocHJpbnRfbm90ZSk6IFByaW50IFRSRUVfUFJJVkFURSBhbmQKCVRSRUVfUFJPVEVDVEVELgoKCSogZHdhcmYyb3V0LmMgKGFkZF9hYnN0cmFjdF9vcmlnaW5fYXR0cmlidXRlKTogRG9uJ3QgYWJvcnQgd2hlbgoJdGhlIG9yaWdpbmFsIGRpZSBjYW5ub3QgYmUgZm91bmQuCgoJKiB2YXJyYXkuaCAodmFycmF5X2hlYWRfdGFnKTogQWRkIGVsZW1lbnRzX3VzZWQuCgkoVkFSUkFZX1BVU0gpOiBOZXcgbWFjcm8uCgkoVkFSUkFZX1BPUCk6IExpa2V3aXNlLgoJKFZBUlJBWV9UT1ApOiBMaWtld2lzZS4KCUFkZCB2YXJpYW50cyBvZiBWQVJSQVlfUFVTSCBhbmQgVkFSUkFZX1BPUCBmb3IgYWxsIHZhcnJheSBlbGVtZW50Cgl0eXBlcy4KCSogdmFycmF5LmMgKHZhcnJheV9pbml0KTogSW5pdGlhbGl6ZSBlbGVtZW50c191c2VkLgoJKiBNYWtlZmlsZS5pbiAoQkFTSUNfQkxPQ0tfSCk6IEFkZCB2YXJyYXkuaC4KCShJTlRFR1JBVEVfSCk6IE5ldyB2YXJpYWJsZS4KCShpbnRlZ3JhdGUubyk6IERlcGVuZCBvbiBJTlRFR1JBVEVfSC4KCSh1bnJvbGwubyk6IExpa2V3aXNlLgoKCSogZnVuY3Rpb24uaCAoaW5zZXJ0X2Jsb2NrX2FmdGVyX25vdGUpOiBEZWNsYXJlLgoJKiBmdW5jdGlvbi5jIChpbnNlcnRfYmxvY2tfYWZ0ZXJfbm90ZSk6IFNwbGl0IG91dCBmcm9tIC4uLgoJKHJldHJvZml0X2Jsb2NrKTogLi4uIGhlcmUuCgoJKiBzdG10LmMgKGV4cGFuZF9maXh1cCk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgpTYXQgRGVjICA0IDE0OjEzOjM4IE1FVCAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiByZWdtb3ZlLmMgKGNvcHlfc3JjX3RvX2Rlc3QpOiBSZW1vdmUgbG9vcF9kZXB0aCBwYXJhbWV0ZXIuCgkob3B0aW1pemVfcmVnX2NvcHlfMSk6IFJlbW92ZSBSRUdfTl9SRUZTIHVwZGF0aW5nIGNvZGUuCgkob3B0aW1pemVfcmVnX2NvcHlfMiwgY29weV9zcmNfdG9fZGVzdCwgZml4dXBfbWF0Y2hfMik6IExpa2V3aXNlLgoJKHJlZ21vdmVfb3B0aW1pemUsIGZpeHVwX21hdGNoXzEpOiBMaWtld2lzZS4KCjE5OTktMTItMDUgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGZsb3cuYyAoZmxvd19sb29wc19kdW1wKTogQWRkIG1pc3NpbmcgYXJndW1lbnQgd2hlbiBjYWxsaW5nCglmbG93X2xvb3BfbmVzdGVkX3AuCgoxOTk5LTEyLTA0ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgkgICAgR3JlZyBNY0dhcnkgIDxna21AZ251Lm9yZz4KCgkqIGMtY29tbW9uLmMgKGVudW0gYXR0cnMpOiBBZGQgQV9OT19MSU1JVF9TVEFDSy4KCShpbml0X2F0dHJpYnV0ZXMpOiBBZGQgQV9OT19MSU1JVF9TVEFDSy4KCShkZWNsX2F0dHJpYnV0ZXMpOiBIYW5kbGUgQV9OT19MSU1JVF9TVEFDSy4KCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEhhbmRsZSBERUNMX05PX0xJTUlUX1NUQUNLLgoJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSkgWyFIQVZFX2FsbG9jYXRlX3N0YWNrXToKCUhhbmRsZSBzdGFjayBib3VuZHMgY2hlY2tpbmcuCgkqIGZsYWdzLmggKGZsYWdfc3RhY2tfY2hlY2spOiBVc2UgdGhlIHdvcmQgJ3Byb2JlJyByYXRoZXIgdGhhbgoJJ2NoZWNrJywgYmVjYXVzZSB0aGUgZmxhZyBkb2Vzbid0IGFjdHVhbGx5IGNhdXNlIGFueSBjaGVja2luZyB0bwoJYmUgZG9uZS4KCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogU2V0CgljdXJyZW50X2Z1bmN0aW9uX2xpbWl0X3N0YWNrLgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBBZGQgbGltaXRfc3RhY2suCgkoY3VycmVudF9mdW5jdGlvbl9saW1pdF9zdGFjayk6IERlZmluZS4KCSogaW52b2tlLnRleGkgKENvZGUgR2VuIE9wdGlvbnMpOiBEb2N1bWVudCBuZXcgb3B0aW9ucy4KCSogcnRsLmg6IERlY2xhcmUgc3RhY2tfbGltaXRfcnR4LgoJKiB0b3BsZXYuYyAoc3RhY2tfbGltaXRfcnR4KTogTmV3IHZhcmlhYmxlLgoJKGRlY29kZV9mX29wdGlvbik6IEhhbmRsZSBuZXcgb3B0aW9ucyAtZnN0YWNrLWxpbWl0LXJlZ2lzdGVyPVJFRywKCS1mc3RhY2stbGltaXQtc3ltYm9sPUlERU5ULCAtZm5vLXN0YWNrLWxpbWl0LgoJKG1haW4pOiBBZGQgc3RhY2tfbGltaXRfcnR4IGFzIEdDIHJvb3QuCgkqIHRyZWUuaCAoREVDTF9OT19MSU1JVF9TVEFDSyk6IE5ldyBtYWNyby4KCShzdHJ1Y3QgdHJlZV9kZWNsKTogTmV3IG1lbWJlciBub19saW1pdF9zdGFjay4KCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKHJzNjAwMF9hbGxvY2F0ZV9zdGFja19zcGFjZSk6IEhhbmRsZQoJc3RhY2tfbGltaXRfcnR4LgoJKiBjb25maWcvcnM2MDAwL3JzNjAwMC5tZCAoYWxsb2NhdGVfc3RhY2spOiBIYW5kbGUgc3RhY2tfbGltaXRfcnR4LgoJKGNvbmRpdGlvbmFsX3RyYXArMSk6IEdldCBuZXcgbW5lbW9uaWMgY29ycmVjdC4KCShjb25kaXRpb25hbF90cmFwKzIpOiBOZXcgcGF0dGVybiBmb3IgREltb2RlIHRyYXBzLgoKCSogY29uZmlnL202OGsvbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBIYW5kbGUKCXN0YWNrX2xpbWl0X3J0eC4KCSogY29uZmlnL202OGsvbTY4ay5tZCAodHJhcCk6IE5ldyBpbnNuLgoJKGNvbmRpdGlvbmFsX3RyYXApOiBOZXcgaW5zbi4KCSogbWQudGV4aSAoU3RhbmRhcmQgTmFtZXMpOiBEb2N1bWVudCBgdHJhcCcgYW5kCglgY29uZGl0aW9uYWxfdHJhcCcuCgkqIG9wdGFicy5jIChnZW5fY29uZF90cmFwKTogVXNlIHN0YXJ0X3NlcXVlbmNlKCkvZW5kX3NlcXVlbmNlKCkKCXNvIGEgY2MwIHNldHRlciBkb2Vzbid0IGdldCBlbWl0dGVkIGF0IHNvbWUgcmFuZG9tIHBsYWNlIGluIHRoZQoJZnVuY3Rpb24uCgoJKiBjb25maWcvaTk2MC9pOTYwLm1kICh0cmFwKTogTmV3IGluc24uCgkoY29uZGl0aW9uYWxfdHJhcCk6IE5ldyBleHBhbmRlci4KCShjb25kaXRpb25hbF90cmFwKzEsIGNvbmRpdGlvbmFsX3RyYXArMik6IE5ldyBpbnNucyBmb3Igc2lnbmVkCglhbmQgdW5zaWduZWQgY2FzZXMuCgkqIGNvbmZpZy9pOTYwL2k5NjAuYyAoaTk2MF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFVzZQoJU1RBUlRJTkdfRlJBTUVfT0ZGU0VULiAgSGFuZGxlIHN0YWNrX2xpbWl0X3J0eC4KClRodSBEZWMgIDIgMjE6MjI6NDUgMTk5OSAgR3JlZyBNY0dhcnkgIDxna21AZ251Lm9yZz4KCQkJICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgoJKiBmbGFncy5oICh3YXJuX3BhZGRlZCwgd2Fybl9wYWNrZWQpOiBBZGQgZ2xvYmFsIHZhciBkZWNscy4KCSogdG9wbGV2LmMgKHdhcm5fcGFkZGVkLCB3YXJuX3BhY2tlZCk6IEFkZCBnbG9iYWwgdmFyIGRlZm5zLgoJKFdfb3B0aW9ucyk6IEFkZCB3YXJuaW5ncyBgLVdwYWNrZWQnIGFuZCBgLVdwYWRkZWQnLgoJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfcmVjb3JkKTogQWRkIGxvY2FsIHZhcmlhYmxlIGB0eXBlJwoJdG8gaG9sZCBvZnRlbi11c2VkIFRSRUVfVFlQRSAoZmllbGQpLiAgQWRkIGxvY2FsIHZhcmlhYmxlCglgdW5wYWNrZWRfYWxpZ24nIHRvIGhvbGQgYWxpZ25tZW50IHRoYXQgd291bGQgYmUgaW4gZm9yY2UKCWlmIG5vIGBwYWNrZWQnIGF0dHJpYnV0ZSB3ZXJlIHByZXNlbnQuICBXYXJuIGlmIGBwYWNrZWQnIGF0dHJpYnV0ZQoJaXMgdW5uZWNlc3NhcnksIG9yIGV2ZW4gaGFybWZ1bC4gIFdhcm4gd2hlbiBnY2MgaW5zZXJ0cyBwYWRkaW5nCgl0byBzYXRpc2Z5IGFsaWdubWVudCByZXF1aXJlbWVudHMgb2YgbWVtYmVycy4gIFVzZSBOVUxMX1RSRUUKCXdoZW4gY2hlY2tpbmcgd2hldGhlciB2YXJfc2l6ZSBpcyBzZXQuCgkqIGludm9rZS50ZXhpOiBEb2N1bWVudCBuZXcgZmxhZ3MuCgoxOTk5LTEyLTAzICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogZnJhbWUuYyAoZmRlX3NwbGl0KTogUmVpbXBsZW1lbnQgdG8gYXZvaWQgdmFyaWFibGUgc2l6ZWQgYXJyYXkuCgpUaHUgRGVjICAyIDE4OjU5OjQ4IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNvbWJpbmUuYyAodHJ5X2NvbWJpbmUpOiBCZWZvcmUgZml4aW5nIHVwIExPR19MSU5LUyBmb3IgdGhlCglpM19zdWJzdF9pbnRvX2kyIGNhc2UsIGNoZWNrIHRoYXQgR0VUX0NPREUgKFBBVFRFUk4gKGkyKSkgPT0gUEFSQUxMRUwuCgoxOTk5LTEyLTAyICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGludm9rZS50ZXhpOiBEb2N1bWVudCB0aGUgbWlwcyBvcHRpb24gLW1uby1jcnQwCgoxOTk5LTEyLTAyICBNaWtlIEthcnIgIDxta2FyckBtYXRod29ya3MuY29tPgoKCSogY2NjcC5jIChhcmdkYXRhKTogQWRkZWQgZnJlZV9wdHIgbWVtYmVyLgoJKG1hY3JvZXhwYW5kKTogSW5pdGlhbGl6ZSBmcmVlX3B0ciBvZiBlYWNoIGFyZ3VtZW50LiBXaGVuIGFuCglhcmd1bWVudCdzIGJ1ZmZlcnMgYXJlIGZyZWVkLCBpZiB0aGUgYXJndW1lbnQncyBmcmVlX3B0ciBjb3JyZXNwb25kcwoJdG8gYSBidWZmZXIgb24gdGhlIGlucHV0IHN0YWNrLCB0aGVuIHJldHVybiB0aGUgZnJlZV9wdHIgdG8gdGhhdCBzdGFjawoJZnJhbWUsIG90aGVyd2lzZSwgZnJlZSBpdC4KCShtYWNhcmcpOiBJZiBhbiBhcmd1bWVudCBiZWdpbnMgYW5kIGVuZHMgb24gdGhlIHNhbWUgaW5wdXQgc3RhY2sgbGV2ZWwsCgl0aGVuIHRyYW5zZmVyIHRoZSBmcmVlX3B0ciBvZiB0aGF0IGJ1ZmZlciB0byB0aGUgYXJndW1lbnQgaW4gY2FzZQoJdGhlIHN0YWNrIGlzIHBvcHBlZCBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgYSBzdWJzZXF1ZW50IGFyZ3VtZW50LgoKMTk5OS0xMi0wMiAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKG5vdGVfcmVnX3N0b3JlZCk6IE5ldyBmdW5jdGlvbi4KCShzdHJ1Y3Qgbm90ZV9yZWdfc3RvcmVkX2FyZyk6IE5ldyBzdHJ1Y3R1cmUuCgkodHJ5X2NvcHlfcHJvcCk6IENoYW5nZSB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZTsgb25seSByZXBsYWNlIHdpdGhpbgoJb25lIGV4dGVuZGVkIGJhc2ljIGJsb2NrIGFuZCBzdG9wIHJlcGxhY2luZyBpZiBhIHN0b3JlIHRvIHRoZQoJcmVwbGFjZW1lbnQgcmVnIGlzIHNlZW4uCgoxOTk5LTEyLTAyICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2ZwLWJpdC5jOiBJbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgdGhlIE5BTgoJY29uc3RhbnRzLgoKCSogYy1sZXguYyAoY2hlY2tfbmV3bGluZSk6IFBhc3MgcHJhZ21hX2dldGMgYW5kIHByYWdtYV91bmdldGMKCXRvIEhBTkRMRV9QUkFHTUEuCgpXZWQgRGVjICAxIDE4OjE2OjM4IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKGV4dGVuZD9mP2YyKTogRm9yY2UgdGhlIGlucHV0IGludG8gYSByZWdpc3Rlciwgbm90Cgl0aGUgb3V0cHV0LgoKMTk5OS0xMi0wMSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdnNmX2NvbnN0X2ludHJlZyk6IEFkZCBjb25zdHJhaW50cyBmb3IKCXJlZ2NsYXNzJyBzYWtlLgoJKG1vdmRmX2NvbnN0X2ludHJlZ19zcDMyKTogTGlrZXdpc2UuIFByZWZlciB0aGUgbWVtb3J5IGxvYWQKCWFsdGVybmF0aXZlIGJlY2F1c2Ugc2V0dGluZyB1cCA2NGJpdCBjb25zdGFudCBpcyB1c3VhbGx5IGNvc3RseSwKCWVzcGVjaWFsbHkgd2hlbiByZWxvYWQgaXMgaW4gcHJvZ3Jlc3Mgb3IgY29tcGxldGVkLgoJKG1vdmRmX2NvbnN0X2ludHJlZ19zcDY0KTogTGlrZXdpc2UuCgkobW92ZGZfY29uc3RfaW50cmVnIHNwbGl0KTogRml4IGJ1aWxkaW5nIHVwIGNvbnN0YW50cyB3aGVuCglIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzIDY0IHlldCBsb25nIGlzIDMyYml0LgoKV2VkIERlYyAgMSAxNjo1MToyMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb21iaW5lLmMgKGlmX3RoZW5fZWxzZV9jb25kKTogVXNlIGNvbnN0X3RydWVfcnR4IGluc3RlYWQgb2YKCWNvbnN0MV9ydHggZm9yIHJldHVybiB2YWx1ZXMgaW4gRVEvTkUgY29tcGFyaXNvbiBhZ2FpbnN0IChjb25zdF9pbnQgMCkKCWNhc2UuCgoJKiBtbjEwMzAwLmMgKFJFR19TQVZFX0JZVEVTKTogQWxsb2NhdGUgc3BhY2UgZm9yIEFNMzMgcmVnaXN0ZXJzLgoJKGFzbV9maWxlX3N0YXJ0KTogRW1pdCAuYW0zMyBpbnRvIGFzc2VtYmx5IGZpbGUgd2hlbiBjb21waWxpbmcgZm9yCgl0aGUgQU0zMy4KCShwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBIYW5kbGUgUE9TVF9JTkMgYWRkcmVzc2VzLgoJKGNhbl91c2VfcmV0dXJuX2luc24sIGluaXRpYWxfb2Zmc2V0KTogQ2hlY2sgQU0zMyByZWdpc3RlcnMgdG9vLgoJKGV4cGFuZF9wcm9sb2d1ZSk6IENoZWNrICYgc2F2ZSBBTTMzIHJlZ2lzdGVycyB0b28uCgkoZXhwYW5kX2VwaWxvZ3VlKTogU2ltaWxhcmx5LgoJKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBIYW5kbGUgQU0zMyBzcGVjaWZpYyBzZWNvbmRhcnkgcmVsb2Fkcy4KCShvdXRwdXRfdHN0KTogRW1pdCBlZmZpY2llbnQgY29kZSBmb3IgdGhlIEFNMzMgdG9vLgoJKiBtbjEwMzAwLmggKENQUF9TUEVDLCBUQVJHRVRfQU0zMyk6IERlZmluZS4KCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1hbTMzIHN3aXRjaC4KCShGSVJTVF9QU0VVRE9fUkVHSVNURVIpOiBIYW5kbGUgbmV3IEFNMzMgcmVnaXN0ZXJzLgoJKEZJWEVEX1JFR0lTVEVSUywgQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IExpa2V3aXNlLgoJKFJFR19BTExPQ19PUkRFUiwgQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBMaWtld2lzZS4KCShIQVJEX1JFR05PX01PREVfT0ssIE1PREVTX1RJRUFCTEVfUCk6IExpa2V3aXNlLgoJKGVudW0gcmVnX2NsYXNzLCBSRUdfQ0xBU1NfTkFNRVMpOiBMaWtld2lzZS4KCShSRUdfQ0xBU1NfQ09OVEVOVFMsIFJFR05PX1JFR19DTEFTUyk6IExpa2V3aXNlLgoJKElOREVYX1JFR19DTEFTUywgUkVHX0NMQVNTX0ZST01fTEVUVEVSKTogTGlrZXdpc2UuCgkoUkVHTk9fT0tfRk9SX0lOREVYX1AsIFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBMaWtld2lzZS4KCShQUkVGRVJSRURfT1VUUFVUX1JFTE9BRF9DTEFTUywgTElNSVRfUkVMT0FEX0NMQVNTKTogTGlrZXdpc2UuCgkoUkVHSVNURVJfTU9WRV9DT1NULCBSRUdJU1RFUl9OQU1FUyk6IExpa2V3aXNlLgoJKEhBVkVfUE9TVF9JTkNSRU1FTlQpOiBEZWZpbmUuCgkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQWxsb3cgUE9TVF9JTkMgYWRkcmVzc2VzIGZvciB0aGUgQU0zMy4KCShHT19JRl9NT0RFX0RFUEVOREVOVF9BRERSRVNTKTogUE9TVF9JTkMgaXMgYSBtb2RlIGRlcGVuZGVudCBhZGRyZXNzLgoJKiBtbjEwMzAwLm1kIChtb3ZxaSwgbW92aGksIGFkZHNpLCBzdWJzaSk6IEFkZCBBTTMzIHZhcmlhbnRzLgoJKG11bHNpLCBhbmRzaSwgaW9yc2ksIHhvcnNpLCBub3RzaSk6IExpa2V3aXNlLgoJKGFzaGlmdHNpLCBsc2hpZnRydHNpLCBhc2hpZnRydHNpKTogTGlrZXdpc2UuCgkoemVyb19leHRlbmQgdG8gU0kgZnJvbSBRSS9ISSk6IExpa2V3aXNlLgoJKHNpZ25fZXh0ZW5kIHRvIFNJIGZyb20gUUkvSEkpOiBMaWtld2lzZS4KCShtdWxzaWRpMywgdW11bHNpZGkzKTogTmV3IHBhdHRlcm5zIGZvciB0aGUgQU0zMy4KCSh0c3RzaSB3aXRoIHplcm8gZXh0ZW5zaW9uIGZyb20gUUkvSEkpOiBBZGQgQU0zMyB2YXJpYW50cy4KCShtb3ZzaSwgbW92c2YsIG1vdmRpLCBtb3ZkZik6IEdlbmVyYXRlIGVmZmljaWVudCBjb2RlIGZvciB0aGUgQU0zMyB0b28uCgkocmV0dXJuX2ludGVybmFsX3JlZ3MsIHN0b3JlX21vdm0pOiBIYW5kbGUgbmV3IEFNMzMgcmVnaXN0ZXJzLgoJKiB0LW1uMTAzMDAgKE1VTFRJTElCX09QVElPTlMsIE1VTFRJTElCX0RJUk5BTUVTKTogRGVmaW5lLgoJKExJQkdDQywgSU5TVEFMTF9MSUJHQ0MpOiBMaWtld2lzZS4KCSogaW52b2tlLnRleGk6IERvY3VtZW50IG5ldyBmbGFncy4KCkZyaSBOb3YgMjYgMTA6NTk6MTIgQ0VUIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKGFkZHNpM19jYyk6IEFkZCAiYmluYXJ5X29wZXJhdG9yX29rIiB0byB0aGUgY29uZGl0aW9uLgoJKGFkZHNpM19jYXJyeSk6IExpa2V3aXNlLgoJKHNiYnNpM19jYyk6IEFkZCAiYmluYXJ5X29wZXJhdG9yX29rIiB0byB0aGUgY29uZGl0aW9uLgoJKHNiYnNpM19jYXJyeSk6IExpa2V3aXNlLgoJKG11bHNpMyk6IFJld3JpdGUgdG8gZXhwYW5kZXIsIGVuc3VyZSB0aGF0IG9ubHkgb25lIG9wZXJhbmQgaXMgbWVtb3J5LgoJKG11bGhpMyk6IExpa2V3aXNlLgoJKHRlc3Q/aV8xKTogRW5zdXJlIHRoYXQgb25seSBvbmUgb3BlcmFuZCBpcyBtZW1vcnkuCgkoY29uZGl0aW9uYWwgbW92ZSBwYXR0ZXJucyk6IGxpa2V3aXNlLgoJKHNoaWZ0IGFuZCByb3RhdGUgcGF0dGVybnMpOiBSZXdyaXRlIHRvIGV4cGFuZGVyLCBhZGQKCSJiaW5hcnlfb3BlcmF0b3Jfb2siIHRvIHRoZSBjb25kaXRpb24uCgoJKiBpMzg2Lm1kIChRSW1vZGUgcGF0dGVybnMpOiBSZW1vdmUgJyonIGJlZm9yZSB0aGUgJ3InIGNvbnN0cmFpbnRzLgoJKiBpMzg2LmggKHByb2Nlc29yX2Nvc3RzKTogQWRkIG1vdnpibF9sb2FkIGZpZWxkLgoJKEhBUkRfUkVHTk9fTU9ERV9PSyk6IEFjY2VwdCBRSW1vZGUgb24gbm9uIFBBUlRJQUxfUkVHSVNURVJfU1RBTEwgaW4KCW5vbi1RIHJlZ2lzdGVycywgYWNjZXB0IERJbW9kZSByZWdpc3RlcnMgYW55d2hlcmUuCgkoUV9DTEFTU19QKTogTmV3LgoJKE1FTU9SWV9NT1ZFX0NPU1QpOiBDYWxjdWxhdGUgUUltb2RlIG1vdmVzIGNvcnJlY3RseS4KCSogaTM4Ni5jICgqX2Nvc3QpOiBTZXQgdmFsdWUgZm9yIG1vdnhibF9sb2FkIGZpZWxkLgoKCSogKGFkZHNpKTogTmV3IGFkZCB0byBsZWEgc3BsaXR0ZXIuCgkoYXNobHNpKTogTGlrZXdpc2UuCgkobGVhIHRvIGFkZC9zaGlmdCBwZWVwMik6IE5ldy4KCjE5OTktMTItMDEgIE1hcmsgU2FsdGVyIDxtc2FsdGVyQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9lbGYuaCAoU1RBUlRGSUxFX1NQRUMpOiBBZGQgbm8tY3J0MC4KCSogY29uZmlnL21pcHMvZWxmNjQuaCAoU1RBUlRGSUxFX1NQRUMpOiBBZGQgbm8tY3J0MC4KCSogY29uZmlnL21pcHMvbWlwcy5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgbm8tY3J0MC4KClR1ZSBOb3YgMzAgMTU6MjA6NTIgTUVUIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYuYyAoaXg4Nl9leHBhbmRfbW92ZSk6IE5ldmVyIGFkZCBjbG9iYmVycyB0byBtb3ZlIHBhdHRlcm5zLgoJKiBpMzg2Lm1kIChtb3ZzaV94b3IpOiBOZXcuCgkobW92c2lfb3IpOiBOZXcuCgkobW92c2lfMSwgbW92aGlfMSwgbW92cWlfMSk6IFJlbW92ZS4KCShtb3ZzaV8yKTogUmVuYW1lIHRvIG1vdnNpXzEuCgkobW92aGlfMik6IFJlbmFtZSB0byBtb3ZoaV8xLgoJKG1vdnFpXzIpOiBSZW5hbWUgdG8gbW92cWlfMS4KCShtb3ZkaV8xKTogUmVtb3ZlOyByZW1vdmUgc3BsaXR0ZXIuCgkobW92ZGlfMik6IFJlbmFtZSB0byBtb3ZkaV8xLgoJKGRpdm1vZHNpNCBzcGxpdHRlcik6IERvIG5vdCBlbWl0IGNsb2JiZXJzIGZvciBtb3ZlIHBhdHRlcm5zLgoJKGxvbmcgbW92ZSBwZWVwMik6IERvIG5vdCBjcmVhdGUgUUkgb3IgSEkgbW9kZSBtb3YwcwoJKG1vdiAtMSxyZWcgLT4gb3IgcGVlcDJzKTogRW5hYmxlIGFnYWluLCByZXdyaXRlIHRvIHNpbmdsZSBwZWVwaG9sZS4KCgkqIGkzODYubWQgKHplcm9fZXh0ZW5kP2k/aTIpOiBSZXdyaXRlIHRvIGV4cGFuZGVyczsgbmV3IHBhdHRlcm5zLAoJcmV3cml0ZSBzcGxpdHRlcnMuCgoJKiBpMzg2Lm1kIChuZWc/ZjJfaWYpOiBTcGxpdCAiciIgYW5kICJmIiB0byBzZXBhcmF0ZSBhbHRlcm5hdGl2ZXMuCgkoYWJzP2YyX2lmKTogTGlrZXdpc2UuCgoxOTk5LTExLTMwICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogZ2djLmggKGdnY190ZXN0X2FuZF9zZXRfbWFyayk6IE5ldyBtYWNyby4KCShnZ2NfbWFya19ydHgpOiBVc2UgZ2djX3Rlc3RfYW5kX3NldF9tYXJrLgoJKGdnY19tYXJrX3RyZWUpOiBMaWtld2lzZS4KCShnZ2NfbWFya19ydHZlYyk6IExpa2V3aXNlLgoJKiBnZ2MtY29tbW9uLmMgKGdnY19tYXJrX3J0eF9jaGlsZHJlbik6IFJlZHVjZSByZWN1cnNpb24uCgoxOTk5LTExLTMwICBKYXNvbiBNZXJyaWxsICA8amFzb25AY2FzZXkuY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChzY29wZV9kaWVfZm9yKTogT25seSBoYW5kbGUgdHlwZXMuICBPbmx5IHNlYXJjaCBmb3IKCWNvbnRhaW5pbmcgdHlwZXMuCgkoZGVjbF9zY29wZV90YWJsZSk6IEp1c3QgYW4gYXJyYXkgb2YgdHJlZXMgbm93LgoJKHB1c2hfZGVjbF9zY29wZSk6IFNpbXBsaWZ5LgoJKGR3YXJmMm91dF9pbml0KTogQWRqdXN0LgoJKGxvY2FsX3Njb3BlX3ApOiBOZXcgZm4uCgkoZ2VuX2lubGluZWRfZW51bWVyYXRpb25fdHlwZV9kaWUpOiBEb24ndCBjYWxsIHNjb3BlX2RpZV9mb3IuCgkoZ2VuX2lubGluZWRfdW5pb25fdHlwZV9kaWUsIGdlbl9pbmxpbmVkX3N0cnVjdHVyZV90eXBlX2RpZSk6IExpa2V3aXNlLgoJKGdlbl90eXBlZGVmX2RpZSk6IExpa2V3aXNlLgoJKGdlbl9sZXhpY2FsX2Jsb2NrX2RpZSk6IERvbid0IGNhbGwgcHVzaC9wb3BfZGVjbF9zY29wZS4KCShnZW5faW5saW5lZF9zdWJyb3V0aW5lX2RpZSk6IExpa2V3aXNlLgoJKGdlbl9hYnN0cmFjdF9mdW5jdGlvbik6IFNldCBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgdGVtcG9yYXJpbHkuCgkoZ2VuX3N1YnByb2dyYW1fZGllKTogRG9uJ3QgY2hlY2sgREVDTF9BQlNUUkFDVCB0byBzZXQgZGVjbGFyYXRpb24uCglIYW5kbGUgYmxvY2sgZXh0ZXJuIGRlY2xhcmF0aW9ucy4gIERvbid0IGNhbGwgcHVzaC9wb3BfZGVjbF9zY29wZS4KCShnZW5fZGVjbF9kaWUpOiBGaXggbG9naWMgZm9yIGJsb2NrIGV4dGVybnMuCgoxOTk5LTExLTMwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjYWxscy5jIChzcGVjaWFsX2Z1bmN0aW9uX3ApOiBSZW1vdmUgYHJlYWxsb2MnIGFuZCBhZGQgYHN0cmR1cCcKCXRvIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB3aGljaCBoYXZlIGF0dHJpYnV0ZSBtYWxsb2MgYnkgZGVmYXVsdC4KCjE5OTktMTEtMzAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogV2l0aCAtV3RyYWRpdGlvbmFsLCB3aGVuIHRoZSBBTlNJIHR5cGUgb2YgYW4KCWludGVnZXIgY29uc3RhbnQgZG9lcyBub3QgbWF0Y2ggdGhlIHRyYWRpdGlvbmFsIHR5cGUsIGxpbWl0IHRoZQoJd2FybmluZ3MgdG8gY2FzZXMgd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIHR5cGUgaXMgdGVuLgoKCSogaW52b2tlLnRleGkgKC1XdHJhZGl0aW9uYWwpOiBEb2N1bWVudCBpdC4KClR1ZSBOb3YgMzAgMTU6MTg6MzUgMTk5OSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogY29tYmluZS5jICh0cnlfY29tYmluZSk6IE9ubHkgcGFzcyBTRVQgb3IgQ0xPQkJFUiB0byBTRVRfREVTVAoJKiByczYwMDAubWQ6IE9ubHkgYWNjZXNzIGEgQ09OU1RfSU5UIHdpdGggSU5UVkFMCgpUdWUgTm92IDMwIDE0OjIxOjAwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsY20uYyAoY29tcHV0ZV9sYXRlcmluKTogQ2FzdCBiYi0+YXV4IHRvIHNpemVfdCBub3QgaW50LgoJKGNvbXB1dGVfbmVhcmVyb3V0KTogTGlrZXdpc2UuCgkqIGdnYy1wYWdlLmMgKGdnY19wYWdlX3ByaW50X3N0YXRpc3RpY3MpOiBFeHBsaWNpdGx5IGNhc3QKCXNpemVfdCB0byB1bnNpZ25lZCBsb25nIGZvciBmb3JtYXR0aW5nLgoKMTk5OS0xMS0zMCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoRklYRURfUkVHSVNURVJTLCBDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6CglBbGxvdyB0aGUgdXNlciB0byBvdmVycmlkZSBjYWxsLXVzZWQvZml4ZWQgc3RhdGUgb2YgJWcyLTUKCXJlZ2lzdGVycyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAlZzQgZm9yCgllbWJlZGRlZCBtb2RlbCkuCgkoUkVHX0xFQUZfQUxMT0NfT1JERVIpOiBNb3ZlICVnMSBhbmQgJWc0LTcgcmVnaXN0ZXJzIHRvIGZyb250LCBzbyB0aGF0Cgl0aGVyZSBpcyBhIGhpZ2hlciBjaGFuY2Ugb2YgaGF2aW5nIGEgbGVhZiBmdW5jdGlvbi4KCShNQUNISU5FX1NUQVRFX1NBVkUsIE1BQ0hJTkVfU1RBVEVfUkVTVE9SRSk6IFByb3ZpZGUgc2VwYXJhdGUgbWFjcm9zCglmb3IgQVJDSDY0IHdoaWNoIGhhcyAlY2NyIHJlZ2lzdGVyLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHJldHVybl9sb3N1bV9zaSwgcmV0dXJuX2xvc3VtX2RpKTogTmV3CglwYXR0ZXJucy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGVsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IEZvciB0aGUgcmV0dXJuCglpbnNuIGFjY2VwdCBpbnRvIGRlbGF5IHNsb3QgYW55IGluc24gd2hpY2ggZG9lcyBub3QgdXNlICVbb2xdCglyZWdpc3RlcnMuICBBY2NlcHQgc29tZSBMT19TVU0gYW5kIHNoaWZ0IGxlZnQgYnkgMSBmb3IgdGhlIG5vcm1hbAoJcmVzdG9yZSBjYXNlLgoJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IExpa2V3aXNlLgoJKGVwaWxvZ3VlX3JlbnVtYmVyKTogQWRkZWQgYXJndW1lbnQgd2hpY2ggaW5oaWJpdHMgYW55IHJlbnVtYmVyaW5nCglhbmQganVzdCB0ZXN0cyBpZiB0aGUgcnR4IGRvZXMgbm90IHVzZSBhbnkgJVtvbF0gcmVnaXN0ZXJzLgoJKG91dHB1dF9yZXR1cm4pOiBSZWZsZWN0IGFib3ZlIGNoYW5nZS4KCjE5OTktMTEtMzAgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX3ZhX2FyZyk6IEZpeCBzcGFyYzY0IHZhX2FyZwoJYWdncmVnYXRlIHBhc3NpbmcgZm9yIHNpemVzIDw9IDE2IGJ5dGVzLgoKMTk5OS0xMS0zMCAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBjc2UuYyAoRklYRURfUkVHTk9fUCk6IERlbGV0ZSB0ZXN0cyBmb3IgT1ZFUkxBUFBJTkdfUkVHTk9fUC4KCSogZ2xvYmFsLmMgKGdsb2JhbF9hbGxvYyk6IERlbGV0ZSBbT1ZFUkxBUFBJTkdfUkVHTk9fUF0gY29kZS4KCSogcmVsb2FkLmMgKGZpbmRfZHVtbXlfcmVsb2FkKTogTGlrZXdpc2UuCgkoZmluZF9lcXVpdl9yZWcpOiBMaWtld2lzZTsgYWxzbyBmb3IgSU5TTl9DTE9CQkVSU19SRUdOT19QLgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBMaWtld2lzZS4KCSogc3R1cGlkLmMgKHN0dXBpZF9maW5kX3JlZyk6IExpa2V3aXNlLgoJKiB0bS50ZXhpIChPYnNvbGV0ZSBSZWdpc3RlciBNYWNyb3MpOiBEZWxldGUgc2VjdGlvbi4KCSogZ21pY3JvLmg6IFJlbW92ZSBhbGwgdHJhY2VzIG9mIHRoZSB0d28gbWFjcm9zLgoJKiBpMzg2Lmg6IExpa2V3aXNlLgoJKiBtODhrLmg6IExpa2V3aXNlLgoJKiBtaXBzLmg6IExpa2V3aXNlLgoKMTk5OS0xMS0zMCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmggKE1BU0tfRkFTVEVSX1NUUlVDVFMsIFRBUkdFVF9GQVNURVJfU1RSVUNUUyk6IERlZmluZS4KCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1mYXN0ZXItc3RydWN0cy8tbW5vLWZhc3Rlci1zdHJ1Y3RzIGZsYWdzLgoJKFJPVU5EX1RZUEVfQUxJR04pOiBVc2UgYmV0dGVyIHZhbHVlIGlmIC1tZmFzdGVyLXN0cnVjdHMuCgkqIHNwYXJjLm1kIChzcGFyY2xpdGU4NnhfYnJhbmNoLCBzcGFyY2xpdGU4Nnhfc2hpZnQpOiBOZXcgZnVuY3Rpb24KCXVuaXRzIGZvciB0aGUgc3BhcmNsaXRlODZ4IGNoaXAuCgkoZmx1c2gpOiBSZXZlcnQgT2N0b2JlciAxNHRoIGNoYW5nZTsgYWRkIFNJbW9kZSBzcGVjaWZpY2FsbHkuCgkoZmx1c2hkaSk6IENvcHkgb2YgZmx1c2gsIGJ1dCBESW1vZGUsIHRvIGF2b2lkIGdlbnJlY29nIHdhcm5pbmdzLgoJKiBpbnZva2UudGV4aTogRG9jdW1lbnQgaXQuCgpUdWUgTm92IDMwIDE0OjU4OjE0IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbW4xMDIwMC9tbjEwMjAwLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZAoJcHNpbW9kZV90cnVuY2F0aW9uX29wZXJhbmQuCgoJKiBjb25maWcvbW4xMDIwMC9tbjEwMjAwLmMgKHBzaW1vZGVfdHJ1bmNhdGlvbl9vcGVyYW5kKTogTmV3CglmdW5jdGlvbi4gIFJldHVybiB0cnVlIGlmIHRoZSBvcGVyYW5kIGlzIGVpdGhlciBhIE1FTSB2YWxpZAoJZm9yIGEgUFNJbW9kZSBhZGRyZXNzIG9yIG5vdCBhIE1FTSBhdCBhbGwuCgoJKiBjb25maWcvbW4xMDIwMC9tbjEwMjAwLm1kICh0cnVuY3NpcHNpMik6IFVzZQoJcHNpbW9kZV90cnVuY2F0aW9uX29wZXJhbmQuCgoxOTk5LTExLTMwICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBmbG93LmMgKGZsb3dfbm9kZXNfcHJpbnQsIGZsb3dfbG9vcHNfY2ZnX2R1bXApOiBOZXcgZnVuY3Rpb25zLgoJKGZsb3dfbG9vcF9uZXN0ZWRfcCwgZmxvd19sb29wc19kdW1wLCBmbG93X2xvb3BzX2ZyZWUpOiBMaWtld2lzZS4KCShmbG93X2xvb3BfZXhpdHNfZmluZCwgZmxvd19sb29wX25vZGVzX2ZpbmQpOiBMaWtld2lzZS4KCShmbG93X2RlcHRoX2ZpcnN0X29yZGVyX2NvbXB1dGUsIGZsb3dfbG9vcF9wcmVfaGVhZGVyX2ZpbmQpOiBMaWtld2lzZS4KCShmbG93X2xvb3BfdHJlZV9ub2RlX2FkZCwgZmxvd19sb29wc190cmVlX2J1aWxkKTogTGlrZXdpc2UuCgkoZmxvd19sb29wX2xldmVsX2NvbXB1dGUsIGxvd19sb29wc19sZXZlbF9jb21wdXRlKTogTGlrZXdpc2UuCgkoZmxvd19sb29wc19maW5kLCBmbG93X2xvb3Bfb3V0c2lkZV9lZGdlX3ApOiBMaWtld2lzZS4KCSogYmFzaWMtYmxvY2suaDogUHJvdGVjdCBmcm9tIG11bHRpcGxlIGluY2x1c2lvbi4KCShmbG93X2xvb3BzX2ZpbmQsIGZsb3dfbG9vcHNfZnJlZSwgZmxvd19sb29wX2R1bXApOiBBZGQgcHJvdG95cGVzLgoJKHN0cnVjdCBsb29wcywgc3RydWN0IGxvb3ApOiBEZWZpbmUgc3RydWN0dXJlcy4KCSogc2JpdG1hcC5jIChzYml0bWFwX2Ffc3Vic2V0X2JfcCk6IE5ldyBmdW5jdGlvbi4KCSogc2JpdG1hcC5oOiBQcm90ZWN0IGZyb20gbXVsdGlwbGUgaW5jbHVzaW9uLgoJKHNiaXRtYXBfYV9zdWJzZXRfYl9wKTogQWRkIHByb3RvdHlwZS4KCSogTWFrZWZpbGUuaW4gKExPT1BfSCk6IE5ldyBtYWNyby4KCShzdG10Lm8sIGludGVncmF0ZS5vLCBsb29wLm8sIHVucm9sbC5vKTogUmVwbGFjZSBsb29wLmggd2l0aCBMT09QX0guCgpUdWUgTm92IDMwIDAxOjM0OjQ3IDE5OTkgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogY3BwaW5pdC5jIChDQVQpOiBUaGUgYXJndW1lbnQgbGlzdCBvZiB0aGlzIG1hY3JvIG1heSBub3QgY29udGFpbgoJc3BhY2VzICEKCjE5OTktMTEtMjkgIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+CgoJTW92ZSBxdWFudGl0eSB0YWJsZXMgYW5kIHJlZ2lzdGVyIGVxdWl2YWxlbmNlIGNoYWlucyBpbnRvCglwZXItcXR5IGFuZCBwZXItcmVnaXN0ZXIgc3RydWN0dXJlIGFycmF5cyByZXNwZWN0aXZlbHkuCgkqIGNzZS5jIChxdHlfZmlyc3RfcmVnLCBxdHlfbGFzdF9yZWcsIHF0eV9tb2RlLCBxdHlfY29uc3QsCglxdHlfY29uc3RfaW5zbiwgcXR5X2NvbXBhcmlzb25fY29kZSwgcXR5X2NvbXBhcmlzb25fY29uc3QsCglxdHlfY29tcGFyaXNvbl9xdHkpOiBEZWxldGUsIHJlcGxhY2Ugd2l0aC4uLgoJKHF0eV90YWJsZSk6IHRoaXMgc3RydWN0dXJlIHRhYmxlLgoJKHJlZ19uZXh0X2VxdiwgcmVnX3ByZXZfZXF2KTogRGVsZXRlLCByZXBsYWNlIHdpdGguLi4KCShyZWdfZXF2X3RhYmxlKTogdGhpcyBzdHJ1Y3R1cmUgdGFibGUuCgkobWFrZV9uZXdfcXR5KTogQWRkIGFyZ3VtZW50IE1PREUuICBDYWxsZXIgdXBkYXRlZC4KCVVwZGF0ZSB0byB1c2UgcXR5X3RhYmxlIGFuZCByZWdfZXF2X3RhYmxlLgoJKG1ha2VfcmVnc19lcXYsIGRlbGV0ZV9yZWdfZXF1aXYsIGluc2VydF9yZWdzLAoJaW5zZXJ0LCBleHBfZXF1aXZfcCwgY3NlX3J0eF92YXJpZXNfcCwgY2Fub25fcmVnLAoJZm9sZF9ydHgsIGVxdWl2X2NvbnN0YW50LCByZWNvcmRfanVtcF9jb25kLCBjc2VfaW5zbiwKCWNzZV9wcm9jZXNzX25vdGVzLCBjc2VfbWFpbiwgY3NlX2Jhc2ljX2Jsb2NrKTogTGlrZXdpc2UuCgpNb24gTm92IDI5IDE2OjU2OjQyIDE5OTkgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBmb2xkLWNvbnN0LmMgKGV4dHJhY3RfbXVsZGl2LCBjYXNlIHtNSU4sTUFYfV9FWFBSKTogUmV2ZXJzZQoJb3BlcmF0aW9uIGlmIEMgaXMgbmVnYXRpdmUuCgkoZXh0cmFjdF9tdWxkaXYsIGNhc2UgU0FWRV9FWFBSKTogU3VwcmVzc3MgaWYgYXJnIGhhcyBzaWRlIGVmZmVjdHMuCgkoZXh0cmFjdF9tdWxkaXYsIGNhc2Uge1BMVVMsTUlOVVN9X0VYUFIpOiBEb24ndCBhcHBseSBkaXN0cmlidXRpdmUKCWxhdyBmb3Igc29tZSBkaXZpc2lvbnMgaWYgY29uc3RhbnQgaXMgbmVnYXRpdmUgYW5kIGNoYW5nZSBvdGhlcgoJZGl2aXNpb25zIHRvIHRoZSBvcHBvc2l0ZSByb3VuZGluZy4KCgkqIGV4cHIuYyAoc3RvcmVfY29uc3RydWN0b3JfZmllbGQpOiBJZiBiaXQgcG9zaXRpb24gaXMgbm90IG11bHRpcGxlCglvZiBhbGlnbm1lbnQgb2YgVEFSR0VUJ3MgbW9kZSwgdXNlIEJMS21vZGUuCgoJKiBleHByLmMgKGV4cGFuZF9leHByX3VuYWxpZ25lZCk6IEFkZCBtb3JlIGNvZGUgZnJvbSBmdWxsIGNhc2UKCXRoYXQgaXMgbmVlZGVkIHdoZW4gT1AwIGlzIGluIGEgcmVnaXN0ZXIuCgpNb24gTm92IDI5IDE4OjA5OjM5IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGR3YXJmb3V0LmMgKGZpZWxkX2J5dGVfb2Zmc2V0KTogU2l6ZSBjYW4gYmUgemVybyBpZiB0aGVyZSB3YXMKCWFuIGVycm9yLgoKMTk5OS0xMS0yOSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBmb2xkLWNvbnN0LmMgKHNwbGl0X3RyZWUpOiBEZWxldGUgdW51c2VkIHZhcnMgT1JJR19JTiBhbmQgVFlQRS4KCShhc3NvY2lhdGVfdHJlZXMpOiBEZWxldGUgdW51c2VkIHZhciBURU0uCgkoZXh0cmFjdF9tdWxkaXYpOiBEZWxldGUgdW51c2VkIHZhciBDQU5DRUxfUC4KCgkqIGZvbGQtY29uc3QuYyBbVEFSR0VUX0ZMT0FUX0ZPUk1BVCAhPSBJRUVFX0ZMT0FUX0ZPUk1BVF0KCSh0YXJnZXRfaXNpbmYsIHRhcmdldF9pc25hbiwgdGFyZ2V0X25lZ2F0aXZlKTogQWRkIHJldHVybiB0eXBlcyB0bwoJZnVuY3Rpb24gZGVmaW5pdGlvbnMuCgoxOTk5LTExLTI5ICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmMvZml4aW5jbC5jKHByb2Nlc3MpOiBkb24ndCBza2lwIEdMSUJDIGZpbGVzIGFueSBtb3JlLgoJKiBmaXhpbmMvaGFja3NoZWxsLnRwbDogZGl0dG8KCSogZml4aW5jL2ZpeHRlc3RzLmMoZG91YmxlX3NsYXNoX3Rlc3QpOiBtb3JlIEMrKyBoZWFkZXIgdGVzdGluZwoJKiBmaXhpbmMvaW5jbGhhY2suZGVmKEFBQl9mZF96ZXJvX2dsaWJjKik6IGNvcnJlY3RlZCBzcGVsbGluZyBvZiBtYWNoCgoxOTk5LTExLTI5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IFdoZW4gbG9va2luZyBmb3IgYSByZWdpc3RlciB0byBwdXQgaW50bwoJcmVnX3J0eCwgbWFrZSBzdXJlIGFsbCBoYXJkIHJlZ3MgaW4gYSBtdWx0aS1yZWcgcmVnaXN0ZXIgYXJlIGluIHRoZQoJcmlnaHQgY2xhc3MgYW5kIG5vbmZpeGVkLgoKCSogaGFpZmEtc2NoZWQuYyAocmVnX2xhc3RfdXNlcywgcmVnX2xhc3Rfc2V0cywgcmVnX2xhc3RfY2xvYmJlcnMsCglwZW5kaW5nX3JlYWRfaW5zbnMsIHBlbmRpbmdfd3JpdGVfaW5zbnMsIHBlbmRpbmdfcmVhZF9tZW1zLAoJcGVuZGluZ193cml0ZV9tZW1zLCBwZW5kaW5nX2xpc3RfbGVuZ3RoLCBsYXN0X3BlbmRpbmdfbWVtb3J5X2ZsdXNoLAoJbGFzdF9mdW5jdGlvbl9jYWxsLCBzY2hlZF9iZWZvcmVfbmV4dF9jYWxsKTogTW92ZSBzdGF0aWMgdmFyaWFibGVzCglpbnRvIGEgc3RydWN0dXJlLgoJKGJiXyBwcmVmaXhlZCB2ZXJzaW9ucyk6IFJlcGxhY2Ugd2l0aCBzaW5nbGUgYXJyYXkgYmJfZGVwcy4KCShzdHJ1Y3QgZGVwcyk6IE5ldyBzdHJ1Y3R1cmUuCgkoYWRkX2luc25fbWVtX2RlcGVuZGVuY2UsIGZsdXNoX3BlbmRpbmdfbGlzdHMsIHNjaGVkX2FuYWx5emVfMSwKCXNjaGVkX2FuYWx5emVfMiwgc2NoZWRfYW5hbHl6ZV9pbnNuLCBzY2hlZF9hbmFseXplKTogQWNjZXB0IG5ldwoJYXJndW1lbnQgb2YgdHlwZSAic3RydWN0IGRlcHMgKiI7IHVzZSB0aGF0IGluc3RlYWQgb2YgZ2xvYmFsCgl2YXJpYWJsZXMuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGluaXRfcmduX2RhdGFfZGVwZW5kZW5jaWVzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKGluaXRfcnR4X3ZlY3Rvcik6IERlbGV0ZSBmdW5jdGlvbi4KCShpbml0X2RlcHMpOiBOZXcgZnVuY3Rpb24uCgoJKGZyZWVfcGVuZGluZ19saXN0cyk6IFNpbXBsaWZ5LCB3ZSBhbHdheXMgdXNlIHRoZSBiYl9kZXBzIGFycmF5IGV2ZW4KCWlmIG9ubHkgb25lIGJhc2ljIGJsb2NrLgoJKGNvbXB1dGVfYmxvY2tfYmFja3dhcmRfZGVwZW5kZW5jZXMpOiBMaWtld2lzZS4KCShzY2hlZHVsZV9yZWdpb24pOiBMaWtld2lzZS4KCgkocHJvcGFnYXRlX2RlcHMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCWNvbXB1dGVfYmxvY2tfYmFja3dhcmRfZGVwZW5kZW5jZXMuCgkoY29tcHV0ZV9ibG9ja19iYWNrd2FyZF9kZXBlbmRlbmNlcyk6IFVzZSBpdC4KCgkqIGFscGhhLm1kOiBEZWxldGUgdXNlbGVzcyBwYXR0ZXJucyB0aGF0IHRyaWVkIHRvIHdvcmsgYXJvdW5kCglyZWdpc3RlciBlbGltaW5hdGlvbiBwcm9ibGVtcy4KCgkqIHVucm9sbC5jIChsb29wX2l0ZXJhdGlvbnMpOiBEb24ndCBhYm9ydCBpZiBpdGVyYXRpb24gdmFyaWFibGUKCXdhcyBtYWRlIGJ5IGxvb3AuCgoJRnJvbSBKb2VybiBSZW5uZWNrZToKCSogcmVsb2FkMS5jIChyZWxvYWRzX2NvbmZsaWN0KTogUmV2ZXJzZSB0ZXN0IGNvbXBhcmluZyBvcGVyYW5kCgludW1iZXJzIHdoZW4gdGVzdGluZyBmb3IgY29uZmxpY3QgYmV0d2VlbiBvdXRwdXQvb3V0YWRkciByZWxvYWRzLgoKMTk5OS0xMS0yOSAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcmVkaGF0LmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChpbml0X2N1bXVsYXRpdmVfYXJncyk6IEZpeCB0eXBlIG9mIHRoaXJkCglhcmcuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy1wcm90b3MuaDogVXBkYXRlIHByb3RvLCBtb3ZlIGludG8gUlRYX0NPREUuCgoxOTk5LTExLTI4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAY3lnbnVzLmNvbT4KCgkqIGkzODYvc2NvNS5oIChGSU5JX1NFQ1RJT05fQVNNX09QX0NPRkYpOiBNb3ZlIGRlc3RydWN0b3IgZm4KCXRhYmxlIGZyb20gLmZpbmkgaW50byAuZHRvci4KCjE5OTktMTEtMjggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9kZWNsKTogQWRkIG1hbGxvY19mbGFnLgoJKERFQ0xfSVNfTUFMTE9DKTogRGVmaW5lLgoJKiBjLWNvbW1vbi5jIChhdHRycyk6IEFkZCBBX01BTExPQyBhdHRyaWJ1dGUuCgkoaW5pdF9hdHRyaWJ1dGVzKTogQWRkIHRoaXMgYXR0cmlidXRlIHRvIHRoZSB0YWJsZS4KCShkZWNsX2F0dHJpYnV0ZXMpOiBIYW5kbGUgbWFsbG9jIGF0dHJpYnV0ZS4KCSogY2FsbHMuYyAoc3BlY2lhbF9mdW5jdGlvbl9wKTogQ2hlY2sgZm9yIHRoZSBtYWxsb2MgYXR0cmlidXRlLgoJKiBleHRlbmQudGV4aSAoRnVuY3Rpb24gQXR0cmlidXRlcyk6IERvY3VtZW50IG1hbGxvYyBhdHRyaWJ1dGUuCgpTdW4gTm92IDI4IDEzOjIxOjAwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLm1kIChyZWxvYWQgc2hpZnQtYWRkIHBhdHRlcm5zKTogUmVtb3ZlLgoKMTk5OS0xMS0yOCBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogcmVvcmcuYyAoZGJyX3NjaGVkdWxlKSBQcmludCBtb3JlIHN0YXRpc3RpY3MuIENvcnJlY3RlZAoJcHJvYmxlbSB3aGVuIHByaW50aW5nIGluZm8gd2hlbiAzIGRlbGF5IHNsb3RzIGFyZSBmaWxsZWQuCgoxOTk5LTExLTI4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIGNvbWJpbmUuYyAoc2V0dXBfaW5jb21pbmdfcHJvbW90aW9ucyk6IFBhc3MgYW4gb3V0Z29pbmcKCXJlZ25vIHRvIEZVTkNUSU9OX0FSR19SRUdOT19QIHdoaWNoIGl0IGV4cGVjdHMuCgoxOTk5LTExLTI4ICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CgoJKiBtaXBzL2xpbnV4LmggKENQUF9QUkVERUZJTkVTKTogVW5kZWZpbmUgYmVmb3JlIHJlZGVmaW5pbmcuCgpTdW4gTm92IDI4IDAwOjQ4OjE1IDE5OTkgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogY2NjcC5jIChkb19pbmNsdWRlKTogQXZvaWQgaW5pdGlhbGl6YXRpb24gb2YgYXV0b21hdGljIHZhcmlhYmxlLgoKCSogaW50ZWdyYXRlLmMgKG1hcmtfc3RvcmVzKTogRnVuY3Rpb24gZGVmaW5pdGlvbiBtYWRlIHZvaWQsIHRvIG1hdGNoCglwcmV2aW91cyBkZWNsYXJhdGlvbi4KCSogcmVnY2xhc3MuYyAoZHVtcF9yZWdjbGFzcyk6IERpdHRvLgoJKiBNYWtlZmlsZS5pbiAoV0FSTl9DRkxBR1MpOiBNYWNybyBhdWdtZW50ZWQgYnkgYC1XdHJhZGl0aW9uYWwnLgoKU2F0IE5vdiAyNyAwODozODoyNiAxOTk5ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IFVzZSBFWEFDVF9ESVZfRVhQUiB3aGVuIGRpdmlkZW5kIGlzCglrbm93biB0byBiZSBtdWx0aXBsZSBvZiBkaXZpc29yLgoKCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IERvbid0IGNsb2JiZXIgVEFSR0VUIGlmIENMRUFSRUQuCgoJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogQWRkIGNvZGUgdG8gdHJ5IHRvIG1lcmdlIGEgc2V0IG9mIGEKCXR3by13b3JkIHBzZXVkbyB0byBhIGNvbnN0YW50IHdpdGggYSBzZXR0aW5nIG9mIG9uZSBvZiB0aG9zZSB3b3JkcwoJdG8gYSBjb25zdGFudC4KCgkqIGZvbGQtY29uc3QuYyAobmVnYXRlX2V4cHIsIGFzc29jaWF0ZV90cmVlcywgZXh0cmFjdF9tdWxkaXYpOiBOZXcuCgkoc3BsaXRfdHJlZSk6IENvbXBsZXRlbHkgcmV3b3JrIHRvIG1ha2UgbW9yZSBnZW5lcmFsLgoJKG1ha2VfcmFuZ2UsIGZvbGQpOiBDYWxsIG5lZ2F0ZV9leHByLgoJKGZvbGQsIGNhc2UgTkVHQVRFX0VYUFIpOiBTaW1wbGlmeSAtKGEtYikgaXMgLWZmYXN0LW1hdGguCgkoZm9sZCwgYXNzb2NpYXRlKTogQ2FsbCBuZXcgc3BsaXRfdHJlZSBhbmQgYXNzb2NpYXRlX3RyZWVzLgoJKGZvbGQsIGNhc2UgTVVMVF9FWFBSLCBjYXNlICpfe0RJVixNT0R9X0VYUFIpOiBDYWxsIGV4dHJhY3RfbXVsZGl2LgoKMTk5OS0xMS0yNiAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHRyeV9jb3B5X3Byb3ApOiBBdm9pZCBHTlUgQyBleHRlbnNpb24uCgoxOTk5LTExLTI1ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZXhjZXB0LmMgKGluaXRfZWhfZm9yX2Z1bmN0aW9uKTogU3RpbGwgemVybyBlaF9yZXR1cm5fY29udGV4dCwKCWVoX3JldHVybl9zdGFja19hZGp1c3QsIGFuZCBlaF9yZXR1cm5faGFuZGxlci4KCgkqIGV4Y2VwdC5oIChlaF9zdGF0dXMpOiBBZGp1c3QgZG9jdW1lbnRhdGlvbiBmb3IgeF9wcm90ZWN0X2xpc3QuCgkoYmVnaW5fcHJvdGVjdF9wYXJ0aWFscyk6IE5ldyBmdW5jdGlvbi4KCSogZXhjZXB0LmMgKGVucXVldWVfZWhfZW50cnkpOiBGaXggZm9ybWF0dGluZy4KCShnZXRfZmlyc3RfaGFuZGxlcik6IEFkZCBjb25zaXN0ZW5jeSBjaGVjay4KCShhZGRfcGFydGlhbF9lbnRyeSk6IEFkanVzdCB1c2FnZSBvZiBwcm90ZWN0X2xpc3QuCgkoZW1pdF9jbGVhbnVwX2hhbmRsZXIpOiBTYXZlIGFuZCByZXN0b3JlIGVocXVldWUuCgkoZXhwYW5kX3N0YXJ0X2FsbF9jYXRjaCk6IEFkZCBjb21tZW50LgoJKGJlZ2luX3Byb3RlY3RfcGFydGlhbHMpOiBOZXcgZnVuY3Rpb24uCgkoZW5kX3Byb3RlY3RfcGFydGlhbHMpOiBBZGp1c3QgdXNhZ2Ugb2YgcHJvdGVjdF9saXN0LgoJKGluaXRfZWhfZm9yX2Z1bmN0aW9uKTogVXNlIHhjYWxsb2MuCgoxOTk5LTExLTI1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWNvbW1vbi5jIChjaGVja19mb3JtYXRfaW5mbyk6IERvbid0IGNhbGwgYSB2YXJpYWRpYyBmdW5jdGlvbgoJd2l0aCBhIG5vbi1saXRlcmFsIGZvcm1hdCBzdHJpbmcuCgoJKiBjLWRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IsIHN0YXJ0X3N0cnVjdCwgZmluaXNoX3N0cnVjdCk6IExpa2V3aXNlLgoKCSogYy10eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZiwgYnVpbGRfdW5hcnlfb3AsIGx2YWx1ZV9vcl9lbHNlLAoJcGVkYW50aWNfbHZhbHVlX3dhcm5pbmcsIGVycm9yX2luaXQsIHBlZHdhcm5faW5pdCwgd2FybmluZ19pbml0KToKCUxpa2V3aXNlLgoKCSogY2NjcC5jIChjaGVja19tYWNyb19uYW1lLCBkb194aWZkZWYsIHZ3YXJuaW5nX3dpdGhfbGluZSk6CglMaWtld2lzZS4KCgkqIGNvbGxlY3QyLmMgKGNvbGxlY3Rfd2FpdCk6IExpa2V3aXNlLgoKCSogZGJ4b3V0LmMgKGRieG91dF90eXBlKTogTGlrZXdpc2UuCgoJKiBnY2MuYyAoZG9fc3BlY18xKTogTGlrZXdpc2UuCgoJKiBnZW5lbWl0LmMgKGdlbl9pbnNuLCBnZW5fZXhwYW5kKTogTGlrZXdpc2UuCgoJKiBnZW5yZWNvZy5jICh3cml0ZV9zd2l0Y2gsIHdyaXRlX3N1YnJvdXRpbmUpOiBMaWtld2lzZS4KCgkqIG1pcHMtdGZpbGUuYyAoY2F0Y2hfc2lnbmFsLCBib3RjaCk6IExpa2V3aXNlLgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKGRlZmF1bHRfcHJpbnRfZXJyb3JfZnVuY3Rpb24sIHJlcG9ydF9lcnJvcl9mdW5jdGlvbiwKCV9mYXRhbF9pbnNuKTogTGlrZXdpc2UuCgoxOTk5LTExLTI1ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdHJlZS5jICh1bnNhdmVfZXhwcl9ub3cpOiBIYW5kbGUgTlVMTF9UUkVFIGFzIGlucHV0LgoKV2VkIE5vdiAyNCAxNzowODowOSBNRVQgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogcmVnLXN0YWNrLmMgKHN1YnN0X3N0YWNrX3JlZ3NfcGF0KTogU3dhcCBvcGVyYW5kcyBpbiBjb21tdXRhdGl2ZQoJb3BlcmF0aW9ucyB3aGVuIG5lZWRlZC4KCSogaTM4Ni5tZCAoZm9wXz9mX2NvbW0pOiBOZXcuCgkoZm9wXz9mXzEpOiBEbyBub3QgYWNjZXB0IGNvbW11dGF0aXZlIG9wZXJhbmRzLgoKMTk5OS0xMS0yNSAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgoKCSogY29uZmlnL21pcHMvbWlwcy5tZCAoY2FzZXNpX2ludGVybmFsKTogQWRkIG1pc3NpbmcgYnJhY2UuCgoxOTk5LTExLTI1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AY2FzZXkuY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChwZW5kX3R5cGUsIG91dHB1dF9wZW5kaW5nX3R5cGVzX2Zvcl9zY29wZSk6IExvc2UuCgkoc3BsaWNlX2NoaWxkX2RpZSk6IEhhbmRsZSBtb3ZpbmcgYSBjaGlsZCBESUUgZnJvbSB0aGUgZGVjbGFyYXRpb24KCURJRSBvZiBhIGNsYXNzIHRvIGl0cyBzcGVjaWZpY2F0aW9uLgoJKGdlbl9zdHJ1Y3Rfb3JfdW5pb25fdHlwZV9kaWUpOiBVc2UgJ2NvbXBsZXRlJyBjb25zaXN0ZW50bHkuCgkoZ2VuX2RlY2xfZGllKTogR2VuZXJhdGUgdGhlIHZpcnR1YWwgY29udGV4dCBESUUgZmlyc3QuCglVc2UgZGVjbF91bHRpbWF0ZV9vcmlnaW4gaW5zdGVhZCBvZiBERUNMX0FCU1RSQUNUX09SSUdJTi4KCjE5OTktMTEtMjQgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5tZCAoY2FsbF92YWx1ZV9tdWx0aXBsZV9pbnRlcmFuYWwxKTogTmV3LgoKMTk5OS0xMS0yNCAgSmFzb24gTWVycmlsbCAgPGphc29uQGNhc2V5LmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoZnJlZV9BVCwgZnJlZV9kaWUpOiBOZXcgZm5zLgoJKHJlbW92ZV9jaGlsZHJlbik6IENhbGwgdGhlbS4KCShvdXRwdXRfbGluZV9pbmZvKTogRGlzYWJsZSByZW1vdmFsIG9mIGR1cGxpY2F0ZSBub3Rlcy4KCglHZW5lcmF0ZSBtaW5pbWFsIGRlYnVnIGluZm8gZm9yIHR5cGVzIHdpdGggVFlQRV9ERUNMX1NVUFBSRVNTX0lORk8gc2V0LgoJKiBkd2FyZjJvdXQuYyAoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IFRZUEVfREVDTF9TVVBQUkVTU19JTkZPCgltZWFucyBwcmV0ZW5kIHRoZSB0eXBlIGlzbid0IGRlZmluZWQuCglEb24ndCBkZWZlciBlbWl0dGluZyB0eXBlcy4KCShnZW5fdHlwZV9kaWVfZm9yX21lbWJlcik6IE5ldyBmbi4KCShnZW5fZGVjbF9kaWUpOiBDYWxsIGl0LgoJKHNwbGljZV9jaGlsZF9kaWUpOiBOZXcgZm4uCgkoZ2VuX21lbWJlcl9kaWUpOiBDYWxsIGl0IHJhdGhlciB0aGFuIGdlbmVyYXRlIGR1cGxpY2F0ZSBkaWVzLgoKCURlZmVyIGVtaXR0aW5nIGluZm9ybWF0aW9uIGZvciB0aGUgYWJzdHJhY3QgaW5zdGFuY2Ugb2YgYW4gaW5saW5lCgl1bnRpbCB3ZSBlaXRoZXIgaW5saW5lIGl0IG9yIGVtaXQgYW4gb3V0LW9mLWxpbmUgY29weS4KCSogZHdhcmYyb3V0LmMgKGRlY2xfdWx0aW1hdGVfb3JpZ2luKTogSWdub3JlIERFQ0xfQUJTVFJBQ1RfT1JJR0lOCglmcm9tIG91dHB1dF9pbmxpbmVfZnVuY3Rpb24gaWYgREVDTF9BQlNUUkFDVCBpcyBhbHNvIHNldC4KCShibG9ja191bHRpbWF0ZV9vcmlnaW4pOiBMaWtld2lzZS4KCShnZW5fYWJzdHJhY3RfZnVuY3Rpb24pOiBOZXcgZm4uCgkoZ2VuX2RlY2xfZGllLCBnZW5faW5saW5lZF9zdWJyb3V0aW5lX2RpZSk6IENhbGwgaXQuCgkoZ2VuX3N1YnByb2dyYW1fZGllKTogIEFuIGFic3RyYWN0IGluc3RhbmNlIGlzIG5vdCBhIGRlY2xhcmF0aW9uCglqdXN0IGJlY2F1c2UgaXQgZG9lc24ndCBtYXRjaCBjdXJyZW50X2Z1bmN0aW9uX2RlY2wuICBEb24ndCBhYm9ydAoJYmVjYXVzZSBERUNMX0RFRkVSX09VVFBVVCBpc24ndCBzZXQuICBEbyBhYm9ydCBpZiBhIGRlY2xhcmF0aW9uCgloYXMgYW4gYWJzdHJhY3Qgb3JpZ2luLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IERvbid0IGVtaXQgZHdhcmYyIGluZm8gZm9yIHRoZQoJYWJzdHJhY3QgaW5zdGFuY2UgaGVyZS4KCldlZCBOb3YgMjQgMTg6Mzk6MTggMTk5OSAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjb25maWcvc2gvc2guaCAoU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MpOiBBZGQgdGhlIGNhc2UKCXdoZXJlIHdlIG5lZWQgdG8gcmVsb2FkIGZwdWwgZnJvbSBhIHN5c3RlbSByZWdpc3Rlci4KCjE5OTktMTEtMjQgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KCgkqIGNvbmZpZy9taXBzL2xpbnV4LmggKENQUF9QUkVERUZJTkVTKTogQWRkZWQuCgkoTElOS19TUEVDKTogUmVtb3ZlIC1ZIHNpbmNlIHRoaXMgaXMgb25seSBuZWVkZWQgb24gc3BhcmMuCgoxOTk5LTExLTI0ICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CgoJKiBjb25maWcvbWlwcy9saW51eC5oIChUQVJHRVRfVkVSU0lPTik6IEFkZGVkLgoJKEhBTkRMRV9TWVNWX1BSQUdNQSk6IEFkZGVkLgoJKERFRkFVTFRfVlRBQkxFX1RIVU5LUyk6IEFkZGVkLgoKV2VkIE5vdiAyNCAxNDoxMjoxNSBNRVQgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogbG9jYWwtYWxsb2MuYyAocXR5KTogTmV3IHN0cnVjdHVyZSBhbmQgc3RhdGljIHZhcmlhYmxlLgoJKHF0eV9waHlzX3JlZyk6IFJlbW92ZSwgYWxsIHJlZmVyZW5jZXMgY2hhbmdlZCB0byBxdHkuCgkocXR5X25fcmVmcyk6IExpa2V3aXNlLgoJKHF0eV9taW5fY2xhc3MpOiBMaWtld2lzZS4KCShxdHlfYmlydGgpOiBMaWtld2lzZS4KCShxdHlfZGVhdGgpOiBMaWtld2lzZS4KCShxdHlfc2l6ZSk6IExpa2V3aXNlLgoJKHF0eV9tb2RlKTogTGlrZXdpc2UuCgkocXR5X25fY2FsbHNfY3Jvc3NlZCk6IExpa2V3aXNlLgoJKHF0eV9hbHRlcm5hdGVfY2xhc3MpOiBMaWtld2lzZS4KCShxdHlfY2hhbmdlc19zaXplKTogTGlrZXdpc2UuCgkocXR5X2ZpcnN0X3JlZyk6IExpa2V3aXNlLgoJKGFsbG9jX3F0eSk6IFJlbmFtZSB2YXJpYWJsZSBRVFkgdG8gUVRZTk8uCgkoZmluZl9mcmVlX3JlZyk6IExpa2V3aXNlLgoJKGxvY2FsX2FsbG9jKTogQWxsb2NhdGUgcXR5LCBkbyBub3QgYWxsb2NhdGUgdGhlIHJlbW92ZWQgdmFyaWFibGVzLgoKV2VkIE5vdiAyNCAxNzoyNjowNSAxOTk5ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmggKEFTTV9TUEVDKTogRG9uJ3QgcGFzcyAtRyB0byB0aGUgYXNzZW1ibGVyCgl3aGVuIC1tZW1iZWRkZWQtcGljIGlzIHBhc3NlZC4KCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKGNhc2VzaSk6IEhhbmRsZSA2NC1iaXQgY2FzZSB0b28uCgkoY2FzZXNpX2ludGVybmFsX2RpKTogTmV3IGluc24uCgoJKiBjb25maWcvbWlwcy9taXBzLmMgKGVtYmVkZGVkX3BpY19vZmZzZXQpOiBBbHdheXMgbWFrZSB0aGUKCWVtYmVkZGVkLXBpYyBzdWJ0cmFjdGlvbnMgcmVsYXRpdmUgdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQKCWZ1bmN0aW9uIGJ5IHVzZSBvZiB0aGUgbWFnaWMgc3RyaW5nICIuLkNVUlJFTlRfRlVOQ1RJT04iLgoJKiBjb25maWcvbWlwcy9taXBzLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBNYWtlIHRoZSBtYWdpYyBoYXBwZW4uCgoxOTk5LTExLTI0ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLm1kIChkaXZfdHJhcF9ub3JtYWwpOiBEb24ndCBhc2sgZm9yIHRoZSBSRUdOTwoJb2YgKGNvbnN0X2ludCAwKSwgd2hlbiB3aGF0IHdlIHJlYWxseSBjYXJlIGFib3V0IGlzCgl3aGV0aGVyIGl0J3MgYSB6ZXJvIGNvbnN0YW50IGFueXdheS4KCShkaXZfdHJhcF9taXBzMTYpOiBMaWtld2lzZS4KCjE5OTktMTEtMjMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBsb29wLmMgKGxvb3Bfb3B0aW1pemUpOiBBbHdheXMgZmluZF9sb29wX3RyZWVfYmxvY2tzIGFuZAoJdW5yb2xsX2Jsb2NrX3RyZWVzIHdoZW4gZ2VuZXJhdGluZyBkZWJ1Z2dhYmxlIGNvZGUuCgoJKiB0cmVlLmggKHVuc2F2ZV9leHByXzEpOiBOZXcgZnVuY3Rpb24uCgkobGFuZ191bnNhdmUpOiBOZXcgdmFyaWFibGUuCgkoZ2V0X2NhbGxlZV9mbmRlY2wpOiBOZXcgZnVuY3Rpb24uCgkqIHRyZWUuYyAodW5zYXZlX2V4cHJfbm93X3IpOiBOZXcgZnVuY3Rpb24uCgkobGFuZ191bnNhdmUpOiBEZWZpbmUuCgkodW5zYXZlX2V4cHJfMSk6IExpa2V3aXNlLgoJKHVuc2F2ZV9leHByX25vd19yKTogU3BsaXQgb3V0IGZyb20gdW5zYXZlX2V4cHJfbm93LgoJKHVuc2F2ZV9leHByX25vdyk6IENhbGwgbGFuZ191bnNhdmUgaWYgaXQgaXMgbm9uLU5VTEwuICBPdGhlcndpc2UsCgljYWxsIHVuc2F2ZV9leHByX25vd19yLgoJKGdldF9jYWxsZWVfZm5kZWNsKTogRGVmaW5lLgoKCSogTWFrZWZpbGUuaW4gKGdlbmNoZWNrKTogRG9uJ3QgZGVwZW5kIG9uIGxhbmdfdHJlZV9maWxlcy4KCShnZW5jaGVjay5vKTogRG8gZGVwZW5kIG9uIGxhbmdfdHJlZV9maWxlcy4KCgkqIGludGVncmF0ZS5oIChjb3B5X2RlY2xfZm9yX2lubGluaW5nKTogTmV3IGRlY2xhcmF0aW9uLgoJKiBpbnRlZ3JhdGUuYyAoY29weV9hbmRfc2V0X2RlY2xfYWJzdHJhY3Rfb3JpZ2luKTogUmVtb3ZlLgoJKGNvcHlfZGVjbF9mb3JfaW5saW5pbmcpOiBOZXcgZnVuY3Rpb24uCgkoaW50ZWdyYXRlX3Bhcm1fZGVjbHMpOiBVc2UgaXQuCgkoaW50ZWdyYXRlX2RlY2xfdHJlZSk6IExpa2V3aXNlLgoKMTk5OS0xMS0yMyAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmggKElTQV9IQVNfRlA0LElTQV9IQVNfQ09ORE1PVkUsSVNBX0hBU184Q0MpOiBTcGxpdAoJdGhlIHNlY29uZCB0d28gZnJvbSB0aGUgZmlyc3QuCgkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBVc2UgSVNBX0hBU184Q0MgcmF0aGVyIHRoYW4gSVNBX0hBU19GUDQuCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKG1vdmNjLHJlbG9hZF9pbmNjLHJlbG9hZF9vdXRjYywKCWNvbmRpdGlvbmFsIG1vdmUpOiBVc2UgSVNBX0hBU19DT05ETU9WRSBvciBJU0FfSEFTXzhDQyByYXRoZXIgdGhhbgoJSVNBX0hBU19GUDQuCgkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19tb3ZlXzF3b3JkLGdlbl9jb25kaXRpb25hbF9icmFuY2gsCglvdmVycmlkZV9vcHRpb25zKTogVXNlIElTQV9IQVNfQ09ORE1PVkUgb3IgSVNBX0hBU184Q0MgcmF0aGVyIHRoYW4KCUlTQV9IQVNfRlA0LgoKVHVlIE5vdiAyMyAxMToxNTowNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAoY2FsbF9pbnRlcm5hbF9zeW1yZWYsIGNhbGxfdmFsdWVfaW50ZXJuYWxfc3ltcmVmKTogTm8gbW9kZQoJbmVlZGVkIG9uIHRoZSBhZGRyZXNzIG9wZXJhbmQuCgkqIHBhLmMgKGNhbGxfb3BlcmFuZF9hZGRyZXNzKTogQ2hlY2sgZm9yIHRoZSBjb3JyZWN0IG1vZGUuCgoxOTk5LTExLTIzICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGxvb3AuYzogSW5jbHVkZSAiYmFzaWMtYmxvY2suaCIuCgkodHJ5X2NvcHlfcHJvcCwgcmVwbGFjZV9sb29wX3JlZyk6IE5ldyBmdW5jdGlvbnMuCgkobG9hZF9tZW1zKTogRGV0ZWN0IHJlZ2lzdGVycyB0aGF0IGp1c3QgaG9sZCBjb3BpZXMgb2YgdGhlIGhvaXN0ZWQKCW1lbSwgYW5kIGNhbGwgdHJ5X2NvcHlfcHJvcCB0byBlbGltaW5hdGUgdGhlbS4KCSogTWFrZWZpbGUuaW4gKGxvb3Aubyk6IFVwZGF0ZSBkZXBlbmRlbmNpZXMuCgpUdWUgTm92IDIzIDAxOjAzOjI5IDE5OTkgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGdlbmNoZWNrLm8pOiBEZXBlbmQgb24gZ2VuY2hlY2suaC4KCShpbnNuLWVtaXQubyk6IERlcGVuZCBvbiBmbGFncy5oLCBoYXJkLXJlZy1zZXQuaCBhbmQgcmVzb3VyY2UuaC4KCShpbnNuLXBlZXAubyk6IERlcGVuZCBvbiBleGNlcHQuaCBhbmQgZnVuY3Rpb24uaC4KCShpbnNuLWF0dHJ0YWIubyk6IERlcGVuZCBvbiBSRUNPR19ILgoJKGluc24tb3V0cHV0Lm8pOiBEZXBlbmQgb24gdG9wbGV2LmggYW5kIGZsYWdzLmguCgkoZ2VuZ2VucnRsLm8pOiBEZXBlbmQgb24gcmVhbC5oLgoJKGdlbi1wcm90b3Mubyk6IERlcGVuZCBvbiBjcHBsaWIuaCBhbmQgY3BwaGFzaC5oLgoJVW5pZnkgYWxsIGRlcGVuZGVuY2llcyB0byBiZSBvbiBSRUNPR19IIHJhdGhlciB0aGFuIHJlY29nLmguCgpUdWUgTm92IDIzIDAwOjU3OjEwIDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgoKCUZyb20gQ2FzcGVyIEguUy4gRGlrIG9uIGNvbXAudW5peC5zb2xhcmlzLCAyMyBPY3QgMTk5ODoKCSogY29uZmlndXJlLmluOiBUcnkgYnVpbGRpbmcgYSBiaS1hcmNoIDMyLzY0LWJpdCBjb21waWxlciBvbgoJc3BhcmMtKi1zb2xhcmlzMi43IGFuZCBoaWdoZXIuCgkqIGNvbmZpZ3VyZTogUmVidWlsZC4KCk1vbiBOb3YgMjIgMjM6MDk6NDQgMTk5OSAgRGF2aWQgTydCcmllbiAgPG9icmllbkBGcmVlQlNELm9yZz4KCgkqIGNvbmZpZy9mcmVlYnNkLmg6IE5ldywgRnJlZUJTRCBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgZmlsZS4KCSogY29uZmlnL2kzODYvZnJlZWJzZC1lbGYuaDogcmVtb3ZlZCBGcmVlQlNEIGFyY2hpdGVjdHVyYWxseQoJaW5kZXBlbmRlbnQgcGllY2VzLgoJKiBjb25maWcvaTM4Ni9mcmVlYnNkLmg6IGluY2x1ZGUgaTM4Ni9wZXJmb3JtLmggdmlhIHRtLmggcmF0aGVyIHRoYW4KCWRpcmVjdGx5IGJ5IGkzODYvZnJlZWJzZC5oLgoJKiBjb25maWd1cmUuaW4gKCotKi1mcmVlYnNkZWxmKTogSW5jbHVkZSBuZXcgRnJlZUJTRCBhcmNoaXRlY3R1cmFsbHkKCWluZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24gZmlsZS4KCSgqLSotZnJlZWJzZGVsZik6IEluY2x1ZGUgaTM4Ni9wZXJmb3JtLmggdmlhIHRtLmggcmF0aGVyIHRoYW4KCWRpcmVjdGx5IGJ5IGkzODYvZnJlZWJzZC5oLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoJKiB4bS1pMzg2Lmg6IERlZmluZSBgX19pMzg2X18nIGlmIG5vdCBkZWZpbmVkLCByYXRoZXIgdGhhbiBgaTM4NicKCXdoaWNoIGlzIGluIHRoZSB1c2VyJ3MgbmFtZXNwYWNlLgoJKiBsaWJnY2MyLmM6IExvb2sgZm9yIHRoZSBBTlNJLUMgYXBwcm92ZWQgYF9faTM4Nl9fJyBzeW1ib2wsIHZzLgoJYGkzODYnIHdoaWNoIGlzIG5vdCBpbiBvdXIgbmFtZXNwYWNlLgoKTW9uIE5vdiAyMiAyMjo1ODowMSAxOTk5ICAiUi4gS2VsbGV5IENvb2siIDxLZWxsZXlDb29rQGF0dGdsb2JhbC5uZXQ+CgoJKiBpbnZva2UudGV4aSAoQVJNIE9wdGlvbnMpOiBBZGQgaW4gLW1uby1hbGlnbm1lbnQtdHJhcHMKCjE5OTktMTEtMjIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBjYXNleS5jeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGRpZV9zdHJ1Y3QpOiBSZW1vdmUgZGllX2F0dHJfbGFzdCBhbmQgZGllX2NoaWxkX2xhc3QuCgkoYWRkX2R3YXJmX2F0dHIsIGFkZF9jaGlsZF9kaWUpOiBKdXN0IHB1c2ggb250byB0aGUgZnJvbnQuCgkocmV2ZXJzZV9kaWVfbGlzdHMpOiBOZXcgZm4uCgkoYWRkX3NpYmxpbmdfYXR0cmlidXRlcyk6IFVzZSBpdC4KCShwdXNoX2RlY2xfc2NvcGUpOiBSZW9yZ2FuaXplLgoJKGFkZF9uYW1lX2FuZF9zcmNfY29vcmRzX2F0dHJpYnV0ZXMpOiBEb24ndCBzZXQgZmlsZSBhbmQgbGluZSBmb3IKCWFuIGFydGlmaWNpYWwgZGVjbC4KCShnZW5fc3VicHJvZ3JhbV9kaWUpOiBBbiBhcnRpZmljaWFsIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBtYXRjaAoJZmlsZSBhbmQgbGluZS4KCShnZW5fY29tcGlsZV91bml0X2RpZSk6IFJldHVybiB0aGUgZ2VuZXJhdGVkIGRpZS4gIE9ubHkgYWRkCglBVF9jb21wX2RpciBpZiB0aGUgZmlsZW5hbWUgaXMgcmVsYXRpdmUuCgkocmVtb3ZlX0FUKTogU2ltcGxpZnkgbG9vcC4gIEFsc28gZnJlZSBzdHJpbmcgdmFsdWVzLgoJKG91dHB1dF9kaWUpOiBBIERJRSByZWYgY2FuJ3QgYmUgbnVsbC4KCShvdXRwdXRfdmFsdWVfZm9ybWF0LCB2YWx1ZV9mb3JtYXQpOiBUYWtlIGEgZHdfYXR0cl9yZWYuCgkoZHdhcmZfbGFzdF9kZWNsLCBpc19leHRlcm5fc3Vicl9kaWUsIHNpYmxpbmdfb2Zmc2V0KTogUmVtb3ZlLgoJKEFUX2NsYXNzLCBBVF9mbGFnLCBBVF9pbnQsIEFUX3Vuc2lnbmVkLCBBVF9zdHJpbmcsIEFUX3JlZiwgQVRfbG9jLAoJQVRfYWRkciwgQVRfbGJsKTogTmV3IGZucy4KCSh2YXJpb3VzKTogVXNlIHRoZW0uCgkodmFyaW91cyk6IENvbnN0aWZ5LgoKTW9uIE5vdiAyMiAyMzo1Mzo1MCAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBjb21iaW5lLmMgKGNvbWJpbmVfc2ltcGxpZnlfcnR4KTogV2hlbiBoYW5kbGluZyBhIFNVQlJFRywKCXRha2UgU1VCUkVHX1dPUkQgaW50byBhY2NvdW50LgoJKGlmX3RoZW5fZWxzZV9jb25kKTogTGlrZXdpc2UuCgoxOTk5LTExLTIyICBKYXNvbiBNZXJyaWxsICA8amFzb25AY2FzZXkuY3lnbnVzLmNvbT4KCgkqIGdtb24uYywgaTM4Ni9nbW9uLXNvbDIuYywgc3BhcmMvZ21vbi1zb2wyLmM6IFJlbW92ZSBhZHZlcnRpc2luZwoJY2xhdXNlIGZyb20gQlNEIGxpY2Vuc2UsIHB1cnN1YW50IHdpdGgKCgkgIGZ0cDovL2Z0cC5jcy5iZXJrZWxleS5lZHUvcHViLzRic2QvUkVBRE1FLkltcHQuTGljZW5zZS5DaGFuZ2UKCjE5OTktMTEtMjIgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChsb2FkX21lbXMpOiBSZWZvcm1hdCBzbGlnaHRseS4KCSogYmFzaWMtYmxvY2suaCAocmVnc2V0X2hlYWQpOiBOZXcgdHlwZWRlZi4KCShJTklUX1JFR19TRVQpOiBOZXcgbWFjcm8uCgoxOTk5LTExLTIyICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20KCgkqIGZpeGluYy9ta2Zpc2luYy5zaChpPzg2LSotbGludXgpOiBkaXNhYmxlIHNjcmlwdCwgcnVuIGZpeGluY2wgZXhlCgkobWlwcy1kZWMtYnNkKik6IG5vbi1mdW5jdGlvbmFsIGNvZGUKCShhbHBoYSotKi1saW51eC1nbnUqKTogcmVkdW5kYW50LCBkdXBsaWNhdGVkIGJ5ICIqLSotbGludXgtZ251KiIKCgkqIGZpeGluYy9pbmNsaGFjay5kZWYoQUFCX2ZkX3plcm9fZ2xpYmNfKik6CglhZGRlZCB0aHJlZSByZXBsYWNlbWVudCBmaXhlcwoJKG5vX2RvdWJsZV9zbGFzaCk6IHJlbW92ZWQgY29tbWVudHMgdGhhdCBhcmUgbm90IChhbnkgbG9uZ2VyKSBwZXJ0aW5lbnQKCShiYWRfbHZhbCk6IHRoaXMgZml4IGN1cnJlbnRseSBydW5zIGFnYWluc3QgbWFueSBmaWxlcy4KCVRoZSBjb21tZW50IHNlZW1zIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIHNlbGVjdCBmb3IgZmlsZXMKCWNvbnRhaW5pbmcgJ3ByYWdtYSBleHRlcm5fcHJlZml4Jy4KCgkqIGZpeGluYy9maXhpbmMueDg2LWxpbnV4LWdudTogZGVsZXRlZAoJKiBmaXhpbmMvaW5jbGhhY2suc2g6ICByZWdlbgoJKiBmaXhpbmMvZml4aW5jbC54OiAgcmVnZW4KCSogZml4aW5jL2ZpeGluY2wuc2g6ICByZWdlbgoKRnJpIE5vdiAxMiAxNDowODo0MCAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGVtaXQtcnRsLmMgKGdlbl9zZXF1ZW5jZSk6IE9ubHkgcmV0dXJuIHRoZSBwYXR0ZXJuIG9mIGFuIGluc24gaWYKCWl0cyBjb2RlIGlzIElOU04gYW5kIGl0IGhhcyBubyBub3Rlcy4KCjE5OTktMTEtMjIgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogdmFyYXNtLmMgKGZ1bmN0aW9uX2RlZmluZWQpOiBSZW1vdmUuCgkobWFrZV9mdW5jdGlvbl9ydGwpOiBEb24ndCBzZXQgZnVuY3Rpb25fZGVmaW5lZC4KCShtYWtlX2RlY2xfcnRsKTogUmVtb3ZlIGdsb2JhbCByZWdpc3RlciB3YXJuaW5nLgoJKiByZWdjbGFzcy5jIChub19nbG9iYWxfcmVnX3ZhcnMpOiBOZXcgdmFyaWFibGUuCgkoZ2xvYmFsaXplX3JlZyk6IFdhcm4gaWYgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLgoJKHJlZ2NsYXNzX2luaXQpOiBTZXQgbm9fZ2xvYmFsX3JlZ192YXJzLgoKTW9uIE5vdiAyMiAxNDo0MjoyMiBNRVQgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogcmVnY2xhc3MuYyAocmVnX3ByZWYpOiBOZXcgc3RydWN0dXJlIGFuZCBzdGF0aWMgdmFyaWFibGUKCShwcmVmY2xhc3MpOiBEZWxldGUuCgkoYWx0Y2xhc3MpOiBEZWxldGUuCgkoYWxsIHVzZXMgb2YgcHJlZmNsYXNzIGFuZCBhbHRjbGFzcyk6IFVzZSByZWdfcHJlZiBpbnN0ZWFkLgoKMTk5OS0xMS0yMSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGludm9rZS50ZXhpIChBUk0gT3B0aW9ucyk6IFJlcGxhY2UgLW1zaG9ydC1sb2FkLWJ5dGVzIHdpdGgKCS1tYWxpZ25tZW50LXRyYXBzLgoJKGFybS5oKTogUmVwbGFjZSAtbXNob3J0LWxvYWQtYnl0ZXMgd2l0aCAtbWFsaWdubWVudC10cmFwcy4KCShhcm0uYyk6IFJlcGxhY2UgVEFSR0VUX1NIT1JUX0JZX0JZVEVTIHdpdGggVEFSR0VUX01NVV9UUkFQUy4KCShhcm0ubWQpOiBSZXBsYWNlIFRBUkdFVF9TSE9SVF9CWV9CWVRFUyB3aXRoIFRBUkdFVF9NTVVfVFJBUFMuCgpTdW4gTm92IDIxIDE3OjExOjEzIDE5OTkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAY3lnbnVzLmNvbT4KCgkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RydWN0b3IpOiBTb2x2ZSBwcm9ibGVtIHdpdGggbG9uZyBsb25nCgliaXRmaWVsZHMsIGV2ZW4gb24gQllURVNfQklHX0VORElBTiBtYWNoaW5lcyAodGVzdGNhc2UgOTkxMTE4LTEpLgoKRnJpIE5vdiAxOSAwNTo0ODo0NSBDRVQgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogZ2xvYmFsLmMgKGFsbG9jbm8pOiBOZXcgc3RydWN0dXJlIGFuZCBzdGF0aWMgdmFyaWFibGUuCgkoYWxsb2Nub19yZWcpOiBSZW1vdmUsIGFsbCByZWZlcmVuY2VzIHJlcGxhY2VkIGJ5IGFsbG9jbm8uCgkoYWxsb2Nub19zaXplKTogTGlrZXdpc2UuCgkoaGFyZF9yZWdfY29uZmxpY3RzKTogTGlrZXdpc2UuCgkoaGFyZF9yZWdfcHJlZmVyZW5jZXMpOiBMaWtld2lzZS4KCShoYXJkX3JlZ19jb3B5X3ByZWZlcmVuY2VzKTogTGlrZXdpc2UuCgkoaGFyZF9yZWdfZnVsbF9wcmVmZXJlbmNlcyk6IExpa2V3aXNlLgoJKHJlZ3Nfc29tZW9uZV9wcmVmZXJzKTogTGlrZXdpc2UuCgkoYWxsb2Nub19jYWxsc19jcm9zc2VkKTogTGlrZXdpc2UuCgkoYWxsb2Nub19uX3JlZnMpOiBMaWtld2lzZS4KCShhbGxvY25vX2xpdmVfbGVuZ3RoKTogTGlrZXdpc2UuCgkoZmluZF9yZWcpOiBSZW5hbWUgQUxMT0NOTyB0byBOVU0uCgoJKiByZWdjbGFzcy5jIChtYXlfbW92ZV9pbl9jb3N0KTogUmVuYW1lIGZyb20gbWF5X21vdmVfY29zdCwgYWxsCglyZWZlcmVuY2VzIHVwZGF0ZWQuCgkobWF5X21vdmVfb3V0X2Nvc3QpOiBOZXcgdmFyaWFibGUuCgkoaW5pdF9yZWdfc2V0c18xKTogSW5pdGlhbGl6ZSBtYXlfbW92ZV9vdXRfY29zdC4KCShyZWNvcmRfcmVnX2NsYXNzZXMpOiBVc2UgbWF5X21vdmVfb3V0X2Nvc3QuCgoJKiByZWdjbGFzcy5jIChkdW1wX3JlZ2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKHJlZ2NsYXNzKTogTmV3IHBhcmFtZXRlciBEVU1QLCBjYWxsIERVTVBfUkVHQ0xBU1MuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogT3BlbiBscmVnIGR1bXAgZmlsZSBiZWZvcmUgcmVnY2xhc3MsCglwYXNzIHJ0bF9kdW1wX2ZpbGUgdG8gcmVnY2xhc3MuCgkqIHJ0bC5oIChyZWdjbGFzcyk6IFVwZGF0ZSBwcm90b3R5cGUuCgpGcmkgTm92IDE5IDA2OjMyOjE5IENFVCAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2Lm1kIChuZWcsIG5vdCBhbmQgYWJzIHBhdHRlcm5zKTogUmV2bWFwIHRvIHVzZQoJaXg4Nl9leHBhbmRfdW5hcnlfb3BlcmF0b3IgYW5kIGl4ODZfdW5hcnlfb3BlcmF0b3Jfb2suCgkoYWRkP2YgYW5kIHN1Yj9mIGV4cGFuZGVycyk6IEZvcmNlIG9wZXJhbmQgMSB0byByZWdpc3Rlci4KCSogaTM4Ni5jIChpeDg2X2V4cGFuZF91bmFyeV9vcGVyYXRvcik6IFJld3JpdGUuCgkoaXg4Nl91bmFyeV9vcGVyYXRvcl9vayk6IEVuc3VyZSB0aGF0IG1lbW9yeSBvcGVyYW5kcwoJbWF0Y2ggcmVhbCBvcGNvZGUuCgkoaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2spOiBEbyBub3QgYWxsb3cgb3BlcmFuZCAxIHRvCgljb21lIGludG8gbWVtb3J5IGFuZCBvcGVyYW5kIDAgbm90LgoJKGl4ODZfZXhwYW5kX2JpbmFyeV9vcGVyYXRvcik6IEVuc3VyZSB0aGF0CglzcmMxIGlzIG5vdCBub24tbWF0Y2hpbmcgbWVtb3J5LgoKCSogaTM4Ni5tZCAobmVncz8yKTogUmV3cml0ZSB0byBleHBhbmRlcnMsIG5ldyBwYXR0ZXJucyBhbmQgc3BsaXR0ZXJzCgl0byBzdXBwb3J0IGludGVnZXIgcmVnaXN0ZXJzIGFuZCBtZW1vcnkuCgkoYWJzcz8yX2ludGVnZXIpOiBMaWtld2lzZS4KCgkqIGkzODYuaCAoZW51bSByZWdfY2xhc3MpOiBBZGQgRkxPQVRfSU5UX1JFR1MuCgkoUkVHX0NMQVNTX05BTUVTKTogTGlrZXdpc2UuCgkoUkVHX0NMQVNTX0NPTlRFTlRTKTogRGVmaW5lIEZMT0FUX0lOVF9SRUdTIGFzIHVuaW9uIG9mIEZMT0FUX1JFR1MKCWFuZCBHRU5FUkFMX1JFR1MuCgkqIGkzODYubWQgKHB1c2hzZik6IERvIG5vdCBwcmVmZXJyZSBGTE9BVF9SRUdTIG92ZXIgR0VORVJBTF9SRUdTLgoJKG1vdnNmKTogTGlrZXdpc2U7IHVuaWZ5IDR0aCBhbmQgNXRoIGFsdGVybmF0aXZlLgoJKHB1c2hkZik6IExpa2V3aXNlLgoJKG1vdmRmXzEpOiBMaWtld2lzZTsgcmVuYW1lIHRvIG1vdmRmX2ludGVnZXIuCgkocHVzaHhmKTogTGlrZXdpc2U7IHJlbmFtZSB0byBwdXNoeGZfaW50ZWdlcjsgZml4IG91dHB1dCB0ZW1wbGF0ZTsKCXJlbW92ZSByZWR1bmRhbnQgc3BsaXR0ZXIuCgkobW92eGZfMSk6IExpa2V3aXNlOyByZW5hbWUgdG8gbW92eGZfaW50ZWdlcjsgZml4IHNwbGl0dGVyJ3MgY29uZGl0aW9uLgoJKG1vdmRmX25vaW50ZWdlcik6IE5ldy4KCShtb3Z4Zl9ub2ludGVnZXIpOiBOZXcuCgkocHVzaHhmX25vaW50ZWdlcik6IE5ldy4KCgkqIGkzODYubWQgKGV4dGVuZD9mP2YpOiBTcGxpdCB0byBleHBhbmRlciBhbmQgcGF0dGVybiwgcmVmdXNlIHR3bwoJbWVtb3J5IG9wZXJhbmRzIGluIHBhdHRlcm5zLgoJKGZvcCopOiBSZWZ1c2UgdHdvIG1lbW9yeSBvcGVyYW5kcy4KCgkqIGkzODYubWQgKGFzaHJzaTNfMzEpOiBBbGxvdyBjbHRkIHdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSBldmVuCglvbiAhVEFSR0VUX1VTRV9DTFREIENQVXMuCgpGcmkgTm92IDE5IDEwOjQxOjE1IEdNVCAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogZXh0ZW5kLnRleGk6IERvY3VtZW50IEMrKyByZXN0cmljdGVkIHBvaW50ZXJzIGFuZCByZWZlcmVuY2VzLgoKMTk5OS0xMS0xOSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBjc2UuYyAoYWRkcl9hZmZlY3RzX3NwKTogTm8gbG9uZ2VyIGNvbmRpdGlvbmFsIG9uIEFVVE9fSU5DX0RFQy4KCShpbnZhbGlkYXRlX3NraXBwZWRfc2V0KTogQ2FsbCBpdCB1bmNvbmRpdGlvbmFsbHkuCgkoY3NlX3NldF9hcm91bmRfbG9vcCk6IExpa2V3aXNlLgoKVGh1IE5vdiAxOCAxNzoyOTozNCBNU1QgMTk5OQlEaWVnbyBOb3ZpbGxvIDxkbm92aWxsb0BjeWdudXMuY29tPgoKCSogcnRsLnRleGkgKG1lbSk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBhbGlhcy1zZXQgYXJndW1lbnQKCXRvIFJUWCBgbWVtJy4KCkZyaSBOb3YgMTggMTM6Mzk6MjIgQ0VUIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYuaCAoc3RydWN0X3Byb2Nlc3Nvcl9jb3N0cyk6IE5ldyBmaWVsZHMgaW50X2xvYWQsIGludF9zdG9yZSwKCWZwX21vdmUsIGZwX2xvYWQgYW5kIGZwX3N0b3JlCgkoUkVHSVNURVJfTU9WRV9DT1NUKTogRml4IGNvbW1lbnQsIGNhbGN1bGF0ZSBleGFjdGx5IHRoZSBjb3N0IG9mCglmcC0+aW50IG1vdmVzCgkoTUVNT1JZX01PVkVfQ09TVCk6IE5ldyBtYWNyby4KCSogaTM4Ni5jICgzODZfY29zdCk6IERlZmluZSBuZXcgZmllbGRzLgoJKGk0ODZfY29zdCk6IExpa2V3aXNlLgoJKHBlbnRpdW1fY29zdCk6IExpa2V3aXNlLgoJKHBlbnRpdW1wcm9fY29zdCk6IExpa2V3aXNlLgoJKGs2X2Nvc3QpOiBMaWtld2lzZS4KCkZyaSBOb3YgMTkgMTE6MTE6NTUgMTk5OSAgR3JlZyBNY0dhcnkgIDxna21AZ251Lm9yZz4KCQkJICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTY4ay9tNjhrZWxmLmg6IFN1cHByZXNzICcvKiB3aXRoaW4gY29tbWVudCcgd2FybmluZy4KCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoTUFTS19QQ1JFTCk6IERvbid0IHVzZSBzYW1lIHZhbHVlIGFzCglNQVNLX0FMSUdOX0lOVC4KCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoTUFTS19OT19TVFJJQ1RfQUxJR05NRU5UKTogTmV3IG1hY3JvLgoJKFRBUkdFVF9TVFJJQ1RfQUxJR05NRU5UKTogTmV3IG1hY3JvLgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAic3RyaWN0LWFsaWduIiBhbmQgIm5vLXN0cmljdC1hbGlnbiIuCgkoU1RSSUNUX0FMSUdOTUVOVCk6IERlcGVuZCBvbiBUQVJHRVRfU1RSSUNUX0FMSUdOTUVOVC4KCSogaW52b2tlLnRleGkgKE02ODB4MCBPcHRpb25zKTogRG9jdW1lbnQgLW1zdHJpY3QtYWxpZ24uCgpUaHUgTm92IDE4IDExOjEwOjAzIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni1wcm90b3MuaCAoc3BsaXRfeGYsIGl4ODZfc3BsaXRfbW92ZGkpOiBSZW1vdmUuCgkoaXg4Nl9zcGxpdF9sb25nX21vdmUpOiBEZWNsYXJlLgoJKiBpMzg2LmMgKHNwbGl0X3hmLCBpeDg2X3NwbGl0X21vdmRpKTogUmVtb3ZlLgoJKGl4ODZfc3BsaXRfdG9fcGFydHMsIGl4ODZfc3BsaXRfbG9uZ19tb3ZlKTogTmV3LgoJKiBpMzg2Lm1kIChkaW1vZGUgbW92ZSBzcGxpdHRlcnMpOiBVc2UgaXg4Nl9zcGxpdF9sb25nX21vdmUuCgkoZGZtb2RlIG1vdmUgc3BsaXR0ZXJzKTogTGlrZXdpc2UuCgkoeGZtb2RlIG1vdmUgc3BsaXR0ZXJzKTogTGlrZXdpc2UuCgkobW92c2ZfMSk6IEFsbG93IEYtPnIuCgkobW92ZGZfMSwgbW92eGZfMSk6IEFsbG93IEYtPnJvLgoKMTk5OS0xMS0xNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGV4Y2VwdC5oIChzdHJ1Y3QgZWhfZW50cnkpOiBBZGQgZ290b19lbnRyeV9wLgoJKGVoX3JlZ2lvbl9mcm9tX3N5bWJvbCk6IFJlbW92ZSBwcm90b3R5cGUuCgkqIGV4Y2VwdC5jIChmaW5kX2Z1bmNfcmVnaW9uX2Zyb21fc3ltYm9sKTogTmV3IGZ1bmN0aW9uLgoJKGVtaXRfY2xlYW51cF9oYW5kbGVyKTogTGlrZXdpc2UuCgkoZWhfcmVnaW9uX2Zyb21fc3ltYm9sKTogTWFrZSBpdCBzdGF0aWMuCgkoYWRkX25ld19oYW5kbGVyKTogVmVyaWZ5IHRoZSBhcmd1bWVudC4KCShmaW5kX2Z1bmNfcmVnaW9uKTogVXBkYXRlIGNvbW1lbnQuCgkoZXhwYW5kX2VoX3JlZ2lvbl9lbmQpOiBFeHBhbmQgaGFuZGxlcnMgaGVyZSwgcmF0ZXIgdGhhbiB3YWl0aW5nCgl1bnRpbCBleHBhbmRfbGVmdG92ZXJfY2xlYW51cHMgb3Igc3RhcnRfYWxsX2NhdGNoLgoJKGV4cGFuZF9sZWZ0b3Zlcl9jbGVhbnVwcyk6IERvbid0IGV4cGFuZCBoZXJlLgoJKGV4cGFuZF9zdGFydF9hbGxfY2F0Y2gpOiBPciBoZXJlLgoJKGV4cGFuZF9yZXRocm93KTogQ2hlY2sgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGZpbmRfZnVuY19yZWdpb24uCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBFbWl0IHRoZSBjYXRjaF9jbGF1c2VzLgoKMTk5OS0xMS0xOCAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEFkZCBuZWNlc3NhcnkgY2hlY2sgZm9yIE5VTEwuCgoxOTk5LTExLTE4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKG1haW4pOiBDb3JyZWN0bHkgZGV0ZWN0IGFuIHVucmVjb2duaXplZCBvcHRpb24uCgoJKiBjcHBpbml0LmMgKGNwcF9oYW5kbGVfb3B0aW9uKTogRG8gbm90IGNsYWltIHRvIGhhdmUgY29uc3VtZWQKCWEgLWYgb3B0aW9uIGlmIGl0IGhhcyBub3QgYmVlbiByZWNvZ25pemVkLgoKVGh1IE5vdiAxOCAwMDo1OToxMSAxOTk5ICBNaWNoYWVsIEdzY2h3aW5kICA8bWlrZWdAYWxhZ29hcy53YXRzb24uaWJtLmNvbT4KCgkqIGJhc2ljLWJsb2NrLmggKHVwZGF0ZV9saWZlX2V4dGVudCk6IFJlbW92ZSB0cmFpbGluZyBjb21tYSBvbgoJZW51bWVyYXRpb24gdHlwZSBsaXN0LgoKMTk5OS0xMS0xOCBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdHJ1Y3RvcikgU29sdmVkIHByb2JsZW0gd2l0aCBsb25nIGxvbmcKCWJpdGZpZWxkcy4gQ29ycmVjdGVkIGNhbGN1bGF0aW5nIHRoaXNfdGltZSBhbmQgc2hpZnQuIEFsc28KCWNvcnJlY3RlZCBjYWxjdWxhdGluZyBtYXNrIHdoZW4gQklUU19QRVJfVU5JVCA9PSAzMiAoYzR4KS4KCldlZCBOb3YgMTcgMjM6NDY6MTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChzcGxpdF9lZGdlKTogVGFrZSBsb29waW5nIHN0cnVjdHVyZSBpbnRvIGFjY291bnQgd2hlbgoJZGV0ZXJtaW5pbmcgd2hlcmUgdG8gcHV0IHRoZSBuZXcgYmxvY2sgbm90ZS4KCldlZCBOb3YgMTcgMjA6NDI6NDMgMTk5OSAgSmVmZiBIb2xjb21iICA8amVmZmhAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChnZ2Mtbm9uZS5vKTogUHJvdmlkZSBob3N0IHNwZWNpZmljIHZlcnNpb24gaWYKCW5lZWRlZC4KCldlZCBOb3YgMTcgMTY6NTE6MjMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNzZS5jIChkZWxldGVfdHJpdmlhbGx5X2RlYWRfaW5zbnMpOiBJZGVudGlmeSBuby1vcCBpbnNucwoJY29udGFpbmluZyBzdWJyZWdzIHRvby4KCldlZCBOb3YgMTcgMTc6Mzk6NDggTVNUIDE5OTkJRGllZ28gTm92aWxsbyA8ZG5vdmlsbG9AY3lnbnVzLmNvbT4KCgkqIGludm9rZS50ZXhpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgLW11bmluaXQtY29uc3QtaW4tcm9kYXRhLgoJKiBjb25maWcvbWlwcy9taXBzLmggKE1BU0tfVU5JTklUX0NPTlNUX0lOX1JPREFUQSk6IERlZmluZS4KCShUQVJHRVRfVU5JTklUX0NPTlNUX0lOX1JPREFUQSk6IERlZmluZS4KCSh0ZXh0X3NlY3Rpb24pOiBBZGQgc3dpdGNoZXMgLW11bmludC1jb25zdC1pbi1yb2RhdGEgYW5kCgktbW5vLXVuaW5pdC1jb25zdC1pbi1yb2RhdGEuCgkoQVNNX09VVFBVVF9DT01NT04pOiBSZW1vdmUuCgkoQVNNX09VVFBVVF9BTElHTkVEX0RFQ0xfQ09NTU9OKTogRGVmaW5lLiBDaGVjayBpZiB1bmluaXRpYWxpemVkCgljb25zdCBvYmplY3RzIHNob3VsZCBiZSBwbGFjZWQgaW4gcmVhZC1vbmx5IGRhdGEuIE90aGVyd2lzZSBkZWNsYXJlCgl0aGVtIGluIGNvbW1vbi4KCldlZCBOb3YgMTcgMTY6Mzg6MzIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZV8xKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgoKV2VkIE5vdiAxNyAxNToxODozMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSoganVtcC5jIChqdW1wX29wdGltaXplXzEpOiBEb24ndCB0cnkgdG8gZHVwbGljYXRlIHRoZSBsb29wIGV4aXQKCXRlc3QgaWYgb3B0aW1pemluZyBmb3Igc2l6ZS4KCjE5OTktMTEtMTcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBNYWtlZmlsZS5pbiAodG9wbGV2Lm8pOiBEZXBlbmQgb24gZXhjZXB0LmguCgkoZHdhcmYyb3V0Lm8sbG9vcC5vLGZsb3cubyxoYWlmYS1zY2hlZC5vKTogTGlrZXdpc2UuCgpNb24gTm92IDE1IDIyOjQ1OjM5IENFVCAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2Lm1kIChkaXZtb2RzaTQpOiBSZXdyaXRlIHRvIGV4cGFuZGVyLgoJKCpkaXZtb2RzaTRfbm9jbHRkKTogTmV3LgoJKCpkaXZtb2RzaTRfY2x0ZCk6IE5ldy4KCShkaXZtb2RzaTQgc3BsaXR0ZXIpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlbiBpbnB1dCBjb21lcyBpbiBlZHguCgkodWRpdm1vZGhpNCk6IERvIG5vdCB1c2UgY29uc3RyYWludHMgaW4gZXhhbmRlci4KCShhc2hyc2kzXzMxKTogQ29uZGl0aW9uaXplIGJ5IFRBUkdFVF9VU0VfQ0xURC4KCjE5OTktMTEtMTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChwdXNoX2RlY2xfc2NvcGUpOiBTdGlsbCB1c2UgZGVjbF9zY29wZV9kZXB0aCAtIDEKCWZvciB0aGUgY29tbW9uIGNhc2UuCgoxOTk5LTExLTE2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIGV4cGxvdy5jIChoYXJkX2Z1bmN0aW9uX3ZhbHVlKTogQWRkIG91dGdvaW5nIGFyZ3VtZW50LgoJKiBleHByLmggKGhhcmRfZnVuY3Rpb25fdmFsdWUpOiBEZWNsYXJlIGl0LgoJKiBjYWxscy5jIChleHBhbmRfY2FsbCwgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBVcGRhdGUgY2FsbGVycy4KCSogZnVuY3Rpb24uYyAoYWdncmVnYXRlX3ZhbHVlX3ApOiBEaXR0by4KCShkaWRkbGVfcmV0dXJuX3ZhbHVlKTogTXVzdCBsb29rIGF0IHRoZSBvdXRnb2luZyByZWdpc3RlcnMKCW9uIGFyY2hzIHdpdGggcmVnaXN0ZXIgd2luZG93cy4KCk1vbiBOb3YgMTUgMjA6NDY6NDUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX2J1aWxkX3ZhX2xpc3QpOiBVc2UgbWFrZV9sYW5nX3R5cGUgYW5kCglpbml0aWFsaXplIFRZUEVfTkFNRSBmb3IgdGhlIHZhX2xpc3QgcmVjb3JkLgoKCSogZmxvdy5jIChjYWxjdWxhdGVfZ2xvYmFsX3JlZ3NfbGl2ZSk6IFplcm8gYmItPmF1eCB0byBiZWdpbi4KCgkqIGdnYy1jb21tb24uYyAoZ2djX3ByaW50X3N0YXRpc3RpY3MpOiBDYXN0IHNpemVfdCB0byB1bnNpZ25lZCBsb25nCglmb3IgcHJpbnRpbmcuCgkqIGdnYy5oIChzdHJ1Y3QgZ2djX3N0YXRpc3RpY3MpOiBSZWFycmFuZ2UgZWxlbWVudHMgZm9yIGJldHRlcgoJcGFja2luZyBvbiA2NC1iaXQgaG9zdHMuCgkqIGxjbS5jIChjb21wdXRlX2xhdGVyaW4pOiBTdG9yZSBhIHNpemVfdCBub3QgYW4gaW50IGluIGJiLT5hdXguCgkoY29tcHV0ZV9uZWFyZXJvdXQpOiBMaWtld2lzZS4KClR1ZSBOb3YgMTYgMTQ6Mzc6NTIgMTk5OSAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BjeWdudXMuY29tPgoKCSogY29uZmlnL3JzNjAwMC9yczYwMDAuYyAoZmlyc3RfcmVnX3RvX3NhdmUpOiBTYXZlCglQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSB3aGVuIC1mcGljIGV2ZW4gdGhvdWdoIGl0IGlzIGZpeGVkLgoKMTk5OS0xMS0xNSAgSmFzb24gTWVycmlsbCAgPGphc29uQGNhc2V5LmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoc2NvcGVfZGllX2Zvcik6IERvbid0IHJlbHkgb24gdGhlIGRlY2xfc2NvcGVfdGFibGUKCW5vdGlvbiBvZiBuZXN0aW5nIHRvIGZpbmQgdGhlIERJRSBmb3IgYSB0eXBlIG9yIGZ1bmN0aW9uLgoJRElFcyBjYW4gZ28gaW4gbGltYm8gZXZlbiBpZiB3ZSBnb3QgYSBjb250ZXh0X2RpZS4KCShwdXNoX2RlY2xfc2NvcGUpOiBPdXIgY29udGV4dCBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gZGVjbF9zY29wZV90YWJsZS4KCShnZW5fc3RydWN0X29yX3VuaW9uX3R5cGVfZGllKTogRG9uJ3QgdXNlIFRSRUVfUEVSTUFORU5UIHRvIHRlc3QKCWZvciBsb2NhbCB0eXBlLgoJKGdlbl9kZWNsX2RpZSk6IElnbm9yZSBOQU1FU1BBQ0VfREVDTHMgZm9yIG5vdy4KCShnZW5fdHlwZV9kaWUpOiBXcml0aW5nIG91dCB0aGUgY29udGV4dCBkb2Vzbid0IGNhdXNlIG1lbWJlciBjbGFzcwoJdGVtcGxhdGUgaW5zdGFudGlhdGlvbnMgdG8gYmUgd3JpdHRlbiBvdXQgYXMgd2VsbC4KCk1vbiBOb3YgMTUgMTU6MzM6MTggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5oIChBU01fT1VUUFVUX0RFRik6IE5ldy4KCUJhc2VkIG9uIHByb3Bvc2VkIGFkZGl0aW9uIGZyb20gRGF2aWQgRWRlbHNvaG4uCgoxOTk5LTExLTE1ICBSb2JlcnQgTGlwZSAgPFJvYmVydExpcGVAdXNhLm5ldD4KCSAgICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmCgkoQUFCX3N2cjRfcmVwbGFjZV9ieXRlb3JkZXIpOiBhZGRlZC4gIFRha2VzIGFkdmFudGFnZSBvZiBHQ0MgZmVhdHVyZXMKCSh1bml4d2FyZTdfYnl0ZW9yZGVyX2ZpeCk6IGFkZGVkLiAgUmVtb3ZlcyBjb25mbGljdHMgZm9yIG5ldyBkZWZzCgkJaW4gbmV0L2luZXQuaC4KCShzdnI1X21hY2hfZGVmaW5lcyk6IGFkZGVkLiAgTGlrZSBzdnI0X21hY2hfZGVmaW5lcywgd2l0aCBuZXcgc3ludGF4Cgkoc3ZyNF9lbmRpYW4pOiBlbmFibGVkIHdpdGggU1ZSNQoJKHN2cjRfbWtkZXYpOiBzaW1wbGlmaWVkIHN5bnRheCBhbmQgZW5hYmxlZCB3aXRoIFNWUjUKClN1biBOb3YgMTQgMTg6NDk6MzcgMTk5OSAgRGF2aWQgTydCcmllbiAgPG9icmllbkBGcmVlQlNELm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIGxpYmdjYzIgdGhyZWFkcyBzdXBwb3J0IG9uIEZyZWVCU0QgcGxhdGZvcm1zLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZy90LWZyZWVic2QtdGhyZWFkOiBOZXcgZmlsZS4KClN1biBOb3YgMTQgMjM6MTE6MDUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5jIChpeDg2X2RlY29tcG9zZV9hZGRyZXNzKTogVmVyaWZ5IHRoZSBiYXNlIGlzIGEgUkVHCgliZWZvcmUgdHJ5aW5nIHRvIGV4YW1pbmUgaXRzIHJlZ2lzdGVyIG51bWJlci4KCgkqIGJhc2ljLWJsb2NrLmg6IFJlbW92ZSBhbGwgI2RlZmluZXMgYW5kIHByb3RvdHlwZXMgcmVsYXRlZCB0bwoJaW50ZWdlciBsaXN0cy4KCShmcmVlX2JiX21lbSwgY29tcHV0ZV9wcmVkc19zdWNjcyk6IFJlbW92ZSBwcm90b3R5cGUuCgkqIHJ0bC5oIChmcmVlX2JiX21lbSk6IFJlbW92ZSBwcm90b3R5cGUuCgkqIGZsb3cuYyAoYWxsb2NfaW50X2xpc3Rfbm9kZSk7IFJlbW92ZSBmdW5jdGlvbi4KCShhZGRfaW5zdF9saXN0X25vZGUsIGZyZWVfaW50X2xpc3QsIGFkZF9wcmVkX3N1Y2MpOiBMaWtld2lzZS4KCShjb21wdXRlX3ByZWRzX3N1Y2NzLCBmcmVlX2JiX21lbSk6IExpa2V3aXNlLgoJKiBnY3NlLmMgKGdjc2VfbWFpbik6IERvIG5vdCBjYWxsIGZyZWVfYmJfbWVtIGFueW1vcmUuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogTGlrZXdpc2UuCgkqIGhhaWZhLXNjaGVkLmMgKGJ1aWxkX2NvbnRyb2xfZmxvdyk6IFVzZSBmbG93IGdlbmVyYXRlZCBlZGdlCglsaXN0IHRvIGJ1aWxkIHRoZSBoYWlmYSBzcGVjaWZpYyBlZGdlIGxpc3QuCgkoZmluZF9yZ25zKTogVXNlIG5ldyBDRkcgZGF0YSBzdHJ1Y3R1cmVzIGluc3RlYWQgb2YgcHJlZC9zdWNjIGxpc3RzLgoJKHNjaGVkdWxlX2luc25zKTogRG8gbm90IGJ1aWxkIHByZWQvc3VjYyBsaXN0cyBhbnltb3JlLiAgSW5zdGVhZAoJYnVpbGQgdGhlIGVkZ2UgdGFibGUuCgoJKiBiYXNpYy1ibG9jay5oIChkdW1wX2JiX2RhdGEpOiBSZW1vdmUgZGVjbGFyYXRpb24uCgkqIGZsb3cuYyAoZHVtcF9iYl9kYXRhKTogUmVtb3ZlIGZ1bmN0aW9uLgoJKiBzYml0bWFwLmMgKHNiaXRtYXBfaW50ZXJzZWN0X29mX3ByZWRzdWNjKTogRGVsZXRlIGZ1bmN0aW9uLgoJKHNiaXRtYXBfdW5pb25fb2ZfcHJlZHN1Y2MpOiBMaWtld2lzZS4KCgkqIGdjc2UuYyAoZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3NfMSk6IEtpbGwgdW51c2VkIHNfcHJlZHMKCWFyZ3VtZW50LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShkZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrc18xKTogTm8gbG9uZ2VyIG5lZWQgdG8gY29tcHV0ZSB0aGUKCXByZWQvc3VjYyBsaXN0cy4KCgkqIGdjc2UuYyAocHJlX2V4cHJfcmVhY2hlc19oZXJlX3ApOiBLaWxsIENIRUNLX1BSRV9DT00gYXJndW1lbnQuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHByZV9leHByX3JlYWNoZXNfaGVyZV9wX3dvcmspOiBMaWtld2lzZS4KCShwcmVfZWRnZV9pbnNlcnQpOiBObyBsb25nZXIgY2FsbCBwcmVfZXhwcl9yZWFjaGVzX2hlcmVfcC4KCSogbGNtLmMgKGNvbXB1dGVfbGF0ZXJpbik6IEZpeCBpbml0aWFsaXphdGlvbiBvZiBMQVRFUi4KCShjb21wdXRlX25lYXJlcm91dCk6IFNpbWlsYXJseSBmb3IgTkVBUkVSLgoKU3VuIE5vdiAxNCAxMjo0MTo1NyAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGNzZS5jIChzZXRfbm9udmFyeWluZ19hZGRyZXNzX2NvbXBvbmVudHMpOiBEZWxldGUgdW51c2VkIGZ1bmN0aW9uLgoJKHJlZmVyc190b19wKTogTGlrZXdpc2UuCgpGcmkgTm92IDEyIDIwOjUzOjIyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9uLmMgKGRpZGRsZV9yZXR1cm5fdmFsdWUpOiBTZXQgUkVHX0ZVTkNUSU9OX1ZBTFVFX1AgYXMKCW5lZWRlZC4KClNhdCBOb3YgMTMgMTY6MjA6MDkgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogZGVmYXVsdHMuaCAoQVNNX09VVFBVVF9BTFRFUk5BVEVfTEFCRUxfTkFNRSk6IFdyYXAgbWFjcm8KCWRlZmluaXRpb24gaW4gZG8gd2hpbGUgKDApLgoKRnJpIE5vdiAxMiAxNjoyNjoyNSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBzdG10LmMgKHB1c2hjYXNlLCBwdXNoY2FzZV9yYW5nZSk6IFBhcnRpYWxseSByZXZlcnQgT2N0IDI4IGNoYW5nZS4KCkZyaSBOb3YgMTIgMTI6NDM6NDkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IE1ha2UgdGVtcCBhbiB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULgoKRnJpIE5vdiAxMiAxNToxNDoxOSAxOTk5ICBWbGFkaW1pciBNYWthcm92ICA8dm1ha2Fyb3ZAdG9mdS50by5jeWdudXMuY29tPgoKCSogaTk2MC5oIChDQU5fREVCVUdfV0lUSE9VVF9GUCk6IERvbid0IGRlZmluZSBpdC4KCShGUkFNRV9QT0lOVEVSX1JFUVVJUkVEKTogRG9uJ3Qgd29ycnkgYWJvdXQgbm9ubG9jYWwgZ290by4KCShFTElNSU5BQkxFX1JFR1MsIENBTl9FTElNSU5BVEUsIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogTmV3LgoJKElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQpOiBSZW1vdmUgaXQuCgoJKiBpOTYwLmMgKGk5NjBfZnVuY3Rpb25fcHJvbG9ndWUpOiBEb24ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgZzgtZzExCglzYXZlZCBvbiB0aGUgc3RhY2suICBPdXRwdXQgbW9yZSBhY2N1cmF0ZSBzdGFjayBmcmFtZSBzdGF0aXN0aWNzCglpbnRvIGFzc2VtYmxlciBmaWxlLgoKMTk5OS0xMS0xMiAxMTo0NyAtMDgwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogZ2VuZXh0cmFjdC5jIChyZWNvcmRfaW5zbl9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKGdldF9pbnNuX25hbWUpOiBObyBsb25nZXIgYSBzdHViLgoJKG1haW4pOiBDYWxsIHJlY29yZF9pbnNuX25hbWUgZm9yIGVhY2ggaW5zbi4gIEFmdGVyIGVhY2ggbGFiZWwKCXdyaXR0ZW4sIHByaW50IHRoZSBpbnNuIG5hbWUgaW4gYSBjb21tZW50LgoKRnJpIE5vdiAxMiAxMzo0NTowMiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBvdXRwdXQuaCAoY29uc3Rfc2VjdGlvbiwgaW5pdF9zZWN0aW9uLCBmaW5pX3NlY3Rpb24pOiBBZGQKCXByb3RvdHlwZXMuCgoJKiBhbHBoYS9lbGYuaCAoY29uc3Rfc2VjdGlvbik6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCgkqIHN2cjQuaCAoY29uc3Rfc2VjdGlvbik6IExpa2V3aXNlLgoKRnJpIE5vdiAxMiAwODo1NDoyMiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdHJlZS5oIChTQVZFX0VYUFJfUEVSU0lTVEVOVF9QKTogTmV3IG1hY3JvLgoJKiB0cmVlLmMgKGFycmF5X3R5cGVfbmVsdHMpOiBEb24ndCBoYW5kbGUgU0FWRV9FWFBScyBzcGVjaWFsbHkuCgkodW5zYXZlX2V4cHJfbm93KTogRG9uJ3QgdW5zYXZlIFNBVkVfRVhQUl9QRVJTSVNURU5UX1AKCWV4cHJlc3Npb25zLgoJKiBzdG9yLWxheW91dC5jICh2YXJpYWJsZV9zaXplKTogU2V0IFNBVkVfRVhQUl9QRVJTSVNURU5UX1Agb24KCXZhcmlhYmxlLXNpemVkIGFycmF5IGJvdW5kcy4KCkZyaSBOb3YgMTIgMDg6MDQ6NDUgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBkZWZhdWx0cy5oIChBU01fT1VUUFVUX0FMVEVSTkFURV9MQUJFTF9OQU1FKTogIFVzZQoJQVNNX09VVFBVVF9MQUJFTC4KCkZyaSBOb3YgMTIgMTM6MzE6NTQgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBjb25maWcvYXJtL2FybS5oIChMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogVHJlYXQgUUltb2RlCglhZGRyZXNzZXMgdGhlIHNhbWUgd2F5IEdPX0lGX0xFR0lUSU1BVEVfSU5ERVggZG9lcy4KCkZyaSBOb3YgMTIgMTI6MzY6MDQgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBjc2UuYyAoaGFzaF9hcmdfaW5fc3RydWN0KTogRGVsZXRlLgoJKHN0cnVjdCB0YWJsZV9lbHQpOiBEZWxldGUgZWx0IGluX3N0cnVjdC4KCShzdHJ1Y3Qgc2V0KTogRGVsZXRlIGVsdCBzcmNfaW5fc3RydWN0LgoJKG1lcmdlX2VxdWl2X2NsYXNzZXMpOiBEb24ndCBzZXQgZWl0aGVyIGhhc2hfYXJnX2luX3N0cnVjdCBvcgoJdGhlIGNvcnJlc3BvbmRpbmcgaW5fc3RydWN0IGVsdHMuCgkoY2Fub25faGFzaCk6IExpa2V3aXNlLgoJKHNhZmVfaGFzaCk6IExpa2V3aXNlLgoJKGZpbmRfYmVzdF9hZGRyKTogTGlrZXdpc2UuCgkocmVjb3JkX2p1bXBfY29uZCk6IExpa2V3aXNlLgoJKGNzZV9pbnNuKTogTGlrZXdpc2UuCgpUaHUgTm92IDExIDE5OjQ1OjI0IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoaW52YXJpYW50X3AsIGNhc2UgTUVNKTogUHV0IE1FTV9WT0xBVElMRV9QIGNoZWNrIGJhY2suCgoJKiBkYnhvdXQuYyAoZGJ4b3V0X3R5cGUsIGNhc2UgSU5URUdFUl9UWVBFKTogSGFuZGxlIHRvbyBsYXJnZQoJdW5zaWduZWQgdHlwZXMuCgpUaHUgTm92IDExIDE4OjU0OjI0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9uLmMgKGRpZGRsZV9yZXR1cm5fdmFsdWUpOiBQdXQgYmFjayBjaGVjayB0aGF0IHRoZSBERUNMX1JUTAoJZm9yIHRoZSBmdW5jdGlvbiBpcyBhIHJlZ2lzdGVyLgoKCSogZnVuY3Rpb24uYyAoZGlkZGxlX3JldHVybl92YWx1ZSk6IFVzZSBoYXJkX2Z1bmN0aW9uX3ZhbHVlIHRvCglnZXQgYW4gcnR4IHN1aXRhYmxlIGZvciB1c2UgaW4gdGhlIFVTRS9DTE9CQkVSIGluc24uCgoJKiBnbG9iYWwuYyAoZ2xvYmFsX2NvbmZsaWN0cyk6IFVwZGF0ZSBjb21tZW50cy4KCShyZWNvcmRfY29uZmxpY3RzKTogTm8gbmVlZCB0byByZWNvcmQgY29uZmxpY3RzIGJldHdlZW4gcHNldWRvcyBoZXJlLgoKMTk5OS0xMS0xMSAgQnJ1Y2UgS29yYiAgPGF1dG9nZW5AbGludXhib3guY29tPgoKCSogZml4aW5jL2ZpeGluY2wuYzogQWRkZWQgdmVyYm9zZSBsZXZlbHMgZm9yIHN0YXR1cyBtZXNzYWdlcwoKVGh1IE5vdiAxMSAxMzoyMzowNCAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZV8xKTogQXZvaWQgcGFzc2luZyBhbiBydHggdGhhdCBpcyBub3QgYW4KCW9wZXJhbmQgYXMgYXJndW1lbnQgdG8gZXhwYW5kX2FuZCBvciBleHBhbmRfYmlub3AuCgpUaHUgTm92IDExIDAyOjIxOjE2IDE5OTkgIFJvZG5leSBCcm93biA8Um9kbmV5QnJvd25AcG1zYy5jb20+CgoJKiB4Y29mZm91dC5jICh4Y29mZm91dF9zb3VyY2VfZmlsZSk6IENoYW5nZSBnZ2NfYWRkX3Jvb3QgdG8KCWdjY19hZGRfc3RyaW5nX3Jvb3QuCgpXZWQgTm92IDEwIDIxOjI0OjE5IDE5OTkgIEphc29uIEVja2hhcmR0ICA8amxlQGN5Z251cy5jb20+CgoJKiBjb25maWcvcGEvcGEuaCAoTUFTS19SRVRVUk5fQUREUik6IENoYW5nZSAweGZmZmZmZmZjIHRvIC00LgoKV2VkIE5vdiAxMCAxNTo1NjoxNiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKGNvbXB1dGVfZmxvd19kb21pbmF0b3JzKTogSW5pdGlhbGx5IHB1dCBhbGwgYmxvY2tzIG9uCgl0aGUgd29ya2xpc3QuCgkqIGxjbS5jIChjb21wdXRlX2FudGlub3V0X2VkZ2UsIGNvbXB1dGVfYXZhaWxhYmxlKTogU2ltaWxhcmx5LgoJKiBnY3NlLmMgKGNvbXB1dGVfY3Byb3BfYXZpbm91dCk6IFJlbW92ZS4KCShjb21wdXRlX2Nwcm9wX2RhdGEpOiBVc2UgY29tcHV0ZV9hdmFpbGFibGUuCgkoZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3NfMSk6IFVzZSBjb21wdXRlX2F2YWlsYWJsZS4KCgkqIGJhc2ljLWJsb2NrLmggKGNvbXB1dGVfYXZhaWxhYmxlKTogUmV0dXJucyBhIHZvaWQgbm93LgoJKiBnY3NlLmMgKG9uZV9jbGFzc2ljX2djc2VfcGFzcyk6IERvIG5vdCBleHBlY3QgY29tcHV0ZV9hdmFpbGFibGUKCXRvIHJldHVybiBhIHZhbHVlIGFueW1vcmUuCgkqIGxjbS5jIChjb21wdXRlX2F2YWlsYWJsZSwgY29tcHV0ZV9hbnRpbm91dF9lZGdlKTogUmV2YW1wIHRvIHVzZQoJd29ya2xpc3RzLiAgRml4IGJvdW5kYXJ5IGNhc2VzLiBDb21wdXRlIG1heGltYWwgc29sdXRpb25zLgoJKGNvbXB1dGVfbGF0ZXJpbiwgY29tcHV0ZV9uZWFyZXJvdXQpOiBTaW1pbGFybHkuCgoJKiBkd2FyZjJvdXQuYyAoYWRkX0FUX2xvY2F0aW9uX2Rlc2NyaXB0aW9uKTogQWxsb3cKCShtZW0gKHBsdXMgKHBzZXVkbykgKC4uLikpIHRvby4KCldlZCBOb3YgMTAgMTA6NTI6NDIgMTk5OSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2NjLmMgKGRvX3NwZWNfMSk6IFN1cHBvcnQgdGV4dCBiZXR3ZWVuIGAldScgYW5kIGAlTycuCgpXZWQgTm92IDEwIDEyOjQzOjIxIDE5OTkgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoJCQkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGluaXQuYzogVGVzdCBgR0NDX1ZFUlNJT04nLCBub3QgYEhBVkVfR0NDX1ZFUlNJT04nLgoKCSogZ2Fuc2lkZWNsLmg6IExpa2V3aXNlLgoKCSogcnRsLmM6IExpa2V3aXNlLgoKCSogcnRsLmg6IExpa2V3aXNlLgoKCSogdG9wbGV2Lmg6IExpa2V3aXNlLgoKCSogdHJlZS5jOiBMaWtld2lzZS4KCgkqIHRyZWUuaDogTGlrZXdpc2UuCgoJKiB2YXJyYXkuYzogTGlrZXdpc2UuCgoJKiB2YXJyYXkuaDogTGlrZXdpc2UuCgpXZWQgTm92IDEwIDEwOjU3OjIyIDE5OTkgIENsaW50b24gUG9wZXR6ICA8Y3BvcGV0ekBjeWdudXMuY29tPgoKCSogZ2Nvdi5jIChzdHJ1Y3QgYXJjZGF0YSk6IEFkZCBoaXRzIGFuZCB0b3RhbCwgcmVtb3ZlIHByb2IuCgkob3V0cHV0X2JyYW5jaF9jb3VudHMpOiBOZXcuCgkocHJvY2Vzc19hcmdzKTogU2V0IG91dHB1dF9icmFuY2hfY291bnRzIGlmIC1jLgoJKGNhbGN1bGF0ZV9icmFuY2hfcHJvYnMpOiBTdG9yZSBoaXRzIGFuZCB0b3RhbCBpbnN0ZWFkIG9mCglwZXJjZW50YWdlLgoJKG91dHB1dF9kYXRhKTogRW1pdCBjb3VudHMgaWYgb3V0cHV0X2JyYW5jaF9jb3VudHMgaXMgdHJ1ZS4KCSogZ2Nvdi50ZXhpIChJbnZva2luZyBHY292KTogRG9jdW1lbnQgLWMgc3dpdGNoLi4KCldlZCBOb3YgMTAgMDE6MTA6NDEgMTk5OSAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgoJKiBnZW5vdXRwdXQuYyAob3V0cHV0X2luc25fZGF0YSk6IENhc3QgYElOU05fT1VUUFVUX0ZPUk1BVF9NVUxUSScgYW5kCglgSU5TTl9PVVRQVVRfRk9STUFUX0ZVTkNUSU9OJyB0byBgUFRSJy10eXBlLgoKV2VkIE5vdiAxMCAwMDo1MTo0MSAxOTk5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLnNlPgoKCSogaW52b2tlLnRleGkgKEMgRGlhbGVjdCBPcHRpb25zKTogQWRkIG1pc3NpbmcgYnVpbHRpbnMgZnJvbQoJYy1jb21tb24uYyB0byBsaXN0LgoJKiBleHRlbmQudGV4aSAoT3RoZXIgQnVpbHRpbnMpOiBDb3B5IHRvIHRoaXMgbGlzdC4KCldlZCBOb3YgMTAgMDQ6NTg6MDkgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAbHNkLmljLnVuaWNhbXAuYnI+CgoJKiBNYWtlZmlsZS5pbiAocmVjb2cubyk6IFVzZSBCQVNJQ19CTE9DS19IIG1hY3JvLgoJKHByaW50LXJ0bC5vLCAkKEhPU1RfUFJFRklYXzEpcHJpbnQtcnRsLm8pOiBMaWtld2lzZS4gIFJlbW92ZQoJcmVkdW5kYW50IGJpdG1hcC5oLgoKV2VkIE5vdiAxMCAwMDowMjo1MyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKGNvbXB1dGVfZmxvd19kb21pbmF0b3JzKTogTm8gbG9uZ2VyIHRyZWF0IGJhc2ljIGJsb2NrIDAKCW9yIChuX2Jhc2ljX2Jsb2NrcyAtIDEpIHNwZWNpYWxseS4gIENsZWFyIHRoZSBBVVggZmllbGQgYmVmb3JlCglzdGFydGluZyBjb21wdXRhdGlvbiBvZiBkb21zL3Bkb21zLiAgRml4IGluaXRpYWwgc3RhdGUgZm9yIHBkb21zLgoKV2VkIE5vdiAxMCAwMzo1ODowOCAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBsc2QuaWMudW5pY2FtcC5icj4KCgkqIE1ha2VmaWxlLmluICgkKEhPU1RfUFJFRklYXzEpcnRsLm8pOiBVcGRhdGUgZGVwZW5kZW5jaWVzIHRvCgltYXRjaCBydGwubydzOiBhZGRlZCBnZ2MuaCBhbmQgdG9wbGV2LmgKCSgkKEhPU1RfUFJFRklYXzEpcHJpbnQtcnRsLm8pOiBMaWtld2lzZTogYWRkZWQgc3lzdGVtLmguCgkoJChIT1NUX1BSRUZJWF8xKXJ0bGFuYWwubyk6IExpa2V3aXNlOiBhZGRlZCBzeXN0ZW0uaC4KCSgkKEhPU1RfUFJFRklYXzEpb2JzdGFjay5vKTogTGlrZXdpc2U6IGFkZGVkICQoQ09ORklHX0gpLgoKVHVlIE5vdiAgOSAxMDozMDowOCAxOTk5ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBjb25maWcvaTM4Ni94bS1kamdwcC5oIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSk6IFJlbmFtZWQKCWZyb20gSEFWRV9ET1NfQkFTRURfRklMRVNZU1RFTS4KCSogZ2NjLmMgKGZpbmRfYV9maWxlKTogVXNlIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNLCBub3QKCUhBVkVfRE9TX0JBU0VEX0ZJTEVTWVNURU0uCgkobWFpbik6IExpa2V3aXNlLgoJKHNwbGl0X2RpcmVjdG9yaWVzKTogT25seSBzcGVjaWFsLWNhc2UgRE9TIGZpbGUgbmFtZXMgaWYKCUhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNIGlzIGRlZmluZWQuICBVc2UgSVNfRElSX1NFUEFSQVRPUgoJaW5zdGVhZCBvZiBleHBsaWNpdCB0ZXN0cy4gIENvbmRpdGlvbmFsaXplIG9uICFWTVMuCgkobWFrZV9yZWxhdGl2ZV9wcmVmaXgpOiBVc2UgSVNfRElSX1NFUEFSQVRPUiBpbnN0ZWFkIG9mIGV4cGxpY2l0Cgl0ZXN0cy4gIENvbmRpdGlvbmFsaXplIG9uICFWTVMuCgkocHJvY2Vzc19jb21tYW5kKTogT25seSB1c2UgbWFrZV9yZWxhdGl2ZV9wcmVmaXggaWYgIVZNUy4KCShmcmVlX3NwbGl0X2RpcmVjdG9yaWVzKTogQ29uZGl0aW9uYWxpemUgb24gIVZNUy4KCShESVJfVVApOiBDb25kaXRpb25hbGl6ZSBvbiAhVk1TLgoKV2VkIEp1biAgOSAxNjo1NzoxMSAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGdjYy5jIChTVEFOREFSRF9CSU5ESVJfUFJFRklYKTogUHJvdmlkZSBkZWZhdWx0LgoKRnJpIEZlYiAgNSAxNDoyMjowMSAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGdjYy5jIChtYWtlX3JlbGF0aXZlX3ByZWZpeCk6IEhhbmRsZSB0aGUgSEFWRV9FWEVDVVRBQkxFX1NVRkZJWAoJY2FzZS4KCk1vbiBOb3YgIDggMTQ6MTY6NTcgMTk5OSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoRW52aXJvbm1lbnQgVmFyaWFibGVzKTogRG9jdW1lbnQgcmVsYXRpdmUgcGF0aAoJbG9va3VwLgoJKiBnY2MuYyAoRElSX1VQKTogSWYgbm90IGRlZmluZWQsIGRlZmluZSBhcyAiLi4iLgoJKHN0YW5kYXJkX2JpbmRpcl9wcmVmaXgpOiBOZXcgc3RhdGljLCBob2xkcyB0YXJnZXQgbG9jYXRpb24gdG8KCWluc3RhbGwgYmluYXJpZXMuCgkoc3BsaXRfZGlyZWN0b3JpZXMpOiBOZXcgZnVuY3Rpb24gdG8gc3BsaXQgYSBmaWxlbmFtZSBpbnRvCgljb21wb25lbnQgZGlyZWN0b3JpZXMuCgkoZnJlZV9zcGxpdF9kaXJlY3Rvcmllcyk6IE5ldyBmdW5jdGlvbiwgcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkCglieSBzcGxpdF9kaXJlY3Rvcmllcy4KCShtYWtlX3JlbGF0aXZlX3ByZWZpeCk6IE5ldyBmdW5jdGlvbiwgbWFrZSBhIHJlbGF0aXZlIHBhdGhuYW1lIGlmCgl0aGUgY29tcGlsZXIgaXMgbm90IGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4KCShwcm9jZXNzX2NvbW1hbmQpOiBJZiBHQ0NfRVhFQ19QUkVGSVggd2FzIG5vdCBzcGVjaWZpZWQsIHNlZSBpZiB3ZQoJY2FuIGZpZ3VyZSBvdXQgYW4gYXBwcm9wcmlhdGUgcHJlZml4IGZyb20gYXJndlswXS4KCSogTWFrZWZpbGUuaW4gKERSSVZFUl9ERUZJTkVTKTogVXNlIHVubGlic3ViZGlyIGluIGRlZmluaXRpb24gb2YKCVNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVggYW5kIFRPT0xESVJfQkFTRV9QUkVGSVguICBEZWZpbmUKCVNUQU5EQVJEX0JJTkRJUl9QUkVGSVguCgpXZWQgTm92IDEwIDExOjQ3OjU0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LXByb3Rvcy5oOiBOZXcgZmlsZS4gIFByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBkZWZpbmVkCglpbiBjNHguYy4KCSogY29uZmlnL2M0eC9jNHguaDogTW92ZWQgcHJvdG90eXBlcyB0byBjNHguaC4KCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X3ByZWZlcnJlZF9yZWxvYWRfY2xhc3MsIGM0eF9saW1pdF9yZWxvYWRfY2xhc3MsCgljNHhfc2Vjb25kYXJ5X21lbW9yeV9uZWVkZWQpIERlbGV0ZS4KCShmcF96ZXJvX29wZXJhbmQpOiBBZGQgbW9kZSBhcmd1bWVudC4KClRodSBOb3YgIDQgMTU6NTI6MzUgMTk5OSAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9mb3JfdmFsdWVfcCk6IERvbid0IHVzZSBhIHJlZ2lzdGVyCgl0aGF0IGlzIGluIHJlbG9hZF9yZWdfdXNlZC4KClR1ZSBOb3YgIDkgMTY6NDM6MDAgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLXByb3Rvcy5oOiBOZXcgZmlsZTogUHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zCglkZWZpbmVkIGluIGFybS5jIGFuZCBwZS5jLgoJKiBjb25maWcvYXJtL2FybS5oOiBGaXggY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoJKiBjb25maWcvYXJtL2FybS5jOiBGaXggY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoJKiBjb25maWcvYXJtL3BlLmg6IEZpeCBjb21waWxlIHRpbWUgd2FybmluZ3MuCgkqIGNvbmZpZy9hcm0vYW91dC5oOiBGaXggY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoKVHVlIE5vdiAgOSAxNDo1NTo0NCAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL20zMnIvbTMyci1wcm90b3MuaDogTmV3IGZpbGU6IFByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucwoJZGVmaW5lZCBpbiBtMzJyLmMKCgkqIGNvbmZpZy9tMzJyL20zMnIuaDogTW92ZSBwcm90b3R5cGVzIHRvIG0zMnItcHJvdG9zLmgKCUFkZCBzdXBwb3J0IGZvciBzdWJ0YXJnZXRzLgoJQWRkIHByb3RvdHlwZXMgZm9yIG5ldyBwcmVkaWNhdGVzLgoJQWRkIHNjaGVkdWxpbmcgbWFjcm9zLgoKCSogY29uZmlnL20zMnIvbTMyci5jOiBGaXggY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoJKGludDhfb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUgZnVuY3Rpb24uCgkocmVnX29yX2NtcF9pbnQxNl9vcGVyYW5kKTogTmV3IHByZWRpY2F0ZSBmdW5jdGlvbi4KCShleHRlbmRfb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUgZnVuY3Rpb24uCgkobTMycl9hZGp1c3RfY29kZSk6IE5ldyBzY2hlZHVsaW5nIGZ1bmN0aW9uLgoJKG0zMnJfYWRqdXN0X3ByaW9yaXR5KTogTmV3IHNjaGVkdWxpbmcgZnVuY3Rpb24uCgkobTMycl9zY2hlZF9pbml0KTogTmV3IHNjaGVkdWxpbmcgZnVuY3Rpb24uCgkobTMycl9zY2hlZF9yZW9yZGVyKTogTmV3IHNjaGVkdWxpbmcgZnVuY3Rpb24uCgkobTMycl9zY2hlZF92YXJpYWJsZV9pc3N1ZSk6IE5ldyBzY2hlZHVsaW5nIGZ1bmN0aW9uLgoJKGRpcmVjdF9yZXR1cm4pOiBOZXcgY29kZWdlbiBmdW5jdGlvbi4KCShtMzJyX25vdF9zYW1lX3JlZyk6IE5ldyBydGwgdGVzdHNpbmcgZnVuY3Rpb24uCgoJKiBjb25maWcvbTMyci9tMzJyLm1kOiBGaXggY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoJQWRkIHN1cHBvcnQgZm9yIHByZSBkZWNyZW1lbnQgYW5kIHBvc3QgaW5jcmVtZW50IG1lbW9yeQoJcmVmZXJlbmNlcy4KCUFkZCBTPGNjPiBwYXR0ZXJucy4KCUFkZCBmYWJzIHBhdHRlcm5zLgoKTW9uIE5vdiAgOCAyMjoyMDoxMyAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBnbG9iYWwuYyAoRVhFQ1VURV9JRl9DT05GTElDVCk6IERvbid0IGRlZmluZS4KCShwcnVuZV9wcmVmZXJlbmNlcyk6IFVzZSBFWEVDVVRFX0lGX1NFVF9JTl9BTExPQ05PX1NFVCBpbnN0ZWFkLgoJKGZpbmRfcmVnKTogTGlrZXdpc2UuCgpNb24gTm92ICA4IDEzOjE2OjQ2IDE5OTkgIEphc29uIEVja2hhcmR0ICA8amxlQGN5Z251cy5jb20+CgoJKiBjb25maWcvcGEvcGEubWQgKGZtcHluZmFkZCx7c2dsLGRibH0gaW5zbnMpOiBVc2UgJWZyMCByYXRoZXIgdGhhbiAwCgl0byBhdm9pZCBhc3NlbWJsZXIgZXJyb3JzLgoKTW9uIE5vdiAgOCAxNTozODo0MSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvdjg1MC1wcm90b3MuaDogTmV3IGZpbGU6IFByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucwoJZGVmaW5lZCBpbiB2ODUwLmMKCSogY29uZmlnL3Y4NTAvdjg1MC5oOiBNb3ZlIHByb3RvdHlwZXMgdG8gdjg1MC1wcm90b3MuaAoJKiBjb25maWcvdjg1MC92ODUwLmM6IE1vdmUgcHJvdG90eXBlcyB0byB2ODUwLXByb3Rvcy5oCgkqIGNvbmZpZy92ODUwL3Y4NTAubWQ6IEZpeCBjb21waWxlIHRpbWUgd2FybmluZ3MuCgoJKiBjb25maWcvZnIzMC9mcjMwLXByb3Rvcy5oOiBOZXcgZmlsZTogUHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zCglkZWZpbmVkIGluIGZyMzAuYwoJKiBjb25maWcvZnIzMC9mcjMwLmg6IE1vdmUgcHJvdG90eXBlcyB0byBmcjMwLXByb3Rvcy5oCgkqIGNvbmZpZy9mcjMwL2ZyMzAuYzogRml4IGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KCSogY29uZmlnL2ZyMzAvZnIzMC5tZDogRml4IGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KCk1vbiBOb3YgIDggMDc6MjU6MzcgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRyZWUuaCAoZ2V0X2NvbnRhaW5pbmdfc2NvcGUpOiBEZWNsYXJlIGl0LgoJKiB0cmVlLmMgKGdldF9jb250YWluaW5nX3Njb3BlKTogTmV3IGZ1Y250aW9uLgoJKGRlY2xfZnVuY3Rpb25fY29udGV4dCk6IFVzZSBpdC4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBVc2UgZ2V0X2NvbnRhaW5pbmdfc2NvcGUuCgphTW9uIE5vdiAgOCAwMzowMzowNyAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBsc2QuaWMudW5pY2FtcC5icj4KCgkqIE1ha2VmaWxlLmluIChydGwubyk6IERlcGVuZCBvbiB0b3BsZXYuaC4KClN1biBOb3YgIDcgMjA6NTU6MTQgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNzZS5jIChkZWxldGVfdHJpdmlhbGx5X2RlYWRfaW5zbnMpOiBSZXBsYWNlIGFsbG9jYSB3aXRoCgl4bWFsbG9jL3hjYWxsb2MuCgkqIGV4Y2VwdC5jICh1cGRhdGVfcmV0aHJvd19yZWZlcmVuY2VzKTogTGlrZXdpc2UuCgkoaW5pdF9laF9uZXN0aW5nX2luZm8pOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYyAoaWRlbnRpZnlfYmxvY2tzKTogTGlrZXdpc2UuCgkqIGdjc2UuYyAoZHVtcF9oYXNoX3RhYmxlKTogTGlrZXdpc2UuCgkqIGdyYXBoLmMgKHByaW50X3J0bF9ncmFwaF93aXRoX2JiKTogTGlrZXdpc2UuCgkqIGxvb3AuYyAoY29tYmluZV9tb3ZhYmxlcyk6IExpa2V3aXNlLgoJKG1vdmVfbW92YWJsZXMpOiBMaWtld2lzZS4KCShjb3VudF9sb29wX3JlZ3Nfc2V0KTogTGlrZXdpc2UuCgkoc3RyZW5ndGhfcmVkdWNlKTogTGlrZXdpc2UuCgkqIHByb2ZpbGUuYyAoY29tcHV0ZV9icmFuY2hfcHJvYmFiaWxpdGllcyk6IE5ldyBmdW5jdGlvbiwgc3BsaXQKCW91dCBmcm9tIC4uLgoJKGJyYW5jaF9wcm9iKTogSGVyZS4gIFJlcGxhY2UgYWxsb2NhIHdpdGggeG1hbGxvYy94Y2FsbG9jLgoJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IExpa2V3aXNlLgoJKiByZWdtb3ZlLmMgKHJlZ21vdmVfb3B0aW1pemUpOiBMaWtld2lzZS4KCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IExpa2V3aXNlLgoJKG1haW4pOiBEb24ndCBtZXNzIHdpdGggdGhlIHN0YWNrIHJsaW1pdC4KClN1biBOb3YgIDcgMTk6NDE6MTcgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWcvZWxmb3MuaCAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IENvbmRpdGlvbmFsbHkgZGVmaW5lLgoJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX1NJWkUpOiBDb25kaXRpb25hbGx5IGRlZmluZS4KClN1biBOb3YgIDcgMTA6MjM6MjggMTk5OSAgTWFyayBQLiBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmVfbm9jb3B5KTogQ2xlYXIgaW5fbm9ucGFybV9pbnNucy4KClN1biBOb3YgIDcgMDI6NTg6NDggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2xvYmFsLmMgKEVYRUNVVEVfSUZfQ09ORkxJQ1QpOiBVbmRvIFJvYmVydCdzIGNoYW5nZS4KCShFWEVDVVRFX0lGX1NFVF9JTl9BTExPQ05PX1NFVCk6IFB1dCBjdXJsZXlzIGFyb3VuZCBDT0RFIGluCgltYWNybyBleHBhbnNpb24uCgpTYXQgTm92ICA2IDIzOjQ4OjMwIDE5OTkgIFJvYmVydCBMaXBlICAocm9iZXJ0bGlwZUB1c2EubmV0KQoKCSogZ2xvYmFsLmMgKEVYRUNVVEVfSUZfQ09ORkxJQ1QpOiBDb3JyZWN0IHF1b3RpbmcgdHlwby4KClNhdCBOb3YgIDYgMTc6MzQ6MzkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NzZS5jIChwb3N0X2RvbWluYXRvcnMpOiBLaWxsLgoJKGFsbG9jX2NvZGVfaG9pc3RfbWVtLCBmcmVlX2NvZGVfaG9pc3RfbWVtKTsgS2lsbCBwb3N0X2RvbWluYXRvcnMuCgkoY29tcHV0ZV9jb2RlX2hvaXN0X2RhdGEpOiBVc2UgY29tcHV0ZV9mbG93X2RvbWluYXRvcnMuICBEbyBub3QKCXBhc3MgaW4gYSBwZG9tIGFycmF5IHNpbmNlIHdlIGRvIG5vdCBuZWVkIHBkb21zLgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZHVsZV9pbnNucyk6IFNpbWlsYXJseS4KCSogZmxvdy5jIChjb21wdXRlX2RvbWluYXRvcnMpOiBSZW1vdmUgZGVhZCBmdW5jdGlvbi4KCShjb21wdXRlX2Zsb3dfZG9taW5hdG9ycyk6IERvIG5vdCBjb21wdXRlIGRvbXMgb3IgcGRvbXMgaWYgdGhlCgljYWxsZXIgZG9lcyBub3QgcmVxdWVzdCB0aGVtLiAgU3BsaXQgdXAgbG9vcCB0byBidWlsZCBkb21zIGFuZAoJcGRvbXMuICBVc2UgYSB3b3JrbGlzdCB0byBjb21wdXRlIGRvbXMgYW5kIHBkb21zLgoJKiBiYXNpYy1ibG9jay5oIChjb21wdXRlX2RvbWluYXRvcnMpOiBSZW1vdmUgcHJvdG90eXBlLgoKU2F0IE5vdiAgNiAxMTozODozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaGFpZmEtc2NoZWQuYyAoc3RydWN0IGhhaWZhX2luc25fZGF0YSwgaF9pX2QpOiBOZXcuCgkoaW5zbl9sdWlkLCBpbnNuX3ByaW9yaXR5LCBpbnNuX2Nvc3RzLCBpbnNuX3VuaXRzKTogUmVtb3ZlLgoJKGluc25fcmVnX3dlaWdodCwgaW5zbl9kZXBlbmQsIGluc25fZGVwX2NvdW50KTogUmVtb3ZlLgoJKGluc25fYmxvY2thZ2UsIGluc25fcmVmX2NvdW50LCBsaW5lX25vdGUsIGluc25fdGljayk6IFJlbW92ZS4KCShjYW50X21vdmUsIGZlZF9ieV9zcGVjX2xvYWQsIGlzX2xvYWRfaW5zbik6IFJlbW92ZS4KCShzY2hlZHVsZV9yZWdpb24pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoJKHNjaGVkdWxlX2luc25zKTogQWxsb2NhdGUgaF9pX2QsIGFuZCBub3QgYWxsIHRoZSBzZXBhcmF0ZSBhcnJheXMuCgpTYXQgTm92ICA2IDEwOjAwOjM0IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBsb2NhbC1hbGxvYy5jIChsb2NhbF9hbGxvYyk6IFVzZSB4bWFsbG9jL3hjYWxsb2MsIG5vdCBhbGxvY2EuCgkodXBkYXRlX2VxdWl2X3JlZ3MpOiBMaWtld2lzZS4KCShibG9ja19hbGxvYyk6IExpa2V3aXNlLgoJKiByZWctc3RhY2suYyAocmVnX3RvX3N0YWNrKTogTGlrZXdpc2UuCgkoY29udmVydF9yZWdzXzIpOiBMaWtld2lzZS4KCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogTGlrZXdpc2UuCgpTYXQgTm92ICA2IDA5OjU3OjU5IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBNYWtlZmlsZS5pbiAoZGJ4b3V0Lm8pOiBEZXBlbmQgb24gZ2djLmguCgkoZHdhcmYyb3V0Lm8pOiBMaWtld2lzZS4KCSh4Y29mZm91dC5vKTogTGlrZXdpc2UuCgkqIGRieG91dC5jOiBJbmNsdWRlIGdnYy5oLgoJKGRieG91dF9pbml0KTogUmVnaXN0ZXIgbGFzdGZpbGUgYXMgYSByb290LgoJKiBkd2FyZjJvdXQuYzogSW5jbHVkZSBnZ2MuaC4KCShkd2FyZjJvdXRfbGluZSk6IFJlZ2lzdGVyIGxhc3RmaWxlIGFzIGEgcm9vdC4KCSogeGNvZmZvdXQuYzogSW5jbHVkZSBnZ2MuaC4KCSh4Y29mZm91dF9zb3VyY2VfbGluZSk6IFJlZ2lzdGVyIHhjb2ZmX2xhc3RmaWxlIGFzIGEgcm9vdC4KClNhdCBOb3YgIDYgMDk6NTI6MDkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYubWQgKG1vdmRmXzEsIG1vdnhmXzEpOiBFYXJseWNsb2JiZXIgZ2VuZXJhbCByZWdzIGRlc3RpbmF0aW9uLgoKU2F0IE5vdiAgNiAwNzo0ODo1OSAxOTk5ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9zdnI0LmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OKTogQ2hlY2sgaWYgYWxyZWFkeQoJZGVmaW5lZC4KCShBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFKTogTGlrZXdpc2UuCgpGcmkgTm92ICA1IDE4OjMzOjM5IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGdsb2JhbC5jIChFWEVDVVRFX0lGX1NFVF9JTl9BTExPQ05PX1NFVCk6IE5ldyBtYWNyby4KCShFWEVDVVRFX0lGX0NPTkZMSUNUKTogTGlrZXdpc2UuCgkoQUxMT0NOT19MSVZFX1ApOiBBdm9pZCBzaWduZWQgZGl2aXNpb24uCgkoU0VUX0FMTE9DTk9fTElWRSwgQ0xFQVJfQUxMT0NOT19MSVZFKTogTGlrZXdpc2UuCgkocHJ1bmVfcHJlZmVyZW5jZXMsIGZpbmRfcmVnKTogVXNlIEVYRUNVVEVfSUZfQ09ORkxJQ1QuCgkocmVjb3JkX29uZV9jb25mbGljdCk6IFVzZSBFWEVDVVRFX0lGX1NFVF9JTl9BTExPQ05PX1NFVC4KCkZyaSBOb3YgIDUgMTI6MDQ6MDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogRG9uJ3QgY3Jhc2ggaWYgdGhlcmUncyBubwoJbmV4dCBpbnNuIGZvciBhbiBpbnRlcmJsb2NrIG1vdmVtZW50LgoJKGFkZF9icmFuY2hfZGVwZW5kZW5jZXMpOiBEb24ndCBhbGxvdyBjbG9iYmVyIGluc25zIHRvIG1vdmUgZWl0aGVyLgoKRnJpIE5vdiAgNSAxMDoxODoxMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5jIChzcGxpdF94Zik6IE5ldy4KCSogaTM4Ni1wcm90b3MuaDogRGVjbGFyZSBpdC4KCSogaTM4Ni5tZCAobW92eGZfMSk6IEFkZCBnZW5lcmFsIHJlZ3MgYWx0ZXJuYXRpdmVzLgoJKG1vdnhmXzErMSk6IE5ldyBzcGxpdHRlciBmb3Igc2FtZS4KCkZyaSBOb3YgIDUgMTI6MDU6NTIgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogQWRkIG1pc3NpbmcgcmV0dXJuIHZhbHVlcy4KCkZyaSBOb3YgIDUgMTA6MDc6MjUgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKGlzX2FkZHJlc3NvZik6IE5ldyBmdW5jdGlvbi4gIFJldHVybnMgdHJ1ZSBpZgoJdGhlIGdpdmVuIHBpZWNlIG9mIFJUTCBpcyBhbiBBRERSRVNTT0YuCgkocHVyZ2VfYWRkcmVzc29mXzEpOiBNYWtlIGJvb2xlYW4uICBSZXR1cm4gZmFsc2UgaWYgdGhlCglBRERSRVNTT0ZzIGNvdWxkIG5vdCBiZSBwdXJnZWQuCgkocHVyZ2VfYWRkcmVzc29mKTogSWYgQUREUkVTU09GcyBjb3VsZCBub3QgYmUgcHVyZ2VkIGZyb20gdGhlCglub3RlcyBhdHRhY2hlZCB0byBhbiBpbnNuLCByZW1vdmUgdGhlIG9mZmVuZGluZyBub3RlKHMpLAoJdW5sZXNzIHRoZXkgYXJlIGF0dGFjaGVkIHRvIGEgbGliY2FsbC4KCjE5OTktMTEtMDUgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KCgkqIGdlbm91dHB1dC5jIChudWxsX29wZXJhbmQgPSk6IEluaXRpYWxpemUgYWxsIGZpZWxkcy4KCgkqIGVycm9ycy5oOiBBZGQgZXh0ZXJuIHRvIHByb3RvdHlwZXMuCgpGcmkgTm92ICA1IDAxOjQ0OjA5IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAobTY4ay1uZXh0LW5leHRzdGVwNCk6IEhhbmRsZSBPcGVuc3RlcCA0LjIuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCkZyaSBOb3YgIDUgMDE6MjQ6MzcgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZ2xvYmFsLmMgKENPTkZMSUNUUCwgU0VUX0NPTkZMSUNUKTogQXZvaWQgc2lnbmVkIGRpdmlzaW9uLgoJKG1pcnJvcl9jb25mbGljdHMpOiBOZXcgZnVuY3Rpb24uCgkoZ2xvYmFsX2FsbG9jKTogQ2FsbCBpdC4KCShleHBhbmRfcHJlZmVyZW5jZXMpOiBSZW1vdmUgcmVkdW5kYW50IENPTkZMSUNUUCB0ZXN0LgoJKGZpbmRfcmVnLCBkdW1wX2NvbmZsaWN0cyk6IExpa2V3aXNlLgoJKHBydW5lX3ByZWZlcmVuY2VzKTogUHJvY2VzcyBjb25mbGljdHMgb25lIHdvcmQgYXQgYSB0aW1lLgoKRnJpIE5vdiAgNSAwMTowNToyMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQGN5Z251cy5jb20+CgoJKiBnbG9iYWwuYyAoYnVpbGRfaW5zbl9jaGFpbik6IFVzZSBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAKCWluc3RlYWQgb2YgYW4gZXhwbGljaXQgbG9vcC4KClRodSBOb3YgIDQgMjM6MDc6MTQgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY3NlLmMgKGNzZV9pbnNuKTogUmV2ZXJ0IE9jdCAzMSBjaGFuZ2UuICBXaGVuIGNvbXB1dGluZyBzcmNfZWx0LAoJaWYgUkVHX1JFVFZBTCBjaGVjayBzdWNjZWVkcywgdGhlbiBwdXQgY2xhc3NwIGluIHNyY19lbHQuCgpUaHUgTm92ICA0IDIzOjQ4OjE0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9uLmMgKHBhZF90b19hcmdfYWxpZ25tZW50KTogT25seSB1cGRhdGUgYXJndW1lbnRfcGFkCglpZiB0aGUgYXJndW1lbnQncyBhbGlnbm1lbnQgaXMgZ3JlYXRlciB0aGFuIFNUQUNLX0JPVU5EQVJZLgoKVGh1IE5vdiAgNCAxNjo0NDo1MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYml0bWFwLmggKEJJVE1BUF9YRlJFRSk6IE5ldy4KCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzKTogVXNlIGl0LgoJKGxpZmVfYW5hbHlzaXNfMSk6IEZyZWUgYmxvY2tzLgoKCSogY29tYmluZS5jICh1bmRvX2NvbW1pdCk6IE5ldy4KCSh0cnlfY29tYmluZSk6IFVzZSBpdC4gIERvbid0IHphcCB1bmRvYnVmLnVuZG9zLgoJKGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKTogRG9uJ3QgemFwIHVuZG9idWYudW5kb3M7IGZyZWUgdGhlCgl1bmRvYnVmLmZyZWVzIGxpc3QuCgoJKiBsb2NhbC1hbGxvYy5jIChsb2NhbF9hbGxvYyk6IEZyZWUgcXR5X3BoeXNfbnVtX3N1Z2cuCgoJKiBzdG10LmMgKGNvc3RfdGFibGVfKTogTmV3LgoJKGVzdGltYXRlX2Nhc2VfY29zdHMpOiBVc2UgaXQgaW5zdGVhZCBvZiB4bWFsbG9jLgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFJldXNlIGR1bXBuYW1lIG1lbW9yeSBpbnN0ZWFkCglvZiBzdHJkdXAnaW5nIGl0LgoKVGh1IE5vdiAgNCAxNjozNjo0NCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVnLXN0YWNrLmMgKGNvbnZlcnRfcmVnc18xKTogSW5pdGlhbGl6ZSB0YXJnZXRfc3RhY2stPnRvcAoJYWZ0ZXIgdmVyaWZ5aW5nIGFuIEVIIGVkZ2UuCgoJKiBoYWlmYS1zY2hlZC5jIChpbml0X3Jnbl9kYXRhX2RlcGVuZGVuY2VzKTogQ29ycmVjdGx5CglzaXplIGJiX3BlbmRpbmdfbGlzdHNfbGVuZ3RoIHdoZW4gemVyb2luZy4KClRodSBOb3YgIDQgMTY6MzY6MzYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKGRpZGRsZV9yZXR1cm5fdmFsdWUpOiBOZXcuCgkoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IFVzZSBpdC4KCSogc3RtdC5jIChleHBhbmRfbnVsbF9yZXR1cm4pOiBMaWtld2lzZS4KCShleHBhbmRfdmFsdWVfcmV0dXJuKTogTGlrZXdpc2UuCgoJKiByZWctc3RhY2suYyAoc3Vic3Rfc3RhY2tfcmVnc19wYXQpOiBIYW5kbGUgY2xvYmJlcnMgYXQgdG9wLWxldmVsLgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEb24ndCByZW1vdmUgcmV0dXJuIHZhbHVlIGNsb2JiZXJzLgoKVGh1IE5vdiAgNCAxMzozMzo0NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnRsLmMgKHJlYWRfcnR4KTogVXNlIGZhdGFsX3dpdGhfZmlsZV9hbmRfbGluZSBub3QgZmF0YWwuCgpUaHUgTm92ICA0IDEyOjQ5OjUyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjc2UuYyAoY3NlX21haW4pOiBVc2UgeG1hbGxvYywgbm90IGFsbG9jYS4KCShjc2VfYmFzaWNfYmxvY2spOiBMaWtld2lzZS4KCSogbG9jYWwtYWxsb2MuYyAobG9jYWxfYWxsb2MpOiBMaWtld2lzZS4KClRodSBOb3YgIDQgMTQ6MjI6MTIgMTk5OSAgRGF2aWQgQmlsbGluZ2h1cnN0ICA8RGF2aWQuQmlsbGluZ2h1cnN0QHJpb3RpbnRvLmNvbS5hdT4KCQkJICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBsc2QuaWMudW5pY2FtcC5icj4KCgkqIHJ0bC5jOiBJbmNsdWRlIHRvcGxldi5oLgoJKGZhdGFsKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoKVGh1IE5vdiAgNCAwNjozOTo0NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZHVsZV9ibG9jayk6IEZpeCB0aGlua28uCgoxOTk5LTExLTAzICBKYW1lcyBNY0tlbHZleSA8bWNrZWx2ZXlAZmFmbmlyLmNvbT4KCgkqIGZpeGluYy9maXhpbmNsLmMoY3JlYXRlX2ZpbGUpOiAgQWxsb3cgZm9yIHN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZQoJU19JUiogZGVmaW5lZCB2YWx1ZXMKCjE5OTktMTEtMDMgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogZml4bGliLmMgKGxvYWRfZmlsZV9kYXRhKTogRG8gbm90IGNhbGwgYHJlYWxsb2MnIHdpdGggYSBOVUxMIHBvaW50ZXI7CgljYWxsIGBtYWxsb2MnIGluc3RlYWQuCgpXZWQgTm92ICAzIDIzOjA1OjE0IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBmbGFncy5oIChmbGFnX3JlbnVtYmVyX2luc25zKTogRGVjbGFyZS4KCSogZW1pdC1ydGwuYyAocmVudW1iZXJfaW5zbnMpOiBDaGVjayBmbGFnX3JlbnVtYmVyX2luc25zLiAgUHJpbnQKCXJlbnVtYmVyaW5nIHRhYmxlLgoJKiBydGwuaCAocmVudW1iZXJfaW5zbnMpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKiB0b3BsZXYuYyAoZmxhZ19yZW51bWJlcl9pbnNucyk6IERlZmluZS4KCShyZXN0X29mX2NvbXBpbGF0aW9uKTogUGFzcyBydGxfZHVtcF9maWxlIHRvIGZsYWdfcmVudW1iZXJfaW5zbnMuCgpXZWQgTm92ICAzIDE1OjExOjI3IDE5OTkgIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQ6IFJlbW92ZSBpbnNuIHR5cGUgZnBzcXJ0LCBhZGQgZnBzcXJ0cwoJYW5kIGZwc3FydGQuICBVc2UgdGhlbSBhbmQgY3JlYXRlIGZkaXYgZnVuY3Rpb24gdW5pdCB0byBtb3JlCglhY2N1cmF0ZWx5IHJlcHJlc2VudCBmcHUgc3FydCBwaXBlbGluZSBzZW1hbnRpY3Mgb24gVWx0cmFTUEFSQy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmM6IEFjY291bnQgZm9yIGZwc3FydHtzLGR9IGNoYW5nZXMuCgpXZWQgTm92ICAzIDE1OjExOjI3IDE5OTkgIE1hdHRlbyBGcmlnbyA8YXRoZW5hQGZmdHcub3JnPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kOiBBZGp1c3QgRkFERC9GTVVMIHJlc3VsdCBsYXRlbmNpZXMgdG8KCTMgb24gVWx0cmFTUEFSQy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHVsdHJhX3NjaGVkdWxlX2luc24pOiBJbnNlcnQgbGF1bmNoZWQKCWluc24gaW50byByZWFkeSBsaXN0LCBkbyBub3QgdXNlIGp1c3QgYSByYXcgc3dhcC4KCldlZCBOb3YgIDMgMTQ6NTE6NTkgMTk5OSAgTWFyayBQLiBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHJ0bC5oIChyZW51bWJlcl9pbnNucyk6IE5ldyBmdW5jdGlvbi4KCShyZW1vdmVfdW5uZWNlc3Nhcnlfbm90ZXMpOiBMaWtld2lzZS4KCSogZW1pdC1ydGwuYyAocmVudW1iZXJfaW5zbnMpOiBEZWZpbmUuCgkocmVtb3ZlX3VubmVjZXNzYXJ5X25vdGVzKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogUmVtb3ZlIGRlYWQgY29kZS4KCVVzZSByZW51bWJlcl9pbnNucyBhbmQgcmVtb3ZlX3VubmVjZXNzYXJ5X25vdGVzLgoKCSogZ2NzZS5jIChzdHJ1Y3QgbnVsbF9wb2ludGVyX2luZm8pOiBOZXcgdHlwZS4KCShnZXRfYml0bWFwX3dpZHRoKTogTmV3IGZ1bmN0aW9uLgoJKGN1cnJlbnRfYmxvY2spOiBSZW1vdmUuCgkobm9ubnVsbF9sb2NhbCk6IExpa2V3aXNlLgoJKG5vbm51bGxfa2lsbGVkKTogTGlrZXdpc2UuCgkoaW52YWxpZGF0ZV9ub25udWxsX2luZm8pOiBUYWtlIGEgbnVsbF9wb2ludGVyX2luZm8gYXMgaW5wdXQuCgkoZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3NfMSk6IE5ldyBmdW5jdGlvbi4KCShkZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrcyk6IFVzZSBpdC4KCgkqIGhhaWZhLXNjaGVkLmMgKGZpbmRfcmducyk6IFJlcGxhY2UgdXNlcyBvZiBhbGxvY2Egd2l0aCB4bWFsbG9jLgoJKHNwbGl0X2VkZ2VzKTogTGlrZXdpc2UuCgkoc2NoZWR1bGVfYmxvY2spOiBMaWtld2lzZS4KCShjb21wdXRlX2Jsb2NrX2JhY2t3YXJkX2RlcGVuZGVuY2llcyk6IExpa2V3aXNlLgoJKHNjaGVkdWxlX3JlZ2lvbik6IExpa2V3aXNlLgoJKHNjaGVkdWxlX2luc25zKTogTGlrZXdpc2UuCgpXZWQgTm92ICAzIDE1OjQwOjIzIDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogZGVmYXVsdHMuaCAoQVNNX09VVFBVVF9BTFRFUk5BVEVfTEFCRUxfTkFNRSk6IFByb3ZpZGUgZGVmYXVsdC4KCSogZW1pdC1ydGwuYyAoZ2VuX2xhYmVsX3J0eCk6IFN1cHBvcnQgTEFCRUxfQUxURVJOQVRFX05BTUUuCgkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IEVtaXQgTEFCRUxfQUxURVJOQVRFX05BTUUuCgkqIGdnYy1jb21tb24uYyAoZ2djX21hcmtfcnR4X2NoaWxkcmVuKTogTWFyayBMQUJFTF9BTFRFUk5BVEVfTkFNRS4KCSoganVtcC5jIChkZWxldGVfdW5yZWZlcmVuY2VkX2xhYmVscyk6IERvbid0IGRlbGV0ZSBpZgoJTEFCRUxfQUxURVJOQVRFX05BTUUgaXMgc2V0LgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogRHVtcCBhbHRlcm5hdGUgbmFtZS4KCSogcnRsLmRlZiAoQ09ERV9MQUJFTCk6IENoYW5nZSBmb3JtYXQgdG8gIml1dWlzMDBzIi4KCSogcnRsLmggKExBQkVMX0FMVEVSTkFURV9OQU1FKTogRGVmaW5lLgoJKiBydGwudGV4aSAoTEFCRUxfQUxURVJOQVRFX05BTUUpOiBEb2N1bWVudC4KCSogdG0udGV4aSAoQVNNX09VVFBVVF9BTFRFUk5BVEVfTEFCRUxfTkFNRSk6IERvY3VtZW50LgoKV2VkIE5vdiAgMyAxNTozOToxOSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmaXgtaGVhZGVyLmMgKHJlY29nbml6ZWRfZXh0ZXJuLCByZWNvZ25pemVkX2Z1bmN0aW9uKTogQ29uc3RpZnkKCWEgY2hhciouCgoJKiBsY20uYyAoY29tcHV0ZV9sYXRlcmluKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgdGVtcF9iaXRtYXAnLgoJKHByZV9lZGdlX2xjbSk6IE1hcmsgcGFyYW1ldGVyIGBmaWxlJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoY29tcHV0ZV9hdmFpbGFibGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBsYXN0Jy4KCShjb21wdXRlX25lYXJlcm91dCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHRlbXBfYml0bWFwJy4KCShwcmVfZWRnZV9yZXZfbGNtKTogTWFyayBwYXJhbWV0ZXIgYGZpbGUnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCVJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHgnLgoKCSogc2Nhbi5oIChyZWNvZ25pemVkX2Z1bmN0aW9uLCByZWNvZ25pemVkX2V4dGVybik6IENvbnN0aWZ5IGEKCWNoYXIqLgoKCSogc2ltcGxpZnktcnR4LmMgKHNpbXBsaWZ5X3J0eCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYG5ldycuCgpXZWQgTm92ICAzIDEwOjQwOjUzIDE5OTkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIHZhcmFzbS5jIChkZWNvZGVfcnR4X2NvbnN0KTogVXNlIFhTVFIgdG8gYWNjZXNzIHRoZSBzdHJpbmcKCW9mIGEgU1lNQk9MX1JFRi4KCldlZCBOb3YgIDMgMTA6MTA6NTggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBDb3B5IERFQ0xfTU9ERSB0b28uCgpXZWQgTm92ICAzIDEyOjEyOjU5IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogSWYgY29weWluZyBpbnNuLCBhbHNvIGNvcHkgbm90ZXMuCgpXZWQgTm92ICAzIDAzOjI2OjI4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmMgKGlyZWdfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KCSogcGEuaCAoUFJFRElDQVRFX0NPREVTKTogSGFuZGxlIGlyZWdfb3BlcmFuZC4KCSogcGEubWQgKHBhcmFsbGVsX2FkZGIsIHBhcmFsbGVsX21vdmIpOiBVc2UgaXJlZ19vcGVyYW5kLgoJRml4IG91dCBvZiBkYXRlIGNvbW1lbnQuCgoJKiBwYS5tZCAobmVnZGkyKTogVHVybiBpbnRvIGV4cGFuZGVyICsgYW5vbnltb3VzIHBhdHRlcm4uCgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRml4IHR5cG9zIGluIHJlY2VudCBjaGFuZ2UuCgoJKiBkd2FyZjJvdXQuYzogRG8gbm90IGluY2x1ZGUgY3R5cGUuaC4KClR1ZSBOb3YgIDIgMjE6NTM6NDQgMTk5OSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IEFsd2F5cyB1c2UgbWF5X21vdmVfY29zdCB3aGVuCglzZWVpbmcgaG93IG9wZXJhbmQgZml0cyB3aXRoIHZhcmlvdXMgcmVnaXN0ZXIgY2xhc3Nlcy4KClR1ZSBOb3YgIDIgMTU6Mzg6MTcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlc291cmNlLmM6IFJldmVydCBPY3QgMjYgMjA6NDIgYW5kIE9jdCAyNyAwMDo1NiBjaGFuZ2VzLgoJKiB0b3BsZXYuYzogUmV2ZXJ0IE5vdiAxIDEzOjIyIGNoYW5nZS4KClR1ZSBOb3YgIDIgMTQ6MjE6MzcgMTk5OSAgSmFzb24gRWNraGFyZHQgIDxqbGVAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9wYS9wYS5tZCAoaGVpZ2h0IHJlZHVjdGlvbiBwYXR0ZXJucyk6IEFkZCBjaGVja3MgZm9yCglvdmVybGFwcGluZyBvcGVyYW5kcyB0byBhdm9pZCBzZW1hbnRpYy1kZXN0cm95aW5nIHNwbGl0cyBmb3IKCWhlaWdodCByZWR1Y3Rpb24gcGF0dGVybnMuCgpUdWUgTm92ICAyIDE1OjI3OjMxIDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGxzZC5pYy51bmljYW1wLmJyPgoKCSogY29uZmlndXJlLmluIChtNjhrLWhwLWhwdXgqLCB4bV9hbGxvY2EuaCk6IFRoZSB1bmRlcnNjb3JlIHNob3VsZAoJaGF2ZSBiZWVuIGFuIGh5cGhlbiwgZml4ZWQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClR1ZSBOb3YgIDIgMTc6MDQ6MzYgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdHBlLmg6IEFkZCBwcm90b3R5cGVzIGZvciBleHBvcnRlZCBmdW5jdGlvbnMuCgkqIGNvbmZpZy9hcm0vcGUuYzogRml4IGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KCSogY29uZmlnL2FybS9zZW1pLmg6IEZpeCBjb21waWxlIHRpbWUgd2FybmluZ3MuCgkqIGNvbmZpZy9hcm0vYXJtLmM6IEZpeCBjb21waWxlIHRpbWUgd2FybmluZ3MuCgkqIGNvbmZpZy9hcm0vYXJtLmg6IEZpeCBjb21waWxlIHRpbWUgd2FybmluZ3MuCgkqIGNvbmZpZy9hcm0vYXJtLm1kOiBGaXggY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoJKiBjb25maWcvYXJtL3RodW1iLmM6IEZpeCBjb21waWxlIHRpbWUgd2FybmluZ3MuCgkqIGNvbmZpZy9hcm0vdGh1bWIuaDogRml4IGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KCSogY29uZmlnL2FybS90aHVtYi5tZDogRml4IGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KClR1ZSBOb3YgIDIgMDQ6MTA6MjQgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSoganVtcC5jIChqdW1wX29wdGltaXplXzEpOiBTd2FwIHRoZSBpbmNzY2MgYW5kIHRoZSBjb25kaXRpb25hbCBtb2RlCglkZXRlY3Rpb24gY29kZQoKCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogUmVtb3ZlIExPT1Agbm90ZXMgd2hlbiBsb29wIGlzCgljb21wbGV0ZWx5IHVucm9sbGVkLgoKVHVlIE5vdiAgMiAxNjo1NzoyMiAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGNzZS5jIChzaW1wbGlmeV9wbHVzX21pbnVzLCBjaGVja19mb2xkX2NvbnN0KTogRGVsZXRlIGRlY2xhcmF0aW9ucy4KClR1ZSBOb3YgIDIgMDk6NDM6MDAgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoZ2VuYXR0cnRhYik6IERvbid0IHVzZSAoSE9TVF9SVExBTkFMKS4KCSogcnRsLmggKHJ0eF9lcXVhbF9wKTogTW92ZSBwcm90b3R5cGUuCgkqIHJ0bC5jIChydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycyk6IE1vdmUgZnJvbQoJcnRsYW5hbC5jCgkocnR4X2VxdWFsX3ApOiBMaWtld2lzZS4KCSogcnRsYW5hbC5jIChydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycyk6IERlbGV0ZS4KCShydHhfZXF1YWxfcCk6IExpa2V3aXNlLgoKTW9uIE5vdiAgMSAyMzoyMToxNyAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsaWJnY2MyLmMgKF9fZG9fZ2xvYmFsX2R0b3JzKTogT25seSBkbyBFSCBmcmFtZSBzdHVmZiBpZgoJISBIQVNfSU5JVF9TRUNUSU9OLgoKTW9uIE5vdiAgMSAyMzozNzozOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY2MuMSAoUEEgb3B0aW9ucyk6IFJlbW92ZSBvYnNvbGV0ZSAtbXNoYXJlZC1saWJzIG9wdGlvbnMuCgoJKiBwYS5oIChBRERSX1ZFQ19BTElHTik6IERlZmluZS4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZV8xKTogQWxzbyBtb3ZlIExPT1BfVlRPUCBhbmQgTE9PUF9DT05UCglub3RlcyB3aGVuIHByZXNlbnRlZCB3aXRoICJpZiAoZm9vKSBicmVhazsgZW5kX29mX2xvb3AiIGFuZAoJdGhlIGJyZWFrIHNlcXVlbmNlIGdldHMgbW92ZWQgb3V0IG9mIHRoZSBsb29wLgoKCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogQWxsb2NhdGUgbWVtb3J5IGZvciBNQVAgdXNpbmcgeGNhbGxvYy4KCVJlbW92ZSBleHBsaWNpdCB6ZXJvIGluaXRpYWxpemF0aW9ucyBvZiBlbnRyaWVzIHdpdGhpbiBNQVAuCgpNb24gTm92ICAxIDE4OjA5OjE0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWctc3RhY2suYyAoY29udmVydF9yZWdzXzEpOiBIYW5kbGUgRUggZWRnZXMgc3BlY2lhbGx5LgoKTW9uIE5vdiAgMSAxNTo0MTowMSAxOTk5ICBNYXJrIFAuIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogYml0bWFwLmggKEJJVE1BUF9YTUFMTE9DKTogTmV3IG1hY3JvLgoJKiBmbG93LmMgKENMRUFOX0FMTE9DQSk6IFJlbW92ZS4KCShkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzKTogVXNlIHhtYWxsb2MveGNhbGxvYyBpbnN0ZWFkIG9mIGFsbG9jYS4KCShsaWZlX2FuYWx5c2lzKTogTGlrZXdpc2UuCgkodXBkYXRlX2xpZmVfaW5mbyk6IERvbid0IHVzZSBDTEVBTl9BTExPQ0EuCgkobGlmZV9hbmFseXNpc18xKTogVXNlIHhtYWxsb2MveGNhbGxvYyBpbnN0ZWFkIG9mIGFsbG9jYS4KCShjYWxjdWxhdGVfZ2xvYmFsX3JlZ3NfbGl2ZSk6IExpa2V3aXNlLgoJKHByaW50X3J0bF93aXRoX2JiKTogTGlrZXdpc2UuCgkodmVyaWZ5X2Zsb3dfaW5mbyk6IExpa2V3aXNlLgoJKiBnbG9iYWwuYyAoZ2xvYmFsX2FsbG9jKTogTGlrZXdpc2UuCgkoZ2xvYmFsX2NvbmZsaWN0cyk6IExpa2V3aXNlLgoJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lX25vY29weSk6IExpa2V3aXNlLgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSoganVtcC5jIChqdW1wX29wdGltaXplXzEpOiBMaWtld2lzZS4KCShkdXBsaWNhdGVfbG9vcF9leGl0X3Rlc3QpOiBMaWtld2lzZS4KCSh0aHJlYWRfanVtcHMpOiBMaWtld2lzZS4KCSogbG9vcC5jIChsb29wX29wdGltaXplKTogTGlrZXdpc2UuCgkoY29tYmluZV9naXZzKTogTGlrZXdpc2UuCgkocmVjb21iaW5lX2dpdnMpOiBMaWtld2lzZS4KCSogcmVvcmcuYyAoZGJyX3NjaGVkdWxlKTogTGlrZXdpc2UuCgkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IExpa2V3aXNlLgoKCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IFVzZSB4bWFsbG9jIGluc3RlYWQgb2YgYWxsb2NhLgoKTW9uIE5vdiAgMSAxMzoyMjozMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBEb24ndCBvcHRpbWl6ZSB0aGUgQ0ZHCgl3aGVuIHJlYnVpbGRpbmcsIGp1c3QgYmVmb3JlIGRici4KCk1vbiBOb3YgIDEgMTQ6MzU6NTAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogb3V0cHV0LmggKGFzc2VtYmxlX2VuZF9mdW5jdGlvbiwgYXNzZW1ibGVfZGVzdHJ1Y3RvciwKCWFzc2VtYmxlX2NvbnN0cnVjdG9yLCBhc3NlbWJsZV9nY19lbnRyeSwgYXNzZW1ibGVfZ2xvYmFsLAoJYXNzZW1ibGVfbGFiZWwsIG91dHB1dF9jb25zdGFudF9wb29sKSBDb25zdGlmeSBhIGNoYXIqLgoKCSogdmFyYXNtLmMgKGFzc2VtYmxlX2Rlc3RydWN0b3IsIGFzc2VtYmxlX2NvbnN0cnVjdG9yLAoJYXNzZW1ibGVfZ2NfZW50cnksIGFzc2VtYmxlX2VuZF9mdW5jdGlvbiwgYXNzZW1ibGVfZ2xvYmFsLAoJYXNzZW1ibGVfbGFiZWwsIG91dHB1dF9jb25zdGFudF9wb29sKTogTGlrZXdpc2UuCgpNb24gTm92ICAxIDE0OjIyOjUxIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3RodW1iLmMgKHRodW1iX2V4cGFuZF9wcm9sb2d1ZSk6IEFkZCBjb21tZW50cwoJZXhwbGFpbmluZyB3aGF0IGlzIGdvaW4gb24gaW4gdGhpcyBmdW5jdGlvbi4KCk1vbiBOb3YgIDEgMDg6MDM6MTUgMTk5OSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IEluIG1hdGNoaW5nIGNhc2UsIHJlY29tcHV0ZQoJY29zdHMgc2luY2UgdGhlIGRpcmVjdGlvbiBvZiBtb3ZlbWVudCBpcyBkaWZmZXJlbnQuCgpTdW4gT2N0IDMxIDIxOjU5OjM0IE1TVCAxOTk5ICBEaWVnbyBOb3ZpbGxvIDxkbm92aWxsb0BjeWdudXMuY29tPgoKCSogcmVzb3VyY2UuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogRm9yIHVuY29uZGl0aW9uYWwgYnJhbmNoZXMsCgl0aGUgcmVzb3VyY2VzIGZvdW5kIGF0IHRoZSBicmFuY2ggdGFyZ2V0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUKCXJlc291cmNlcyBmb3VuZCBzbyBmYXIsIG5vdCBpbnRlcnNlY3RlZC4KClN1biBPY3QgMzEgMTU6NDg6NDkgMTk5OSAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgoJKiBmaXhpbmMvZml4dGVzdHMuYywgZml4aW5jL2ZpeGZpeGVzLmMgOiBLZWVwIGAjJyBpbiBmaXJzdCBjb2x1bW4gZm9yCglvbGQgY3BwJ3MuCgkqIGZpeGluYy9maXhpbmNsLmMgKGZjbnRsLmgpIDogRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIHR3aWNlLgoJKHN5cy9tbWFuLmgpOiBJbmNsdWRlIHRoaXMgZmlsZSBvbmx5IGlmICNIQVZFX01NQVAuCgkocnVuX2NvbXBpbGVzKTogSW5pdGlhbGl6ZSBgZXNhY19mbXQnIHdpdGggb25lIG9sZCBLUiBzdHJpbmcsIG5vdAoJd2l0aCBhdXRvbWF0aWNhbGx5IGNvbmNhdGVuYXRlZCBBTlNJIHN0cmluZ3MuCgpTdW4gT2N0IDMxIDIzOjU3OjA3IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBnZ2MtcGFnZS5jIChzdHJ1Y3QgcGFnZV9lbnRyeSk6IFJlbW92ZSBzYXZlX251bV9mcmVlX29iamVjdHMuCgkoRElWX1JPVU5EX1VQKTogUm9idXN0aWZ5LgoJKGdnY19yZWNhbGN1bGF0ZV9pbl91c2VfcCk6IE5ldyBmdW5jdGlvbi4KCShyZWxlYXNlX3BhZ2VzKTogRG9uJ3QgaW5saW5lIGl0LgoJKGdnY19hbGxvY19vYmopOiBEb24ndCByZWZ1c2UgdG8gYWxsb2NhdGUgb2JqZWN0cyBvbiBwYWdlcyBmb3IKCW91dGVyIGNvbnRleHRzLgoJKGdnY19wb3BfY29udGV4dCk6IFVzZSBnZ2NfcmVjYWxjdWxhdGVfaW5fdXNlX3AuCgkoY2xlYXJfbWFya3MpOiBBbHdheXMgc2F2ZSBpbl91c2VfcC4KCShzd2VlcF9wYWdlcyk6IFVzZSBnZ2NfcmVjYWxjdWxhdGVfaW5fdXNlX3AuCgkoZ2djX3BhZ2VfcHJpbnRfc3RhdGlzdGljcyk6IEF2b2lkIHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29ucy4KCVJlbGVhc2UgcGFnZXMgYmVmb3JlIGNvdW50aW5nIHN0YXRpc3RpY3MuCgpTdW4gT2N0IDMxIDIzOjQyOjM3IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEZpeCB0aGlua28gaW4gdGhpcyBjaGFuZ2U6CgoJRnJpIE9jdCAyOSAxNToyNTowNyAxOTk5ICBBcm5hdWQgQ2hhcmxldCAgPGNoYXJsZXRAQUNULUV1cm9wZS5GUj4KCgkocmVzdF9vZl9jb21waWxhdGlvbik6IElmIGluc2lkZSBhbiBpbmxpbmVkIGV4dGVybmFsIGZ1bmN0aW9uLAoJcHJldGVuZCB3ZSBhcmUganVzdCBiZWluZyBkZWNsYXJlZC4KClN1biBPY3QgMzEgMjM6MDM6MjUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChjYWxjdWxhdGVfZ2xvYmFsX3JlZ3NfbGl2ZSk6IEZpeCB0aGlua28uCgoJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEZpeCBidWdzIGluIHByZXZpb3VzCgljaGFuZ2UgZnJvbSBPY3QgMjgsIDE5OTkuCgpTdW4gT2N0IDMxIDIwOjI3OjQ1IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF92YWx1ZV9yZXR1cm4pOiBGaXggdHlwbyBpbiB0aGlzIGNoYW5nZToKCglUaHUgT2N0IDI4IDE4OjA2OjUwIDE5OTkgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgkoZXhwYW5kX3ZhbHVlX3JldHVybik6IENvcnJlY3RseSBjb252ZXJ0IFZBTCB3aGVuIHByb21vdGluZyBmdW5jdGlvbgoJcmV0dXJuOyBzdXBwb3J0IFJFVFVSTl9SRUcgYmVpbmcgYSBQQVJBTExFTC4KClN1biBPY3QgMzEgMjA6MjU6NDIgMTk5OSAgTWFyayBQLiBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGV4cHIuYyAocmVhZG9ubHlfZmllbGRzX3ApOiBJZ25vcmUgZXZlcnl0aGluZyBleGNlcHQgRklFTERfREVDTHMuCgpTdW4gT2N0IDMxIDIwOjQyOjE3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGhhcmQtcmVnLXNldC5oIChyZWdfbmFtZXMpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogcmVnY2xhc3MuYyAgKHJlZ19uYW1lcyk6IExpa2V3aXNlLgoKCSogcmVncy5oIChyZWdfbmFtZXMpOiBMaWtld2lzZQoKCSogYTI5ay9hMjlrLmMgKHJlZ19uYW1lcyk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCgkqIGEyOWsvYTI5ay5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBhcmMvYXJjLmMgKGFyY19zYXZlX3Jlc3RvcmUsIGFyY19vdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsCglhcmNfb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UuCgoJKiBlbHhzaS9lbHhzaS5jIChyZWdfbmFtZXMpOiBMaWtld2lzZS4KCgkqIGdtaWNyby9nbWljcm8uaCAoRlVOQ1RJT05fUFJPTE9HVUUsIEZVTkNUSU9OX0VQSUxPR1VFKTogTGlrZXdpc2UuCgoJKiBtMzJyL20zMnIuYyAobTMycl9vdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUsIGVtaXRfY29uZF9tb3ZlKToKCUxpa2V3aXNlLgoKCSogbTg4ay9tODhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IExpa2V3aXNlLgoKCSogc3BhcmMvc3BhcmMuYyAoc3BhcmNfZmxhdF9vdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsCglzcGFyY19mbGF0X291dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IExpa2V3aXNlLgoKU3VuIE9jdCAzMSAxMzozMjoxNSBDRVQgMTk5OSAgTWFyYyBMZWhtYW5uIDxwY2dAZ29vZi5jb20+CgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFNlcGFyYXRlIHRoZSBzZXRqbXAvdmZvcmsgY2xvYmJlcgoJd2FybmluZyBmcm9tIC1XdW5pbml0aWFsaXplZCBhbmQgcHV0IGl0IHVuZGVyIC1XLgoJKiBmdW5jdGlvbi5jICh1bmluaXRpYWxpemVkX3ZhcnNfd2FybmluZyk6IFdhcm4gb25seSB3aGVuIHRoZQoJY29ycmVzcG9uZGluZyBmbGFnIGlzIHNldC4KClN1biBPY3QgMzEgMDE6NTM6MzAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3NlLmMgKGNzZV9pbnNuKTogSWYgYW4gaW5zbiBoYXMgb25seSBhIHNpbmdsZSBzZXQsIFNSQ19FUVYKCWlzIG5vbnplcm8gYW5kIHRoZSBzaW5nbGUgc2V0IGRvZXMgbm90IGhhdmUgYW4gZWx0LCB0aGVuIGFzc2lnbgoJaXQgYW4gZWx0LgoKCSogc2ltcGxpZnktcnR4LmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoT0JKUyk6IEFkZCBzaW1wbGlmeS1ydHgubwoJKHNpbXBsaWZ5LXJ0eC5vKTogQWRkIGRlcGVuZGVuY2llcy4KCSogcnRsLmggKHNpbXBsaWZ5X2dlbl9iaW5hcnksIHNpbXBsaWZ5X3J0eCk6IEFkZCBwcm90b3R5cGVzLgoJKiBjc2UuYzogVXNlIHNpbXBsaWZ5X2dlbl9iaW5hcnkgaW50ZWFkIG9mIGNzZV9nZW5fYmluYXJ5LgoJKGNzZV9nZW5fYmluYXJ5LCBzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBEZWxldGUuCgkoc2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbiwgc2ltcGxpZnlfcGx1c19taW51cyk6IExpa2V3aXNlLgoJKGNoZWNrX2ZvbGRfY29uc3RzLCBzaW1wbGlmeV9yZWxhdGlvbl9vcGVyYXRpb24pOiBMaWtld2lzZS4KCShzaW1wbGlmeV90ZXJuYXJ5X29wZXJhdGlvbik6IExpa2V3aXNlLgoJKGRlbGV0ZV90cml2aWFsbHlfZGVhZF9pbnNucyk6IFNpbXBsaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUKCVJFR19FUVVBTCBub3RlIGJlZm9yZSB0cnlpbmcgdG8gc3Vic3RpdHV0ZSBpdCBpbnRvIHRoZSBzb3VyY2UKCW9mIHRoZSByZWctcmVnIGNvcHkgYXQgdGhlIGVuZCBvZiBhIGxpYmNhbGwgc2VxdWVuY2UuCgoJKiBjb21iaW5lLmMgKGNvbWJpbmVfc2ltcGxpZnlfcnR4KTogUmVuYW1lZCBmcm9tIHNpbXBsaWZ5X3J0eC4gIEFsbAoJcmVmZXJlbmNlcy9jYWxsZXJzIGNoYW5nZWQuCgoJKiBtbjEwMjAwLmMgKG1uMTAyMDBfdmFfYXJnKTogRm9yY2UgdGhlIHJldHVybiB2YWx1ZSBpbnRvIGEKCXJlZ2lzdGVyLgoKCSogZnIzMC5oIChFWFRSQV9DQ19OQU1FUyk6IFJlbW92ZSBvYnNvbGV0ZSBtYWNyby4KCgkqIGNjY3AuYyAobWFjcm9leHBhbmQpOiBBdm9pZCBvdXQgb2YgcmFuZ2UgYWNjZXNzZXMgZm9yIG9taXR0ZWQKCWFyZ3VtZW50cy4KClNhdCBPY3QgMzAgMjI6NDI6NTAgMTk5OSAgU3RlcGhlbiBMIE1vc2hpZXIgPG1vc2hpZXJAbWVkaWFvbmUubmV0PgoKCSogYy1sZXguYyAoeXlsZXgpOiBBY2NlcHQgJ2YnIGluIG1hbnRpc3NhIG9mIGhleCBmbG9hdCBjb25zdGFudC4KClNhdCBPY3QgMzAgMjI6MTk6MjYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogRml4IHRoaW5rbyB3aGVuIG9wdGltaXppbmcgY29tcGFyaXNvbnMKCWFnYWluc3QgLTAuMC4KClNhdCBPY3QgMzAgMjE6MzI6MTcgMTk5OSAgRGF2aWQgU3Rhcm5lciAgPGRzdGFybmVyOThAYWFzYWEub2ZlLm9yZz4KCgkqIGdjYy50ZXhpIChQYXNzZXMpOiBVcGRhdGUgZnJvbnQtZW5kIGZpbGVzIHRvIHRoZWlyIGN1cnJlbnQKCWxvY2F0aW9uLgoKU2F0IE9jdCAzMCAxNDo0MTo0MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoU0VDT05EQVJZX0lOUFVUX1JFTE9BRF9DTEFTUyk6IENhbGwgc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcy4KCShTRUNPTkRBUllfT1VUUFVUX1JFTE9BRF9DTEFTUyk6IExpa2V3aXNlLgoJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBhZGRpdGlvbl9vcGVyYXRpb24uCgkqIGFscGhhLXByb3Rvcy5oIChhZGRpdGlvbl9vcGVyYXRpb24pOiBEZWNsYXJlLgoJKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBMaWtld2lzZS4KCSogYWxwaGEuYyAoYWRkaXRpb25fb3BlcmF0aW9uKTogTmV3LgoJKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBOZXcsIGZyb20gb2xkIFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MuCgkqIGFscGhhLm1kIChhZGRkaTMpOiBUdXJuIGludG8gZXhwYW5kZXIuCgkoKmxkYSwgKmFkZGRpXzIpOiBOZXcuCgkobW92c2YsIG1vdmRmIHBhdHRlcm5zKTogRG9uJ3QgcHJlZmVyZW5jZSBpbnRlZ2VyIHJlZ3MuCgkobW92c2ksIG1vdmRpIHBhdHRlcm5zKTogRG9uJ3QgcHJlZmVyZW5jZSBmcCByZWdzLgoKU2F0IE9jdCAzMCAxNDozODoyMiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VucmVjb2cuYyAod3JpdGVfc3dpdGNoKTogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBDT0RFIGNhc2VzLgoKU2F0IE9jdCAzMCAxNDozMTo0OCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2djLWNvbW1vbi5jOiBVcGRhdGUgcHJlLWZ1bmN0aW9uIGNvbW1lbnRhcnkuCgkqIGdnYy1wYWdlLmM6IExpa2V3aXNlLgoJKHBvaXNvbik6IFJlbW92ZS4KCShwb2lzb25fcGFnZXMpOiBVc2UgbWVtc2V0IGRpcmVjdGx5LgoJKGdnY19hbGxvY19vYmopOiBMaWtld2lzZS4gIFVzZSBhIGRpZmZlcmVudCBwYXR0ZXJuIHRoYW4gcG9pc29uX3BhZ2VzLgoJKGdnY19jb2xsZWN0KTogUG9pc29uIGJlZm9yZSBzd2VlcGluZy4KCSogZ2djLXNpbXBsZS5jOiBVcGRhdGUgcHJlLWZ1bmN0aW9uIGNvbW1lbnRhcnkuCgkoZ2djX2FsbG9jX29iaik6IFBvaXNvbiBub256ZXJvZWQgbWVtb3J5LgoKU2F0IE9jdCAzMCAxNDoyODo1MiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZ2djLWNvbW1vbi5jIChnZ2NfcHJpbnRfc3RhdGlzdGljcyk6IE1ha2UgYXJndW1lbnRzIHRvIGZwcmludGYKCW1hdGNoIGZvcm1hdCBzdHJpbmcsIGV2ZW4gb24gNjQtYml0IGhvc3RzLgoJKiBnY2MtcGFnZS5jIChnZ2NfcGFnZV9wcmludF9zdGF0aXN0aWNzKTogTGlrZXdpc2UuCgpTYXQgT2N0IDMwIDE0OjM4OjA0IDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY29uZmlnL2kzODYvaTM4Ni5jIChpeDg2X2NwdSk6IFJldmVydCBsYXN0IHBhdGNoLgoJKiBjb25maWcvaTM4Ni9pMzg2LmggKGl4ODZfY3B1KTogRGl0dG8uCgpGcmkgT2N0IDI5IDE3OjAwOjQyIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF90eXBlKTogV2hlbiBjb21wdXRlIFRZUEVfU0laRV9VTklUIGZyb20KCVRZUEVfU0laRSwgY29udmVydCB0eXBlIG9mIHJlc3VsdCB0byBzaXpldHlwZS4KCkZyaSBPY3QgMjkgMTQ6MzQ6MTcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoY291bnRfb3JfcmVtb3ZlX2RlYXRoX25vdGVzKTogRXF1YXRlIE5VTEwgd2l0aCB0aGUKCXVuaXZlcnNhbCBzZXQuCgoJKiBqdW1wLmMsIHJlZy1zdGFjay5jLCB0b3BsZXYuYzogUmV2ZXJ0IE9jdCAyNyBjaGFuZ2UuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogUmVidWlsZCBDRkcgaW1tZWRpYXRlbHkgYmVmb3JlCglkYnJfc2NoZWR1bGUuCgoJKiBpMzg2LmMgKHBpY19sYWJlbF9ubyk6IERlbGV0ZS4KCShpeDg2X2F0dHJfbGVuZ3RoX2RlZmF1bHQpOiBEb24ndCB1c2Ugc2luZ2xlX3NldCB0byBwZWVrCglpbnNpZGUgYSBwYXJhbGxlbC4KCgkqIHJlY29nLmMgKHBlZXBob2xlMl9vcHRpbWl6ZSk6IEFsbG93IHJlY29nX25leHRfaW5zbiB0byBpbmRleAoJdGhlIGZpcnN0IGluc24gYWZ0ZXIgYmItPmVuZC4KCSogaTM4Ni5tZCAocHVzaCBtZW0gcGVlcHMpOiBTY3JhdGNoIGlzIGxpdmUgYWZ0ZXIgZXZhbHVhdGlvbgoJb2YgdGhlIG1lbW9yeS4KCShjbXAgbWVtIHBlZXApOiBTaW1pbGFybHkuCgpGcmkgT2N0IDI5IDExOjUwOjExIDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY2FsbHMuYyAoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBGaXggZGVjbGFyYXRpb24gb2YgYWxpZ25tZW50X3BhZC4KCSogZnVuY3Rpb24uYyAocGFkX3RvX2FyZ19hbGlnbm1lbnQpOiBBZGQgbWlzc2luZyBicmFjZXMuCgpGcmkgT2N0IDI5IDEzOjUzOjQ4IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFscGhhL2FscGhhLXByb3Rvcy5oIChsaXRlcmFsX3NlY3Rpb24pOiBBZGQgcHJvdG90eXBlLgoJKGFscGhhX25lZWRfbGlua2FnZSwgYWxwaGFfc3RhcnRfZnVuY3Rpb24sYWxwaGFfZW5kX2Z1bmN0aW9uKToKCUNvbnN0aWZ5IGEgY2hhciouCgoJKiBhbHBoYS9hbHBoYS5jIChhbHBoYV9yYV9ldmVyX2tpbGxlZCwgc2V0X2ZyYW1lX3JlbGF0ZWRfcCk6IEFkZAoJcHJvdG90eXBlLgoJKGFscGhhX3N0YXJ0X2Z1bmN0aW9uLCBhbHBoYV9lbmRfZnVuY3Rpb24sIGZsb2F0X3N0cmluZ3MsCglhbHBoYV9uZWVkX2xpbmthZ2UpOiBDb25zdGlmeSBhIGNoYXIqCgoJKiBhbHBoYS9hbHBoYS5oIChBU01fT1VUUFVUX0FTQ0lJLCBBU01fT1VUUFVUX01JX1RIVU5LKTogTGlrZXdpc2UuCgoJKiBhbHBoYS9hbHBoYTMyLmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBMaWtld2lzZS4KCgkqIGFscGhhL2VsZi5oIChBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNUKTogTGlrZXdpc2UuCgoJKiBhbHBoYS92bXMuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBMaWtld2lzZS4KCkZyaSBPY3QgMjkgMTM6NDk6MzkgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZmxvdy5jIChkZWJ1Z19mbG93X2luZm8pOiBBZGQgcHJvdG90eXBlLgoKCSogZ2NjLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGdjc2UuYyAoZXhwcl9yZWFjaGVzX2hlcmVfcF93b3JrLCBwcmVfZXhwcl9yZWFjaGVzX2hlcmVfcF93b3JrKToKCUxpa2V3aXNlLgoKCSogcmVsb2FkMS5jIChmYWlsZWRfcmVsb2FkLCBzZXRfcmVsb2FkX3JlZyk6IExpa2V3aXNlLgoKCSogbWlwcy10ZmlsZS5jIChtYWluKTogTGlrZXdpc2UuCgkocGZhdGFsX3dpdGhfbmFtZSwgZmFuY3lfYWJvcnQsIGJvdGNoLCBmYXRhbCwgY2F0Y2hfc2lnbmFsKTogTWFyawoJd2l0aCBBVFRSSUJVVEVfTk9SRVRVUk4uCgpGcmkgT2N0IDI5IDE4OjE2OjAzIDE5OTkgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogY29uZmlnL2kzODYvaTM4Ni5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogRG9uJ3QgZG8gYW55dGhpbmcgaWYKCURFQ0wgaXMgbm90IGEgbWVtb3J5IHJlZi4KCkZyaSBPY3QgMjkgMDk6MDU6MzQgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWcvaTM4Ni9pMzg2LmggKGl4ODZfY3B1KTogUmVtb3ZlIGV4dGVybiBhdHRyaWJ1dGUuCgkqIGNvbmZpZy9pMzg2L2kzODYuYyAoaXg4Nl9jcHUpOiBBZGQgZXh0ZXJuIGF0dHJpYnV0ZS4KCkZyaSBPY3QgMjkgMTY6MzA6MDQgMTk5OSAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9lbGYuaDogcmVtb3ZlIE5BTUVfX01BSU4gYW5kIFNZTUJPTF9fTUFJTi4KCSogY29uZmlnL21pcHMvZWxmNjQuaDogZGl0dG8uCgpGcmkgT2N0IDI5IDA4OjAzOjU3IDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbik6IE5ldyBhcmd1bWVudCBhbGlnbm1lbnRfcGFkLgoJVXBkYXRlIGFsbCBjYWxsZXJzLiAgQWRqdXN0IHN0YWNrIHBvaW50ZXIgYmFzZWQgb24gYWxpZ25tZW50IHBhZC4KCSogZnVuY3Rpb24uYyAocGFkX3RvX2FyZ19hbGlnbm1lbnQpOiAgTmV3IGFyZ3VtZW50IGFsaWdubWVudF9wYWQuCglVcGRhdGUgYWxsIGNhbGxlcnMuICBUcmFjayBhbGlnbm1lbnRfcGFkIGlmIGJvdW5kYXJ5ID4gUEFSTV9CT1VOREFSWS4KCShsb2NhdGVfYW5kX3BhZF9wYXJtKTogTmV3IGFyZ3VtZW50IGFsaWdubWVudF9wYWQuICBVcGRhdGUgYWxsCgljYWxsZXJzLgoJKiBleHByLmggKGVtaXRfcHVzaF9pbnNuKTogVXBkYXRlIHByb3RvdHlwZS4KCShsb2NhdGVfYW5kX3BhZF9wYXJtKTogVXBkYXRlIHByb3RvdHlwZS4KCSogY2FsbHMuYyAoYXJnX2RhdGEpOiAgQWRkIG5ldyBmaWVsZCBhbGlnbm1lbnRfcGFkLgoJKGluaXRpYWxpemVfYXJndW1lbnRfaW5mb3JtYXRpb24pOiBJbml0aWFsaXplIGFsaWdubWVudF9wYWQuCgpGcmkgT2N0IDI5IDAyOjUxOjM1IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBleGNlcHQuYyAoZnJlZV9laF9uZXN0aW5nX2luZm8pOiBGcmVlIHRoZSBpbmZvIGl0c2VsZi4KCSogZnVuY3Rpb24uYyAoZnJlZV9hZnRlcl9jb21waWxhdGlvbik6IERvbid0IGZyZWUgTlVMTC4KCSogZ2NzZS5jIChhbGxvY19wcmVfbWVtKTogRnJlZSB0aGUgdGVtcF9iaXRtYXAsIHRvby4KCShwcmVfZWRnZV9pbnNlcnQpOiBGcmVlIGluc2VydGVkLgoJKiBzdG10LmMgKGZyZWVfc3RtdF9zdGF0dXMpOiBEb24ndCBmcmVlIE5VTEwuCgpGcmkgT2N0IDI5IDE1OjI1OjA3IDE5OTkgIEFybmF1ZCBDaGFybGV0ICA8Y2hhcmxldEBBQ1QtRXVyb3BlLkZSPgoKCSogZ2Nvdi5jIChESVJfU0VQQVJBVE9SKTogUHJvdmlkZSBkZWZhdWx0LgoJKG91dHB1dF9kYXRhKTogQWRkIHRlc3QgZm9yIE1TLURPUyBmb3JtYXQgYWJzb2x1dGUgZmlsZW5hbWUuCgkoZmFuY3lfYWJvcnQpOiBDb3JyZWN0IHByb2dyYW0gbmFtZS4KCShvcGVuX2ZpbGVzKTogT3BlbiBhbGwgZmlsZXMgaW4gYmluYXJ5IG1vZGUuCgkqIGxpYmdjYzIuYyAoX19iYl9leGl0X2Z1bmMpOiBMaWtld2lzZS4KCgkqIHByb2ZpbGUuYyAoaW5pdF9icmFuY2hfcHJvYik6IFNwZWNpZnkgYmluYXJ5IHdoZW4gb3BlbmluZyBmaWxlcy4KCgkqIGZsYWdzLmggKGZsYWdfdW53aW5kX3RhYmxlcyk6IE5ldyBkZWNsLgoJKiB0b3BsZXYuYyAoZmxhZ191bndpbmRfdGFibGUpOiBOZXcgZGVmaW5pdGlvbi4KCShmX29wdGlvbnMpOiBBZGQgLWZ1bndpbmQtdGFibGVzLgoJKGRlY29kZV9nX29wdGlvbik6IENsYXJpZnkgd2FybmluZyB3aGVuIHVua25vd24gLWcgb3B0aW9uIGlzIGdpdmVuLgoJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBJZiBpbnNpZGUgYW4gaW5saW5lZCBleHRlcm5hbCBmdW5jdGlvbiwKCXByZXRlbmQgd2UgYXJlIGp1c3QgYmVpbmcgZGVjbGFyZWQuCgoJKiBkd2FyZjJvdXQuYyAoZHdhcmYyb3V0X2RvX2ZyYW1lKTogQ2hlY2sgLWZ1bndpbmRfdGFibGVzLgoJKGR3YXJmMm91dF9mcmFtZV9maW5pc2gpOiBMaWtld2lzZS4KCkZyaSBPY3QgMjkgMDc6NDQ6MjYgMTk5OSAgVmFzY28gUGVkcm8gIDx2cEBkaS5mY3QudW5sLnB0PgoKCSogZm9sZC1jb25zdC5jIChtZXJnZV9yYW5nZXMpOiBJZiBub3QgaW4wLCBidXQgaW4xLCBoYW5kbGUKCXVwcGVyIGJvdW5kcyBlcXVhbCBsaWtlIHN1YnNldCBjYXNlLgoKVGh1IE9jdCAyOCAxOToyMjoyNCAxOTk5ICBEb3VnbGFzIFJ1cHAgPHJ1cHBAZ25hdC5jb20+CgoJKiBkYnhvdXQuYyAoZGJ4b3V0X3Bhcm1zKTogR2VuZXJhdGUgYSBzZWNvbmQgc3RhYnMgbGluZSBmb3IgcGFyYW1ldGVycwoJcGFzc2VkIGluIGEgcmVnaXN0ZXIgYnV0IG1vdmVkIHRvIHRoZSBzdGFjay4KClRodSBPY3QgMjggMTk6MTI6NTcgMTk5OSAgU2FtIFRhcmRpZXUgIDx0YXJkaWV1QGFjdC1ldXJvcGUuZnI+CgoJKiBnY2MuYyAocGFzc19leGl0X2NvZGVzLCBncmVhdGVzdF9zdGF0dXMpOiBOZXcgdmFyaWFibGVzLgoJKHN0cnVjdCBvcHRpb25fbWFwKTogQWRkIGVudHJ5IGZvciAiLS1wYXNzLWV4aXQtY29kZXMiLgoJKGV4ZWN1dGUpOiBVcGRhdGUgZ3JlYXRlc3Rfc3RhdHVzIGlmIGVycm9yLgoJKGRpc3BsYXlfaGVscCk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciAtcGFzcy1leGl0LWNvZGVzLgoJKHByb2Nlc3NfY29tbWFuZCk6IEhhbmRsZSAtcGFzcy1leGl0LWNvZGVzLgoJKG1haW4pOiBMb29rIGF0IHBhc3NfZXhpdF9jb2RlcyBhbmQgZ3JlYXRlc3Rfc3RhdHVzIG9uIGNhbGwgdG8gZXhpdC4KClRodSBPY3QgMjggMTg6MDY6NTAgMTk5OSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBSZWZpbmUgdGVzdCBmb3Igbm8gaW5wdXQgcmVsb2FkCgljYXNlIHRvIG5vdCBpbmNsdWRlcyByZWxvYWRzIGVtaXR0ZWQgYWZ0ZXIgaW5zbi4KCgkqIGZ1bmN0aW9uLmMgKGZpbmRfdGVtcF9zbG90c19mcm9tX2FkZHJlc3MpOiBIYW5kbGUgc3VtIGludm9sdmluZwoJYSByZWdpc3RlciB0aGF0IHBvaW50cyB0byBhIHRlbXAgc2xvdC4KCSh1cGRhdGVfdGVtcF9zbG90X2FkZHJlc3MpOiBNYWtlIHJlY3Vyc2l2ZSBjYWxsIGlmIGJvdGggb2xkIGFuZAoJbmV3IGFyZSBQTFVTIHdpdGggYSBjb21tb24gb3BlcmFuZC4KCSogY2FsbHMuYyAoZXhwYW5kX2NhbGwpOiBNYXJrIHRlbXAgc2xvdCBmb3IgcmVzdWx0IGFzIGhhdmluZwoJYWRkcmVzcyB0YWtlbi4KCgkqIHJ0bGFuYWwuYyAocmVnX3JlZmVyZW5jZWRfcCwgY2FzZSBJRl9USEVOX0VMU0UpOiBOZXcgY2FzZS4KCgkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBBZGQgc3RhbmRhcmRfZXhlY19wcmVmaXggd2l0aCAiR0NDIgoJY29tcG9uZW50IGFzIHdlbGwgYXMgIkJJTlVUSUxTIi4KCgkqIGludGVncmF0ZS5oIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IE5ldyBhcmcsIEZPUl9MSFMuCgkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IExpa2V3aXNlLgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24sIGludGVncmF0ZV9wYXJtX2RlY2xzLCBpbnRlZ3JhdGVfZGVjbF90cmVlKToKCUFsbCBjYWxsZXJzIGNoYW5nZWQuCgkqIHVucm9sbC5jIChpbml0YWxfcmVnX25vdGVfY29weSwgY29weV9sb29wX2JvZHkpOiBMaWtld2lzZS4KCgkqIGRieG91dC5jIChkYnhvdXRfdHlwZSwgY2FzZSBJTlRFR0VSX1RZUEVfTk9ERSk6IElmIGNhbiB1c2UKCWdkYiBleHRlbnNpb25zLCB3cml0ZSBzaXplIG9mIHR5cGU7IGFsc28gYmUgbW9yZSBjb25zaXN0ZW50CglpbiB1c2luZyByZWZlcmVuY2VzIHdoZW4gdGhpcyBpcyBhIHN1YnR5cGUuCgoJKiBwYS5tZCAoZXh0diwgZXh0enYsIGluc3YpOiBVc2UgZGVmaW5lX2V4cGFuZCB0byByZWplY3QgY29uc3RhbnQKCXRoYXQgaXMgb3V0IG9mIHJhbmdlLgoKCSogbG9vcC5jICh1bmtub3duX2NvbnN0YW50X2FkZHJlc3NfYWx0ZXJlZCk6IE5ldyB2YXJpYWJsZS4KCShwcmVzY2FuX2xvb3ApOiBJbml0aWFsaXplIGl0LgoJKG5vdGVfYWRkcl9zdG9yZWQpOiBTZXQgaXQgZm9yIFJUWF9VTkNIQU5HSU5HX1AgTUVNLgoJKGludmFyaWFudF9wLCBjYXNlIE1FTSk6IFJlbW92ZSBoYW5kbGluZyBmb3Igdm9sYXRpbGUgYW5kIHJlYWRvbmx5OwoJY2hlY2sgbmV3IHZhcmlhYmxlIGlmIHJlYWRvbmx5LgoJKGNoZWNrX2RicmFfbG9vcCk6IENoZGVjayB1bmtub3duX2NvbnN0YW50X2FkZHJlc3NfYWx0ZXJlZC4KCgkqIGNzZS5jIChjYW5vbl9oYXNoLCBjYXNlIE1FTSk6IERvIG5vdCByZWNvcmQgaWYgQkxLbW9kZS4KCShhZGRyX2FmZmVjdHNfc3BfcCk6IFJlbW92ZWQgZnJvbSBub3RlX21lbV93cml0dGVuIGFuZCBvbmx5CglkZWZpbmUgI2lmZGVmIEFVVE9fSU5DX0RFQy4KCgkqIGFscGhhLmMgKGlucHV0X29wZXJhbmQsIGNhc2UgQUREUkVTU09GKTogVHJlYXQgYXMgUkVHLgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzKTogUHJvcGVybHkgaGFuZGxlIHJlZ2lzdGVyIG1vdmUKCWRpcmVjdGlvbnMuCgoJKiB2YXJhc20uYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCwgY2FzZSBNSU5VU19FWFBSKToKCURvbid0IHRoaW5rIHZhbGlkIGlmIGJvdGggb3BlcmFuZHMgYXJlIGludmFsaWQuCgkoc3RydWN0IGNvbnN0YW50X2Rlc2NyaXB0b3IpOiBOZXcgZmllbGQgUlRMLgoJKG1hcmtfY29uc3RfaGFzaF9lbnRyeSk6IE1hcmsgaXQuCgkocmVjb3JkX2NvbnN0YW50eyxfcnR4fSk6IEluaXRpYWxpemUgaXQuCgkob3V0cHV0X2NvbnN0YW50X2RlZik6IEFsbG9jYXRlIFJUTCBpbiBwZXJtYW5lbnQgb2JzdGFjayBhbmQKCXNhdmUgaW4gdGFibGUuCgkoe3JlY29yZCxjb21wYXJlfV9jb25zdGFudF8xKTogTW9kZXMgbXVzdCBtYXRjaCBmb3IKCUNPTlNUUlVDVE9SIG9mIEFSUkFZX1RZUEUuCgoJKiBjLWNvbW1vbi5oIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogRGVsZXRlIGRlY2wgZnJvbSBoZXJlLgoJKiBvdXRwdXQuaCAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IE1vdmUgZGVjbCB0byBoZXJlLgoJKiBjLWNvbW1vbi5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogRGVsZXRlIGZ1bmN0aW9uIGZyb20gaGVyZS4KCSogdmFyYXNtLmMgKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOiBNb3ZlIGZ1bmN0aW9uIHRvIGhlcmUuCgoJKiB0cmVlLmggKFNUUklQX1NJR05fTk9QUyk6IE5ldyBtYWNyby4KCSogZm9sZC1jb25zdC5jIChvcHRpbWl6ZV9taW5tYXhfY29tcGFyaXNvbik6IE5ldyBmdW5jdGlvbi4KCShpbnZlcnRfdHJ1dGh2YWx1ZSwgY2FzZSBXSVRIX1JFQ09SRF9FWFBSKTogTmV3IGNhc2UuCgkoZm9sZCk6IFVzZSBTVFJJUF9TSUdOX05PUFMgaW5zdGVhZCBvZiBTVFJJUF9UWVBFX05PUFMuCgkoZm9sZCwgY2FzZSBFUV9FWFBSKTogQ2FsbCBvcHRpbWl6ZV9taW5tYXhfY29tcGFyaXNvbiBhbmQgYWRkCgljYXNlcyB3aXRoIEFCU19FWFBSLCBORUdBVEVfRVhQUiwgUExVU19FWFBSLCBNSU5VU19FWFBSLCBhbmQKCXdpZGVuaW5nIGNvbnZlcnNpb25zLgoJKGZvbGQsIGNhc2UgTEVfRVhQUik6IFJld29yayBjaGFuZ2luZyB1bnNpZ25lZCB0byBzaWduZWQgY29tcGFyaXNvbnMKCXRvIGxvb2sgYXQgc2l6ZSBvZiBtb2RlLCBub3QgcHJlY2lzaW9uIG9mIHR5cGU7IGFsc28gYWRkIG1pc3NpbmcgY2FzZXMuCgkob3B0aW1pemVfYml0X2ZpZWxkX2NvbXBhcmUsIGRlY29kZV9maWVsZF9yZWZlcmVuY2UpOiBEb24ndCB0cnkgdG8KCW9wdGltaXplIENPTVBPTkVOVF9SRUYgb2YgYSBQTEFDRUhPTERFUl9FWFBSLgoKCSogZHdhcmYyb3V0LmMgKGN0eXBlLmgpOiBJbmNsdWRlLgoJKGR3YXJmMm91dF9zZXRfZGVtYW5nbGVfbmFtZV9mdW5jKTogTmV3IGZ1bmN0aW9uLgoJKHNpemVfb2ZfbGluZV9pbmZvKTogRGVsZXRlZC4KCShvdXRwdXRfbGluZV9pbmZvKTogQ29tcHV0ZSBzaXplIG9mIGxpbmUgaW5mbyB0YWJsZSBmcm9tIGRpZmZlcmVuY2UKCW9mIGxhYmVscy4KCShiYXNlX3R5cGVfZGllLCBhZGRfbmFtZV9hdHRyaWJ1dGUpOiBDYWxsIGRlbWFuZ2xlIGZ1bmN0aW9uLCBpZiBhbnkuCgkoZmllbGRfYnl0ZV9vZmZzZXQpOiBVc2UgYml0cyBwZXIgd29yZCBmb3IgdmFyaWFibGUgbGVuZ3RoIGZpZWxkcy4KCShnZW5fYXJyYXlfdHlwZV9kaWUpOiBBZGQgYXJyYXkgbmFtZS4KCShnZW5fc3VicHJvZ3JhbV9kaWUpOiBJZ25vcmUgREVDTF9JTkxJTkUgaWYgLWZuby1pbmxpbmUuCgkoZHdhcmYyb3V0X2FkZF9saWJyYXJ5X3VuaXRfaW5mbyk6IE5ldyBmdW5jdGlvbi4KCgkqIGV4cGxvdy5jIChzZXRfc3RhY2tfY2hlY2tfbGliZnVuYyk6IE5ldyBmdW5jdGlvbi4KCShzdGFja19jaGVja19saWJmdW5jKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShwcm9iZV9zdGFja19yYW5nZSk6IEFsbG93IGZyb250LWVuZCB0byBzZXQgdXAgYSBsaWJmdW5jIHRvIGNhbGwuCgoJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBXaGVuIG1ha2luZyBjb21wYXJpc29uIGluIHdpZGVyCgltb2RlLCBjaGVjayBmb3IgaGF2aW5nIGNvbW11dGVkIGFuIEFORCBhbmQgYSBTVUJSRUcuCgkoY29udGFpbnNfbXVsZGl2KTogTmV3IGZ1bmN0aW9uLgoJKHRyeV9jb21iaW5lKTogQ2FsbCBpdCB3aGVuIGRpdmlkaW5nIGEgUEFSQUxMRUwuCgkoc2ltcGxpZnlfcnR4LCBjYXNlIFRSVU5DQVRFKTogRG9uJ3QgcmVtb3ZlIGZvciB1bXVsc2kzX2hpZ2hwYXJ0LgoJKHNpbXBsaWZ5X2NvbXBhcmlzb24sIGNhc2UgQVNISUZUUlQpOiBSZWNvZ25pemUgc2lnbi1leHRlbnNpb24gb2YKCWEgUExVUy4KCShyZWNvcmRfdmFsdWVfZm9yX3JlZyk6IElmIFRFTSBpcyBhIGJpbmFyeSBvcGVyYXRpb24gd2l0aCB0d28gQ0xPQkJFUnMsCgl1c2Ugb25lIG9mIHRoZSBDTE9CQkVScyBpbnN0ZWFkLgoJKGlmX3RoZW5fZWxzZV9jb25kKTogSWYgY29tcGFyaW5nIGFnYWluc3QgemVybywganVzdCByZXR1cm4gdGhpbmcKCWJlaW5nIGNvbXBhcmVkLgoKCSogb3B0YWJzLmMgKGV4cGFuZF9hYnMpOiBJZiBtYWNoaW5lIGhhcyBNQVgsIEFCUyAoeCkgaXMgTUFYICh4LCAteCkuCglEb24ndCBnZW5lcmF0ZSBzaGlmdHMgYW5kIHN1YnRyYWN0IGlmIGhhdmUgY29uZGl0aW9uYWwgYXJpdGhtZXRpYy4KCgkqIHJ0bC5oIChkZWxldGVfYmFycmllcik6IE5ldyBkZWNsYXJhdGlvbi4KCSoganVtcC5jIChqdW1wX29wdGltaXplKTogU2V0IHVwIHRvIGhhbmRsZSBjb25kaXRpb25hbCBjYWxsLgoJSW4gY29uZGl0aW9uYWwgYXJpdGhtZXRpYyBjYXNlLCBoYW5kbGUgQ0FMTF9JTlNOIGZvbGxvd2VkIGJ5IGEgQkFSUklFUi4KCShkZWxldGVfYmFycmllcik6IE5ldyBmdW5jdGlvbi4KCgkqIHJ0bC5jIChyZWFkX3J0eCk6IENhbGwgZmF0YWwgaWYgYmFkIFJUTCBjb2RlOyBjaGVjayBmb3IgYmFkIG1vZGUuCgoJKiByZWNvZy5jIChub25tZW1vcnlfb3BlcmFuZCk6IEFjY2VwdCBBRERSRVNTT0YuCgoJKiB0cmVlLmMgKGJ1aWxkX3R5cGVfYXR0cmlidXRlX3ZhcmlhbnQpOiBQdXNoIHRvIG9ic3RhY2sgb2YKCXR0eXBlIGFyb3VuZCB0eXBlX2hhc2hfY2Fub24gY2FsbC4KCgkqIGV4cHIuYyAocGxhY2Vob2xkZXJfbGlzdCk6IE1vdmUgZGVjbCB0byBmaWxlIHNjb3BlLgoJKGV4cGFuZF9leHByKTogRG9uJ3QgZm9yY2UgYWNjZXNzIHRvIHZvbGF0aWxlIGp1c3QgYmVjYXVzZSBpdHMKCWFkZHJlc3MgaXMgdGFrZW4uCglJZiBpZ25vcmluZyByZWZlcmVuY2Ugb3BlcmF0aW9ucywganVzdCBleHBhbmQgdGhlIG9wZXJhbmRzLgoJKGV4cGFuZF9leHByLCBjYXNlIENPTVBPTkVOVF9SRUYpOiBQcm9wYWdhdGUKCUVYUEFORF9DT05TVF9BRERSRVNTIHRvIHJlY3Vyc2l2ZSBjYWxsIHdoZW4gZXhwYW5kaW5nIGlubmVyLgoJUmVmaW5lIHRlc3QgZm9yIHVzaW5nIGJpdGZpZWxkIG9wZXJhdGlvbnMgdnMgcG9pbnRlciBwdW5uaW5nLgoJKGV4cGFuZF9leHByLCBjYXNlIENPTlZFUlRfRVhQUik6IElmIGNvbnZlcnRpbmcgdG8KCUJMS21vZGUgVU5JT05fVFlQRSBmcm9tIEJMS21vZGUsIGp1c3QgcmV0dXJuIGlubmVyIG9iamVjdC4KCVVzZSBwcm9wZXIgbW9kZSBpbiBzdG9yZV9maWVsZCBjYWxsLgoJUHJvcGVybHkgc2V0IHNpemVzIG9mIG9iamVjdCB0byBzdG9yZSBhbmQgdG90YWwgc2l6ZSBpbiBzdG9yZV9maWVsZAoJY2FsbCBmb3IgY29udmVydCB0byB1bmlvbi4KCShleHBhbmRfZXhwciwgY2FzZSBBUlJBWV9SRUYpOiBJZiBPUDAgaXMgaW4gYSByZWdpc3RlciwgcHV0IGl0IGluCgltZW1vcnkgKGxpa2UgZm9yIEFERFJfRVhQUikuICBBbHNvLCBkb24ndCBwdXQgY29uc3RhbnQgaW4gcmVnaXN0ZXIgaWYKCXdlJ2xsIHdhbnQgaXQgaW4gbWVtb3J5LgoJKHJlYWRvbmx5X2ZpZWxkc19wKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9leHByLCBjYXNlIElORElSRUNUX1JFRik6IENhbGwgaXQgaWYgTEhTLgoJKGV4cGFuZF9hc3NpZ25tZW50KTogSGFuZGxlIGEgUkVTVUxUX0RFQ0wgd2hlcmUKCURFQ0xfUlRMIGlzIGEgUEFSQUxMRUwuCgkoZG9fanVtcCwgY2FzZSBXSVRIX1JFQ09SRF9FWFBSKTogTmV3IGNhc2UuCgkoZ2V0X2lubmVyX3JlZmVyZW5jZSk6IEFsd2F5cyBnbyBpbnNpZGUgYSBDT05WRVJUX0VYUFIKCWFuZCBOT1BfRVhQUiBpZiBib3RoIG1vZGVzIGFyZSB0aGUgc2FtZS4KCShzdG9yZV9maWVsZCk6IFVzZSBiaXRmaWVsZCBvcGVyYXRpb25zIGlmIHNpemUgb2YgYml0c2l6ZSBpcyBub3Qgc2FtZQoJYXMgc2l6ZSBvZiBSSFMncyB0eXBlLgoJQ2hlY2sgZm9yIGJpdHBvcyBub3QgYSBtdWx0aXBsZSBvZiBhbGlnbm1lbnQgaW4gQkxLbW9kZSBjYXNlLgoJRG8gYmxvY2sgbW92ZSBpbiBsYXJnZXN0IHBvc3NpYmxlIGFsaWdubWVudC4KCShzdG9yZV9jb25zdHJ1Y3Rvcik6IFNldCBCSVRTSVpFIHRvIC0xIGZvciB2YXJpYWJsZSBzaXplIGFuZCBwcm9wZXJseQoJaW4gY2FzZSBvZiBhcnJheSBvZiBCTEttb2RlLgoJKGV4cGFuZF9leHByX3VuYWxpZ25lZCk6IE5ldyBmdW5jdGlvbi4KCShkb19jb21wYXJlX2FuZF9qdW1wKTogQ2FsbCBpdC4KCgkqIG1pcHMvaXJpczUuaCAoU1dJVENIRVNfTkVFRF9TUEFDRVMpOiBOZXcgbWFjcm8uCgkqIGNvbGxlY3QyLmMgKG1haW4pOiBPbmx5IGFsbG93IC1vZm9vIGlmIFNXSVRDSEVTX05FRURfU1BBQ0VTCglkb2VzIG5vdCBpbmNsdWRlICdvJy4KCgkqIGZ1bmN0aW9uLmMgKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVnc18xLCBjYXNlIFNFVCk6IEhhbmRsZSBjYXNlIHdoZXJlCglib3RoIFNFVF9ERVNUIGFuZCBTRVRfU1JDIHJlZmVyZW5jZSBhIHZpcnR1YWwgcmVnaXN0ZXIuCgkoZ2VuX21lbV9hZGRyZXNzb2YpOiBDb3B5IFJUWF9VTkNIQU5HSU5HX1AgZnJvbSBuZXcgUkVHIHRvIG9sZCBSRUcuCgoJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IEhhbmRsZSBjYXNlIG9mIHNldHRpbmcKCXZpcnR1YWwgc3RhY2sgdmFycyByZWdpc3RlciAoZnJvbSBidWlsdCBpbiBzZXRqbXApOyB3aGVuIHBhcmFtZXRlcgoJbGl2ZXMgaW4gbWVtb3J5LCBleHBhbmQgdmlydHVhbF97c3RhY2tfdmFycyxpbmNvbWluZ19hcmdzfV9ydHggZWFybHkuCgkoc3Vic3RfY29uc3RhbnQpOiBBZGQgbmV3IHBhcm0sIE1FTU9OTFkuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbiwgaW50ZWdyYXRlX3Bhcm1fZGVjbHMpOiBQYXNzIG5ldyBwYXJtLgoJKGludGVncmF0ZV9kZWNsX3RyZWUpOiBMaWtld2lzZS4KCShjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgY2FzZSBNRU0pOiBEbyBjb3B5IFJUWF9VTkNIQU5HSU5HX1AuCgkodHJ5X2NvbnN0YW50cyk6IENhbGwgc3Vic3RfY29uc3RhbnRzIHR3aWNlLCB3aXRoIE1FTU9OTFkgMCBhbmQgMS4KCShjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgY2FzZSBTRVQpOiBBZGQgZXhwbGljaXQgY2FsbHMgdG8KCWNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlIGZvciBib3RoIHNpZGVzLgoKCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogRG9uJ3QgdXNlIFRSRUVfU1RSSU5HX0xFTkdUSCBmb3IKCWNvbnN0cmFpbnRzLgoJKHB1c2hjYXNleyxfcmFuZ2V9KTogQ29udmVydCB0byBOT01JTkFMX1RZUEUgYWZ0ZXIgY2hlY2tpbmcgZm9yCgl3aXRoaW4gSU5ERVhfVFlQRSwgaW5zdGVhZCBvZiBiZWZvcmUuCgkoZml4dXBfZ290b3MpOiBVc2UgZi0+dGFyZ2V0X3J0bCwgbm90IHRoZSBuZXh0IGluc24sCglzaW5jZSBsYXR0ZXIgbWF5IGJlIGZyb20gYSBsYXRlciBmaXh1cC4KCShleHBhbmRfdmFsdWVfcmV0dXJuKTogQ29ycmVjdGx5IGNvbnZlcnQgVkFMIHdoZW4gcHJvbW90aW5nIGZ1bmN0aW9uCglyZXR1cm47IHN1cHBvcnQgUkVUVVJOX1JFRyBiZWluZyBhIFBBUkFMTEVMLgoJKGV4cGFuZF9yZXR1cm4pOiBXaGVuIGNoZWNraW5nIGZvciByZXN1bHQgaW4gcmVncyBhbmQgaGF2aW5nCgljbGVhbnVwLCBjb25zaWRlciBQQVJBTExFTCBpbiBERUNMX1JUTCBhcyBiZWluZyBpbiByZWdzLgoKMTk5OS0xMC0yOCAyMToyNyAtMDcwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogY3BwbGliLmggKHN0cnVjdCBjcHBfYnVmZmVyOiBmbmFtZSwgbm9taW5hbF9mbmFtZSwKCWxhc3Rfbm9taW5hbF9mbmFtZSk6IE1hcmsgY29uc3QuCgkoc3RydWN0IGluY2x1ZGVfaGFzaDogbmFtZSwgbnNob3J0LCBjb250cm9sX21hY3JvKTogTWFyawoJY29uc3QuCgkoc3RydWN0IG1hY3JvZGVmOiBzeW1uYW0pOiBNYXJrIGNvbnN0LgoJKHN0cnVjdCBpZl9zdGFjazogZm5hbWUpOiBNYXJrIGNvbnN0LgoJKGlzX2lkY2hhciwgaXNfaWRzdGFydCwgaXNfaG9yX3NwYWNlLCB0cmlncmFwaF90YWJsZSk6IERlbGV0ZS4KCShJU3RhYmxlKTogTmV3IGNoYXJhY3Rlci1zeW50YXggYXJyYXkgd2hpY2ggZW5jb21wYXNzZXMgYWxsCgl0aGUgb2xkIGlzX2ZvbyBhcnJheXMuCgkoaXNfaWRjaGFyLCBpc19udW1jaGFyLCBpc19pZHN0YXJ0LCBpc19udW1zdGFydCwgaXNfaHNwYWNlLAoJaXNfc3BhY2UpOiBOZXcgbWFjcm9zIGZvciBpbnRlcnJvZ2F0aW5nIElTdGFibGUuCgkoY2hlY2tfbWFjcm9fbmFtZSk6IEtpbGwgbGFzdCBhcmd1bWVudC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgoJKiBjcHBpbml0LmMgKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBEZWxldGUuCgkoaXNfaWRjaGFyLCBpc19pZHN0YXJ0LCBpc19ob3Jfc3BhY2UsIGlzX3NwYWNlLAoJdHJpZ3JhcGhfdGFibGUpOiBEZWxldGUuCgkoSVN0YWJsZSk6IE5ldy4gIEluaXRpYWxpemUgd2l0aCBjbGV2ZXIgbWFjcm9zIHRvIGF2b2lkCglpbmZvcm1hdGlvbiBkdXBsaWNhdGlvbi4KCShidWlsdGluX2FycmF5KTogVGFibGUgb2YgYnVpbHRpbnMgdG8gZ2V0IHJpZCBvZiBleHBsaWNpdCBsaXN0CglpbiBpbml0aWFsaXplX2J1aWx0aW5zLgoJKGluaXRpYWxpemVfYnVpbHRpbnMpOiBVc2UgYnVpbHRpbnNfYXJyYXkuCgkoY3BwX3N0YXJ0X3JlYWQpOiBDYWxsIGluaXRfSVN0YWJsZSwgYW5kIHNldCBJU3RhYmxlWyckJ10gaWYKCW9wdHMtPmRvbGxhcnNfaW5faWRlbnQuCgoJKiBjcHBleHAuYzogQ2hhbmdlIGFsbCByZWZzIHRvIGlzX3h5eltdIGFycmF5cyB0byB1c2UgbmV3Cglpc194eXooKSBtYWNyb3MuCgkoY3BwX3BhcnNlX2V4cHIpOiBBdm9pZCAnZm9ybWF0IHN0cmluZyBpcyBub3QgY29uc3RhbnQnCgl3YXJuaW5nLiBVc2UgSVNHUkFQSCB0byBpZGVudGlmeSBwcmludGFibGUgY2hhcnMuCgkqIGNwcGZpbGVzLmM6IENoYW5nZSBhbGwgcmVmcyB0byBpc194eXpbXSBhcnJheXMgdG8gdXNlIG5ldwoJaXNfeHl6KCkgbWFjcm9zLgoJKHJlYWRfYW5kX3ByZXNjYW4pOiBNYXAgdHJpZ3JhcGhzIHRvIGNoYXJzIHdpdGggb3Blbi1jb2RlZAoJaWYtZWxzZS1pZi0uLi4gc2VxdWVuY2UsIG5vdCBhIGxvb2t1cCB0YWJsZS4KCSogY3BwaGFzaC5jOiBDaGFuZ2UgYWxsIHJlZnMgdG8gaXNfeHl6W10gYXJyYXlzIHRvIHVzZSBuZXcKCWlzX3h5eigpIG1hY3Jvcy4KCSogY3BwbGliLmM6IENoYW5nZSBhbGwgcmVmcyB0byBpc194eXpbXSBhcnJheXMgdG8gdXNlIG5ldwoJaXNfeHl6KCkgbWFjcm9zLiAgS2lsbCBTS0lQX0FMTF9XSElURV9TUEFDRSAodW51c2VkKS4KCShjaGVja19tYWNyb19uYW1lKTogUmVtb3ZlIGFiaWxpdHkgdG8gcmVwb3J0IGFuIGludmFsaWQKCWFzc2VydGlvbiBuYW1lLCB3aGljaCBpcyBuZXZlciB1c2VkLgoJKGRvX2xpbmUpOiBDb25zdGlmeSBhIGNvdXBsZSBvZiBjaGFyIConcy4KCSogY3BwbWFpbi5jIChtYWluKTogQ2FsbCBjcHBfY2xlYW51cCBiZWZvcmUgcmV0dXJuaW5nLgoKVGh1IE9jdCAyOCAyMToxNjozNSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZ2djLmggKHN0cnVjdCBnZ2Nfc3RhdGlzdGljcyk6IE5ldyB0eXBlLgoJKGdnY19nZXRfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KCShnZ2NfcHJpbnRfc3RhdGlzdGljcyk6IExpa2V3aXNlLgoJKiBnZ2MtY29tbW9uLmMgKGdnY19zdGF0cyk6IE5ldyB2YXJpYWJsZS4KCShnZ2NfbWFya19ydHhfY2hpbGRyZW4pOiBLZWVwIHN0YXRpc3RpY3MuCgkoZ2djX21hcmtfdHJlZV9jaGlsZHJlbik6IExpa2V3aXNlLgoJKGdnY19wcmludF9zdGF0aXN0aWNzKTogTmV3IGZ1bmN0aW9uLgoJKiBnZ2MtcGFnZS5jIChzdHJ1Y3QgZ2xvYmFscyk6IEFkZCBieXRlc19tYXBwZWQgZmllbGQuCgkoYWxsb2NfYW5vbik6IFVwZGF0ZSBpdC4KCShyZWxlYXNlX3BhZ2VzKTogTGlrZXdpc2UuCgkoZ2djX2dldF9zaXplKTogTmV3IGZ1bmN0aW9uLgoJKGdnY19wYWdlX3ByaW50X3N0YXRpc3RpY3MpOiBOZXcgZnVuY3Rpb24uCgkqIGdnYy1zaW1wbGUuYyAoZ2djX2dldF9zaXplKTogTmV3IGZ1bmN0aW9uLgoKRnJpIE9jdCAyOSAwNjozMjo0NCAxOTk5ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKHByb3BhZ2F0ZV9ibG9jayk6IFdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGEgbGFiZWwKCWJlZm9yZSBhbiBBRERSX1ZFQyBpcyBkZWxldGVkIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBpcyBhIGRlYWQKCXN0b3JlLCBkZWxldGUgdGhlIEFERFJfVkVDLgoKVGh1IE9jdCAyOCAxMjoyODo1MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVzb3VyY2UuYyAoZmluZF9mcmVlX3JlZ2lzdGVyKTogRG9uJ3QgdXNlIHRoZSBmcmFtZSBwb2ludGVyCglpZiBmcmFtZV9wb2ludGVyX25lZWRlZC4KClRodSBPY3QgMjggMTA6MDI6MDAgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBzX3ZhX2FyZyk6IERlbGV0ZSBnZW5fanVtcCBhcyBlbWl0X2p1bXAgYXJnLgoJKGZ1bmN0aW9uX2FyZ19wYXNzX2J5X3JlZmVyZW5jZSk6IENoZWNrIGZvciBhIE5VTEwgcG9pbnRlciBpbiBjdW0uCgoJKiBjb25maWcvaTk2MC9pOTYwLmMgKGk5NjBfdmFfc3RhcnQpOiBOZXcgbG9jYWxzIGJhc2UsIG51bS4KCVVzZSBJTkRJUkVDVF9SRUYgaW5zdGVhZCBvZiBBUlJBWV9SRUYgb24gdmFsaXN0LgoJKGk5NjBfdmFfYXJnKTogVXNlIElORElSRUNUX1JFRiBpbnN0ZWFkIG9mIEFSUkFZX1JFRiBvbiB2YWxpc3QuCgpUaHUgT2N0IDI4IDA5OjQ1OjQ4IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBnY3NlLmMgKGRlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzKTogRml4IHR5cG8gaW4gcHJldmlvdXMgY2hhbmdlLgoKVGh1IE9jdCAyOCAwMzozNzo1MCAxOTk5ICBQZXRlciBHZXJ3aW5za2kgPHBldGVyQGdlcndpbnNraS5kZT4KCgkqIHRyZWUuZGVmIChQTEFDRUhPTERFUl9FWFBSKTogVXBkYXRlIGNvbW1lbnRzLgoKVGh1IE9jdCAyOCAwNjo0NzozMiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWNvbW1vbi5jIChjaGVja19mb3JtYXRfaW5mbyk6IEF2b2lkIG5vbi1saXRlcmFsIGZvcm1hdCBzdHJpbmcKCXdhcm5pbmdzIHdoZW4gYGZpcnN0X2FyZ19udW0nIGlzIHplcm8uCgpUaHUgT2N0IDI4IDEyOjI4OjQ4IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogcnRsLnRleGk6IERlbGV0ZSBleHBsaWNpdCBQcmV2LCBVcCBhbmQgTmV4dCBlbnRyaWVzIGluICJAbm9kZSJzLgoKVGh1IE9jdCAyOCAxMTowNToxMyAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3IDxyZWFybnNoYUBhcm0uY29tPgoKCSogYXJtLm1kIChjYXNlc2lfaW5zbik6IEFkZCBhIGNsb2JiZXIgb2YgdGhlIGNvbmRpdGlvbiBjb2RlCglyZWdpc3Rlci4KCk1vbiBPY3QgMTggMjE6MTY6MDYgMTk5OSAgRnJlZCBGaXNoICA8Zm5mQGJlLmNvbT4KCgkqIHRtLnRleGkgKENDMVBMVVNfU1BFQyk6IE1ha2UgaXQgY2xlYXIgaW4gdGhlIGRvY3MgdGhhdCBDQzFfU1BFQyBpcwoJdXNlZCBieSBib3RoIGNjMSBhbmQgY2MxcGx1cy4KClRodSBPY3QgMjggMTA6MDA6NDggMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmM6IEluaXRpYWxpemUgYXJtX3N0cnVjdHVyZV9zaXplX2JvdW5kYXJ5IHRvCglERUZBVUxUX1NUUlVDVFVSRV9TSVpFX0JPVU5EQVJZLgoJKiBjb25maWcvYXJtL2FybS5oIChERUZBVUxUX1NUUlVDVFVSRV9TSVpFX0JPVU5EQVJZKTogRGVmaW5lCgl0byB0aGUgdmFsdWUgMzIgaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gZGVmaW5lZC4KCSogY29uZmlnL2FybS9uZXRic2QuaCAoREVGQVVMVF9TVFJVQ1RVUkVfU0laRV9CT1VOREFSWSk6CglPdmVycmlkZSBkZWZpbml0aW9uIGluIGFybS5oIHdpdGggYSB2YWx1ZSBvZiA4LgoKVGh1IE9jdCAyOCAwMzoxMjowMiAxOTk5ICBEYXZpZCBTdGFybmVyICA8ZHN0YXJuZXI5OEBhYXNhYS5vZmUub3JnPgoKCSogYy1wcmFnbWEuYyAocHVzaF9hbGlnbm1lbnQpOiBEb24ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlCglvZiB4bWFsbG9jLgoKVGh1IE9jdCAyOCAwMzowODozOCAxOTk5ICBNYXR0ZW8gRnJpZ28gPGF0aGVuYUBmZnR3Lm9yZz4KCgkqIHNwYXJjLmggKEFESlVTVF9DT1NUKTogRml4IHRoaW5rby4KClRodSBPY3QgMjggMDI6NDQ6MDMgMTk5OSAgR2xlbiBOYWthbXVyYSAgPGdsZW4ubmFrYW11cmFAdXNhLm5ldD4KCgkqIGNjY3AuYyAocmVzY2FuKTogRml4ZWQgb2JwIHBvaW50ZXIgaGFuZGxpbmcgYXJvdW5kIGNhbGwgdG8KCWNoZWNrX2V4cGFuZCBzdWJyb3V0aW5lLgoKVGh1IE9jdCAyOCAwMjoxNToyMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY3NlLmMgKGRlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzKTogT25seSByZWNvcmQgbm9uLW51bGwgaW5mbwoJZm9yIHBzZXVkb3Mgd2hlbiBleGFtaW5pbmcgc3RvcmVzLgoKCSogYXJtLm1kIChhZGRkaTMsIGFkZGRpX3Nlc2lkaV9kaSwgYWRkZGlfc2VzaWRpX2RpKTogQWRkCglzcGxpdHRlcnMgZm9yIHRoZXNlIHBhdHRlcm5zLiAgVXNlICIjIiBmb3Igb3V0cHV0IHRlbXBsYXRlcy4KCShhZGRzaTNfY2Fycnlpbl9zaGlmdCk6IE5ldyBwYXR0ZXJuLgoKVGh1IE9jdCAyOCAxMDoyMDowMiAxOTk5ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgoJKiBjb25maWcvcnM2MDAwL3JzNjAwMC5tZCAobW92c2YpOiBEb24ndCBjb252ZXJ0IGEgU1VCUkVHCglvZiB0aGUgZnVuY3Rpb24gcmV0dXJuIHJlZ2lzdGVyIGludG8gYSBwbGFpbiBSRUcgdW50aWwKCWFmdGVyIGZ1bmN0aW9uIGlubGluaW5nIGlzIGRvbmUuCgpXZWQgT2N0IDI3IDE1OjIxOjQ2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemVfMSk6IElmIHdlIGRpZCBjcm9zcy1qdW1waW5nLCBhbmQKCXRoZSBkYXRhIHdpbGwgbWF0dGVyLCByZWJ1aWxkIHRoZSBDRkcuCgkqIHJlZy1zdGFjay5jIChyZWdfdG9fc3RhY2spOiBPbmx5IChyZSlidWlsZCB0aGUgQ0ZHIGlmCglub3Qgb3B0aW1pemluZy4gIERvbid0IHJ1biBzaG9ydGVuX2JyYW5jaGVzLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFJ1biBzaG9ydGVuX2JyYW5jaGVzIGFmdGVyCglyZWdfdG9fc3RhY2suCgpXZWQgT2N0IDI3IDEyOjMzOjQwIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBydGwuaCAobm90ZV9zdG9yZXMpOiBBZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXIuCgkqIHJ0bGFuYWwuYyAocmVnX3NldF9wXzEpOiBUYWtlIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgoJKHJlZ19zZXRfbGFzdF8xKTogTGlrZXdpc2UuCgkocmVnX3NldF9wKTogQWRqdXN0IGNhbGwgdG8gbm90ZV9zdG9yZXMuCgkocmVnX3NldF9sYXN0KTogTGlrZXdpc2UuCgkobm90ZV9zdG9yZXMpOiBQYXNzIGRhdGEgcGFyYW1ldGVyIHRvIHdvcmtlciBmdW5jdGlvbi4KCSogYWxpYXMuYyAocmVjb3JkX3NldCk6IFRha2UgYWRkaXRpb25hbCBwYXJhbWV0ZXIuCgkoaW5pdF9hbGlhc19hbmFseXNpcyk6IFBhc3MgaXQuCgkqIGNhbGxlci1zYXZlLmMgKG1hcmtfc2V0X3JlZ3MpOiBUYWtlIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgoJKHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyk6IFBhc3MgTlVMTCB0byBub3RlX3N0b3Jlcy4KCSogY29tYmluZS5jIChzZXRfbm9uemVyb19iaXRzX2FuZF9zaWduX2NvcGllcyk6IFRha2UgYWRkaXRpb25hbAoJcGFyYW1ldGVyLgoJKHJlY29yZF9kZWFkX2FuZF9zZXRfcmVnc18xKTogTGlrZXdpc2UuCgkocmVnX2RlYWRfYXRfcF8xKTogTGlrZXdpc2UuCgkoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBBZGp1c3QgY2FsbHMgdG8gbm90ZV9zdG9yZXMuCgkodHJ5X2NvbWJpbmUpOiBMaWtld2lzZS4KCShyZWNvcmRfZGVhZF9pbnNuKTogUmVtb3ZlLgoJKHJlY29yZF9kZWFkX2FuZF9zZXRfcmVncyk6IEFkanVzdCBjYWxscyB0byBub3RlX3N0b3Jlcy4KCShyZWdfZGVhZF9hdF9wKTogTGlrZXdpc2UuCgkqIGNzZS5jIChpbnZhbGlkYXRlX3NraXBwZWRfc2V0KTogVGFrZSBhZGRpdGlvbmFsIHBhcmFtZXRlci4KCShjc2VfY2hlY2tfbG9vcF9zdGFydCk6IExpa2V3aXNlLgoJKGNzZV9jaGVja19sb29wX3N0YXJ0X3ZhbHVlKTogUmVtb3ZlLgoJKGNzZV9zZXRfYXJvdW5kX2xvb3ApOiBBZGp1c3QgY2FsbHMgdG8gbm90ZV9zdG9yZXMuCgkqIGZsb3cuYyAobm90aWNlX3N0YWNrX3BvaW50ZXJfbW9kaWZpY2F0aW9uKTogVGFrZSBhZGRpdGlvbmFsCglwYXJhbWV0ZXIuICBSZW1vdmUgZHVwbGljYXRlIGRlY2xhcmF0aW9uLgoJKHJlY29yZF92b2xhdGlsZV9pbnNucyk6IEFkanVzdCBjYWxscyB0byBub3RlX3N0b3Jlcy4KCSogZ2NzZS5jIChyZWNvcmRfc2V0X2luZm8pOiBUYWtlIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgoJKHJlY29yZF9sYXN0X3NldF9pbmZvKTogTGlrZXdpc2UuCgkoaW52YWxpZGF0ZV9ub25udWxsX2luZm8pOiBMaWtld2lzZS4KCShyZWNvcmRfc2V0X2luc24pOiBSZW1vdmUuCgkoY29tcHV0ZV9zZXRzKTogQWRqdXN0IGNhbGxzIHRvIG5vdGVfc3RvcmVzLgoJKGxhc3Rfc2V0X2luc24pOiBSZW1vdmUuCgkoY29tcHV0ZV9oYXNoX3RhYmxlKTogQWRqdXN0IGNhbGxzIHRvIG5vdGVfc3RvcmVzLgoJKGluc2VydF9pbnNuX2VuZF9iYik6IExpa2V3aXNlLgoJKGRlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzKTogTGlrZXdpc2UuCgkqIGdsb2JhbC5jIChtYXJrX3JlZ19zdG9yZSk6IFRha2UgYWRkaXRpb25hbCBwYXJhbWV0ZXIuCgkobWFya19yZWdfY2xvYmJlcik6IExpa2V3aXNlLgoJKHJlZ19iZWNvbWVzX2xpdmUpOiBMaWtld2lzZS4KCShnbG9iYWxfY29uZmxpY3RzKTogQWRqdXN0IGNhbGxzIHRvIG5vdGVfc3RvcmVzLgoJKGJ1aWxkX2luc25fY2hhaW4pOiBMaWtld2lzZS4KCSogaW50ZWdyYXRlLmMgKG5vdGVfbW9kaWZpZWRfcGFybXJlZ3MpOiBUYWtlIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgoJKG1hcmtfc3RvcmVzKTogTGlrZXdpc2UuICBNYWtlIGl0IHN0YXRpYy4KCShzYXZlX2Zvcl9pbmxpbmVfbm9jb3B5KTogQWRqdXN0IGNhbGxzIHRvIG5vdGVfc3RvcmVzLgoJKHRyeV9jb25zdGFudHMpOiBMaWtld2lzZS4KCSogaW50ZWdyYXRlLmggKG1hcmtfc3RvcmVzKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKiBqdW1wLmMgKG1hcmtfbW9kaWZpZWRfcmVnKTogVGFrZSBhZGRpdGlvbmFsIHBhcmFtZXRlci4KCSh0aHJlYWRfanVtcHMpOiBBZGp1c3QgY2FsbHMgdG8gbm90ZV9zdG9yZXMuCgkqIGxvY2FsLWFsbG9jLmMgKHZhbGlkYXRlX2VxdWl2X21lbV9mcm9tX3N0b3JlKTogVGFrZSBhZGRpdGlvbmFsCglwYXJhbWV0ZXIuCgkobm9fZXF1aXYpOiBMaWtld2lzZS4KCShyZWdfaXNfc2V0KTogTGlrZXdpc2UuCgkodmFsaWRhdGVfZXF1aXZfbWVtKTogQWRqdXN0IGNhbGxzIHRvIG5vdGVfc3RvcmVzLgoJKHVwZGF0ZV9lcXVpdl9yZWdzKTogTGlrZXdpc2UuCgkoYmxvY2tfYWxsb2MpOiBMaWtld2lzZS4KCSogbG9vcC5jIChub3RlX3NldF9wc2V1ZG9fbXVsdGlwbGVfdXNlc19yZXR2YWwpOiBSZW1vdmUuCgkobm90ZV9hZGRyX3N0b3JlZCk6IFRha2UgYWRkaXRpb25hbCBwYXJhbWV0ZXIuCgkobm90ZV9zZXRfcHNldWRvX211bHRpcGxlX3VzZXMpOiBMaWtld2lzZS4KCShyZWNvcmRfaW5pdGlhbCk6IExpa2V3aXNlLgoJKHByZXNjYW5fbG9vcCk6IEFkanVzdCBjYWxscyB0byBub3RlX3N0b3Jlcy4KCShzdHJlbmd0aF9yZWR1Y2UpOiBMaWtld2lzZS4KCShjaGVja19kYnJhX2xvb3ApOiBMaWtld2lzZS4KCSogcmVnbW92ZS5jIChmbGFnc19zZXRfMSk6IFRha2UgYWRkaXRpb25hbCBwYXJhbWV0ZXIuCgkobWFya19mbGFnc19saWZlX3pvbmVzKTogQWRqdXN0IGNhbGxzIHRvIG5vdGVfc3RvcmVzLgoJKiByZWxvYWQxLmMgKG1hcmtfbm90X2VsaW1pbmFibGUpOiBUYWtlIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgoJKGZvcmdldF9vbGRfcmVsb2Fkc18xKTogTGlrZXdpc2UuCgkocmVsb2FkX2NzZV9pbnZhbGlkYXRlX3J0eCk6IExpa2V3aXNlLgoJKHJlbG9hZF9jc2VfY2hlY2tfY2xvYmJlcik6IExpa2V3aXNlLgoJKHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOiBMaWtld2lzZS4KCShtb3ZlMmFkZF9ub3RlX3N0b3JlKTogTGlrZXdpc2UuCgkocmVsb2FkKTogQWRqdXN0IGNhbGxzIHRvIG5vdGVfc3RvcmVzLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBMaWtld2lzZS4KCShlbWl0X3JlbG9hZF9pbnNucyk6IExpa2V3aXNlLgoJKHJlbG9hZF9jc2VfcmVnc18xKTogTGlrZXdpc2UuCgkocmVsb2FkX2NzZV9yZWNvcmRfc2V0KTogQWRqdXN0IGNhbGxzIHRvIHJlbG9hZF9jc2VfaW52YWxpZGF0ZV9ydHguCgkocmVsb2FkX2NvbWJpbmUpOiBBZGp1c3QgY2FsbHMgdG8gbm90ZV9zdG9yZXMuCgkqIHJlc291cmNlLmMgKHVwZGF0ZV9saXZlX3N0YXR1cyk6IFRha2UgYWRkaXRpb25hbCBwYXJhbWV0ZXIuCgkobWFya190YXJnZXRfbGl2ZV9yZWdzKTogQWRqdXN0IGNhbGxzIHRvIG5vdGVfc3RvcmVzLgoJKiBzdHVwaWQuYyAoZmluZF9jbG9iYmVyZWRfcmVncyk6IFRha2UgYWRkaXRpb25hbCBwYXJhbWV0ZXIuCgkoc3R1cGlkX2xpZmVfYW5hbHlzaXMpOiBBZGp1c3QgY2FsbHMgdG8gbm90ZV9zdG9yZXMuCgpXZWQgT2N0IDI3IDE5OjI2OjEyIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2NvZmYuaCAoU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkpOiBEZWxldGUKCWRlZmluaXRpb24uCgoJKiBjb25maWcvYXJtL2VsZi5oIChTVFJVQ1RVUkVfU0laRV9CT1VOREFSWSk6IERlbGV0ZQoJZGVmaW5pdGlvbi4KCgkqIGNvbmZpZy9hcm0vYXJtLmggKFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZKTogRGVmaW5lIGluIHRlcm1zCglvZiB0aGUgdmFyaWFibGUgYXJtX3N0cnVjdHVyZV9zaXplX2JvdW5kYXJ5LgoKV2VkIE9jdCAyNyAwMjowNTo1OCAxOTk5ICBNYXJrIFAuIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogYWxpYXMuYyAoaW5pdF9hbGlhc19hbmFseXNpcyk6IEFsbG9jYXRlIHJlZ19rbm93bl92YWx1ZSBhbmQKCXJlZ19rbm93bl9lcXVpdl9wIG9uIHRoZSBoZWFwLiAgTGlrZXdpc2UgZm9yIG5ld19yZWdfYmFzZV92YWx1ZQoJYW5kIHJlZ19zZWVuLgoJKGVuZF9hbGlhc19hbmFseXNpcyk6IEZyZWUgcmVnX2tub3duX3ZhbHVlIGFuZCByZWdfa25vd25fZXF1aXZfcC4KCSogY3NlLmMgKGNzZV9tYWluKTogQ2FsbCBlbmRfYWxpYXNfYW5hbHlzaXMuCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkdWxlX2luc25zKTogTGlrZXdpc2UuCgkqIGxvY2FsLWFsbG9jLiAodXBkYXRlX2VxdWl2X3JlZ3MpOiBMaWtld2lzZS4KCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlZ3MpOiBMaWtld2lzZS4KCldlZCBPY3QgMjcgMDE6NDk6MTcgMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBzcGFyYy9zcGFyYy5jIChzcGFyY19vdmVycmlkZV9vcHRpb25zKTogQ2xlYXIgTUFTS19GUFVfU0VULgoJKiBzcGFyYy9zcGFyYy5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgImZwdSIgZW50cnkgZm9yIHJldmVyc2UKCW1hcHBpbmcgZnJvbSBNQVNLX0ZQVS4KCldlZCBPY3QgMjcgMDE6NDI6MjYgMTk5OSAgU2NvdHQgQ2hyaXN0bGV5ICA8c2NvdHRjQG5ldC1jb21tdW5pdHkuY29tPgoKCSogc3BhcmMubWQgKGNhbGwpOiBEb24ndCBib3VuZCBzdHJ1Y3R1cmUgcmV0dXJuIHNpemUgdG8gMHhmZmYuCgpXZWQgT2N0IDI3IDAwOjU2OjU5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZXNvdXJjZS5jIChtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBDaGVjayB0aGF0IHRoZSB0YXJnZXQKCWluc24gd2Fzbid0IGNyZWF0ZWQgYWZ0ZXIgY29tcHV0ZV9iYl9mb3JfaW5zbi4KClR1ZSBPY3QgMjYgMjM6MTU6MDMgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGdnYy1wYWdlLmMgKHBvaXNvbl9wYWdlcyk6IERvbid0IGJlIG92ZXJ6ZWFsb3VzLgoKVHVlIE9jdCAyNiAyMzoyOToxOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhbGlhcy5jOiBVcGRhdGUgY29tbWVudHMgZm9yIEFERFJFU1MuCgkobm9ubG9jYWxfcmVmZXJlbmNlX3ApOiBMb29rIGluc2lkZSB0aGUgQUREUkVTUyB0byBkZXRlcm1pbmUgaWYKCWl0IGlzIGEgbG9jYWwgbWVtb3J5IHJlZmVyZW5jZS4KCgkqIGMtdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGwpOiBDaGVjayB0aGF0IHRoZSBidWlsdC1pbgoJZnVuY3Rpb24gaXMgb2YgY2xhc3MgQlVJTFRfSU5fTk9STUFMIGJlZm9yZSB0cnlpbmcgdG8gcmVjb25naXplCglpdCBhcyBCVUlMVF9JTl9BQlMuCgkqIGNhbGxzLmMgKGNhbGxzX2Z1bmN0aW9uXzEpOiBTaW1pbGFybHkgZm9yIEJVSUxUX0lOX0FMTE9DQS4KCSogc3RtdC5jIChleHBhbmRfZW5kX2NhZSk6IFNpbWlsYXJseSBmb3IgQlVJTFRfSU5fQ0xBU1NJRllfVFlQRS4KCldlZCBPY3QgMjcgMDA6MTQ6MTMgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBnY3NlLmMgKGV4cHJfcmVhY2hlc19oZXJlX3ApOiBVc2UgeGNhbGxvYyBhbmQgZXhwbGl0IGZyZWUgaW5zdGVhZAoJb2YgYWxsb2NhLgoJKHByZV9nY3NlKTogTGlrZXdpc2UuCgkoaG9pc3RfZXhwcl9yZWFjaGVzX2hlcmVfcCk6IExpa2V3aXNlLgoJKGhvaXN0X2NvZGUpOiBMaWtld2lzZS4KCShwcmVfZXhwcl9yZWFjaGVzX2hlcmVfcCk6IFJlcGxhY2UgYWxsb2NhIHdpdGggeGNhbGxvYy4gIE1vdmUgY29yZQoJY29kZSB0byAuLi4KCShwcmVfZXhwcl9yZWFjaGVzX2hlcmVfcF93b3JrKTogLi4uIGhlcmUuCgkoZXhwcl9yZWFjaGVzX2hlcmVfcCk6IFJlcGxhY2UgYWxsb2NhIHdpdGggeGNhbGxvYy4gIE1vdmUgY29yZQoJY29kZSB0byAuLi4KCShleHByX3JlYWNoZXNfaGVyZV9wX3dvcmspOiAuLi4gaGVyZS4KClR1ZSBPY3QgMjYgMjA6NDI6NDUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlc291cmNlLmMgKGZpbmRfYmFzaWNfYmxvY2spOiBEZWxldGUuCgkobWFya190YXJnZXRfbGl2ZV9yZWdzLCBpbmNyX3RpY2tzX2Zvcl9pbnNuKTogVXNlIEJMT0NLX05VTSBpbnN0ZWFkLgoJKGluaXRfcmVzb3VyY2VfaW5mbyk6IENhbGwgY29tcHV0ZV9iYl9mb3JfaW5zbi4KClR1ZSBPY3QgMjYgMjA6MjE6MDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAobWVyZ2VfYmxvY2tzX21vdmVfcHJlZGVjZXNzb3Jfbm9qdW1wcyk6IENvcGUKCXdpdGggYWxyZWFkeSBhZGphY2VudCBibG9ja3MsIGJ1dCBubyBmYWxsdGhydS4KCShtZXJnZV9ibG9ja3NfbW92ZV9zdWNjZXNzb3Jfbm9qdW1wcyk6IFNpbXBsaWZ5LgoJKGRlYnVnX2Zsb3dfaW5mbyk6IE5ldy4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogT3BlbiBqdW1wMSBkdW1wIGZpbGUgYmVmb3JlCglqdW1wIGFuZCBjbG9zZSBhZnRlciwgYXMgb3Bwb3NlZCB0byBqdXN0IHVzaW5nIGR1bXBfcnRsLgoKV2VkIE9jdCAyNyAwMzowOToyMyAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQuaCAoZWFybHljbG9iYmVyX29wZXJhbmRfcCk6IERlY2xhcmUuCgkqIHJlbG9hZC5jIChlYXJseWNsb2JiZXJfb3BlcmFuZF9wKTogRG9uJ3QgZGVjbGFyZS4gIE5vIGxvbmdlciBzdGF0aWMuCgkqIHJlbG9hZDEuYyAocmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wKTogIFJFTE9BRF9PVEhFUiByZWxvYWRzIHdpdGgKCWFuIGVhcmx5Y2xvYmJlcmVkIG91dHB1dCBjb25mbGljdCB3aXRoIFJFTE9BRF9JTlBVVCByZWxvYWRzIC0gaGFuZGxlCgljYXNlIHdoZXJlIHRoZSBSRUxPQURfT1RIRVIgcmVsb2FkIGlzIG5ldy4gIFVzZSBlYXJseWNsb2JiZXJfb3BlcmFuZF9wLgoKVHVlIE9jdCAyNiAxODoyMzozOCAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgkJCSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGVtaXQtcnRsLmMgKGVtaXRfYmxvY2tfaW5zbl9iZWZvcmUpOiBOZXcuCgkoZW1pdF9ibG9ja19pbnNuX2FmdGVyKTogTmV3LgoJKiBiYXNpYy1ibG9jay5oOiBEZWNsYXJlIHRoZW0uCgoJKiBiaXRtYXAuaDogUHJvdGVjdCBmcm9tIG11bHRpcGxlIGluY2x1c2lvbi4KCgkqIHJlY29nLmMgKHNjcmF0Y2hfb3BlcmFuZCk6IEhhbmRsZSBWT0lEbW9kZSBjb3JyZWN0bHkuCgoJKiBydGwuaCAoSlVNUF9DUk9TU19KVU1QX0RFQVRIX01BVFRFUlMpOiBOZXcuCgoJKiBidWlsdGlucy5jIChleHBhbmRfYnVpbHRpbl9hcHBseV9hcmdzXzEpOiBSZW1vdmUgU1RBQ0tfUkVHUyBoYWNrLgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBMaWtld2lzZS4KCSogZ2xvYmFsLmMgKGdsb2JhbF9jb25mbGljdHMpOiBDbGFyaWZ5IFNUQUNLX1JFR1MgY29tbWVudGFyeS4KCgkqIHJlZy1zdGFjay5jIChtYXhfdWlkKTogUmVtb3ZlLgoJKGJsb2NrcywgYmxvY2tfYmVnaW4sIGJsb2NrX2VuZCwgYmxvY2tfZHJvcHNfaW4pOiBSZW1vdmUuCgkoYmxvY2tfc3RhY2tfaW4sIGJsb2NrX291dF9yZWdfc2V0LCBibG9ja19udW1iZXIpOiBSZW1vdmUuCgkoc3RydWN0IGJsb2NrX2luZm9fZGVmLCBCTE9DS19JTkZPKTogTmV3LgoJKGVudW0gZW1pdF93aGVyZSk6IE5ldy4KCShjdXJyZW50X2Jsb2NrKTogTmV3LgoJKEJMT0NLX05VTSk6IFJlbW92ZS4KCShtYXJrX3JlZ3NfcGF0LCByZWNvcmRfbGFiZWxfcmVmZXJlbmNlcyk6IFJlbW92ZS4KCShyZWNvcmRfcmVnX2xpZmVfcGF0LCByZWNvcmRfcmVnX2xpZmUsIGZpbmRfYmxvY2tzKTogUmVtb3ZlLgoJKG5hbik6IE5ldy4KCShnb3RvX2Jsb2NrX3BhdCwgcHJpbnRfYmxvY2tzLCBkdW1wX3N0YWNrX2luZm8pOiBSZW1vdmUuCgkocmVnX3RvX3N0YWNrKTogU2ltcGxpZmllZCB0ZXN0IGZvciBleGlzdGVuY2Ugb2YgZnAgY29kZS4gIFVzZQoJZmxvdy5jIGNvZGUuICBDYWxsIHNob3J0ZW5fYnJhbmNoZXMgYWZ0ZXIgY3Jvc3MtanVtcCBvcHQuCgkoY2hlY2tfYXNtX3N0YWNrX29wZXJhbmRzKTogUmVuYW1lZCBmcm9tIHJlY29yZF9hc21fcmVnX2xpZmUuCglSZXR1cm4gZmFsc2UgaWYgdGhlIGFzbSBkb2Vzbid0IHVzZSBzdGFjayByZWdzLiAgRG9uJ3QgZG8gbGlmZQoJYW5hbHlzaXMgb24gdGhlIGFzbS4KCShlbWl0X3BvcF9pbnNuKTogUmVwbGFjZSBmdW5jdGlvbiBwb2ludGVyIGFyZyBgd2hlbicgd2l0aAoJZW51bSBgd2hlcmUnLiAgVXBkYXRlIGFsbCBjYWxsZXJzLgoJKGNoYW5nZV9zdGFjayk6IExpa2V3aXNlLiAgVXBkYXRlIGJhc2ljIGJsb2NrIGVuZC4KCShlbWl0X3N3YXBfaW5zbik6IFVzZSBjdXJyZW50X2Jsb2NrLT5oZWFkIHRvIGxpbWl0IHJldmVyc2Ugc2VhcmNoCglmb3Igc3RhcnQgb2YgYmxvY2suICBVc2UgZW1pdF9ibG9ja19pbnNuX2FmdGVyLgoJKHN1YnN0X3N0YWNrX3JlZ3NfcGF0KTogSGFuZGxlIFVTRSBhbmQgQ0xPQkJFUiBwYXR0ZXJucy4KCShzdWJzdF9hc21fc3RhY2tfcmVncyk6IFVzZSBjaGVja19hc21fc3RhY2tfb3BlcmFuZHMuICBVc2UgZGlyZWN0CglzdHJ1Y3R1cmUgYXNzaWdubWVudCBpbnN0ZWFkIG9mIGJjb3B5LgoJKHByaW50X3N0YWNrKTogTmV3LgoJKGNvbnZlcnRfcmVnc19lbnRyeSwgY29udmVydF9yZWdzX2V4aXQpOiBOZXcuCgkoY29udmVydF9yZWdzXzEsIGNvbnZlcnRfcmVnc18yKTogU3BsaXQgb3V0IGZyb20gY29udmVydF9yZWdzLgoJV29yayBvbiBiYXNpYyBibG9ja3MgYW5kIHRoZSBDRkcuCgkoY29udmVydF9yZWdzKTogVXNlIHRoZW0uCgoJKiBpMzg2LmMgKG91dHB1dF9maXhfdHJ1bmMpOiBSZW1vdmUgY29kZSBmb3IgREltb2RlIGlucHV0IG9wZXJhbmQKCW5vdCBhdCB0b3Atb2Ytc3RhY2suCgkqIGkzODYuYyAoZml4X3RydW5jZGZkaTIsIGZpeF90cnVuY3NmZGkyKTogVXNlIHNjcmF0Y2ggd2l0aAoJYXBwcm9wcmlhdGUgbW9kZS4KCShmaXhfdHJ1bmNkaV8xKTogQWxsb3cgYW55IG1vZGUgc2NyYXRjaC4KClR1ZSBPY3QgMjYgMTM6MzA6MzUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmggKFRBUkdFVF9NRU1fRlVOQ1RJT05TKTogRGVmaW5lIGhlcmUuCgkqIGxpbnV4LmgsIG5ldGJzZC5oLCB2bXMuaDogTm90IGhlcmUuCgoxOTk5LTEwLTI2ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoSVNBX0hBU182NEJJVF9SRUdTLElTQV9IQVNfQlJBTkNITElLRUxZLAoJSVNBX0hBU19GUDQsSVNBX0hBU19DT05ETU9WRSk6IE5ldy4KCShHRU5FUkFURV9CUkFOQ0hMSUtFTFksSEFWRV9TUVJUX1AsCglDT05ESVRJT05BTF9SRUdJU1RFUl9VU0VBR0UpOiBVc2UgdGhlbS4KCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBzX21vdmVfMXdvcmQsbWlwc19tb3ZlXzJ3b3JkcywKCWdlbl9jb25kaXRpb25hbF9icmFuY2gsb3ZlcnJpZGVfb3B0aW9ucykgOiBVc2UgdGhlbS4KCSogY29uZmlnL21pcHMvbWlwcy5tZCA6IFVzZSB0aGVtLgoKVHVlIE9jdCAyNiAxMzowOToyMyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5tZCAoemVyb19leHRlbmRxaWhpMik6IFVzZSBTSW1vZGUgcmVnaXN0ZXIgbmFtZSB3aXRoIGFuZGwuCgpUdWUgT2N0IDI2IDEyOjM1OjM4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogRG9uJ3QgYWxsb3cgaW5saW5pbmcKCWlmIHNldGptcCBpcyB1c2VkLgoKVHVlIE9jdCAyNiAxNDoxMDoyMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLXBhcnNlLmluIChjYXN0X2V4cHIpOiBDb25zdGlmeS4KCgkqIGNjY3AuYyAoc3BlY2lhbF9zeW1ib2wpOiBMaWtld2lzZS4KCgkqIGNzZS5jIChoYXNoX2NzZV9yZWdfaW5mbywgY3NlX3JlZ19pbmZvX2VxdWFsX3ApOiBMaWtld2lzZS4KCgkqIGR3YXJmMm91dC5jIChiYXNlX3R5cGVfZGllKTogTGlrZXdpc2UuCgoJKiBnbG9iYWwuYyAoYWxsb2Nub19jb21wYXJlKTogTGlrZXdpc2UuCgoJKiBsb2NhbC1hbGxvYy5jIChxdHlfY29tcGFyZV8xLCBxdHlfc3VnZ19jb21wYXJlXzEpOiBMaWtld2lzZS4KCgkqIHJlZ2NsYXNzLmMgKGZpeF9yZWdpc3Rlcik6IExpa2V3aXNlLgoKCSogcnRsLmggKGZpeF9yZWdpc3Rlcik6IExpa2V3aXNlLgoKCSogc3R1cGlkLmMgKHN0dXBpZF9yZWdfY29tcGFyZSk6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKGRlY29kZV9mX29wdGlvbik6IExpa2V3aXNlLgoKCSogdHJlZS5jIChidWlsZF9jb21wbGV4X3R5cGUpOiBMaWtld2lzZS4KClR1ZSBPY3QgMjYgMTg6MzU6MjUgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CgoJKiBvdXRwdXQuaDogRG9uJ3QgdW5uZWNlc3NhcmlseSBjb25kaXRpb25hbGl6ZSBwcm90b3R5cGVzIG9uIFRSRUVfQ09ERS4KClR1ZSBPY3QgMjYgMTU6NDI6NTYgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogQ29tcHV0ZSBtb2RlIGFuZCBucmVncyBmaWVsZHMgb2YgYWxsCglyZWxvYWRzLgoJKiByZWxvYWQxLmMgKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBTaW1wbGlmeSBhIGJpdC4KCShjYWxjdWxhdGVfbmVlZHMpOiBVc2UgcHJlY29tcHV0ZWQgbW9kZS9ucmVncyB2YWx1ZXMuCgkoYWxsb2NhdGVfcmVsb2FkX3JlZyk6IExpa2V3aXNlLgoJQnJlYWsgb3V0IHR3by4uLgoJKGZhaWxlZF9yZWxvYWQsIHNldF9yZWxvYWRfcmVnKTogLi4uIG5ldyBmdW5jdGlvbnMuCgkoY2hvb3NlX3JlbG9hZF9yZWdzX2luaXQpOiBOZXcgZnVuY3Rpb24sIG1vc3RseSBicm9rZW4gb3V0IGZyb20uLi4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiAuLi4gaGVyZS4gIExvc2UgYWxsIHRoZSBzYXZlX3h4eCBub25zZW5zZS4KCUFsc28gbG9zZSBvbmUgI2lmIDAgYmxvY2suCgpUdWUgT2N0IDI2IDAyOjQ4OjMyIDE5OTkgIE1hcmMgRXNwaWUgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIE1ha2VmaWxlLmluIChBUl9GT1JfVEFSR0VULCBSQU5MSUJfRk9SX1RBUkdFVCk6ICBGaXggdGFyZ2V0IG5hbWUKCXN1YnN0aXR1dGlvbi4KClR1ZSBPY3QgMjYgMDE6Mjc6MzIgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRyZWUuaCAoQkxPQ0tfVFlQRV9UQUdTKTogUmVtb3ZlLgoJKEJMT0NLX0VORF9OT1RFKTogTGlrZXdpc2UuCgkoQkxPQ0tfTElWRV9SQU5HRV9GTEFHKTogTGlrZXdpc2UuCgkoQkxPQ0tfTElWRV9SQU5HRV9TVEFSVCk6IExpa2V3aXNlLgoJKEJMT0NLX0xJVkVfUkFOR0VfRU5EKTogTGlrZXdpc2UuCgkodHJlZV9ibG9jayk6IFJlbW92ZSBsaXZlX3JhbmdlX2ZsYWcsIGxpdmVfcmFuZ2VfdmFyX2ZsYWcsIGFuZAoJdHlwZV90YWdzLiAgUmVtb3ZlIGVuZF9ub3RlLCBsaXZlX3JhbmdlX3N0YXJ0LCBhbmQgbGl2ZV9yYW5nZV9lbmQuCgkocmVtZW1iZXJfZW5kX25vdGUpOiBSZW1vdmUgcHJvdG90eXBlLgoJKiB0cmVlLmMgKGJ1aWxkX2Jsb2NrKTogRG9uJ3Qgc2V0IEJMT0NLX1RZUEVfVEFHUy4KCSogYy1kZWNsLmMgKHBvcGxldmVsKTogRG9uJ3Qgc2V0IEJMT0NLX1RZUEVfVEFHUyBvciBjYWxsCglyZW1lbWJlcl9lbmRfbm90ZS4KCSogZ2djLWNvbW1vbi5jIChnZ2NfbWFya190cmVlX2NoaWxkcmVuKTogRG9uJ3QgbWFyawoJQkxPQ0tfVFlQRV9UQUdTIG9yIEJMT0NLX0VORF9OT1RFLgoJKiBpbnRlZ3JhdGUuYyAoYWRqdXN0X2NvcGllZF9kZWNsX3RyZWUpOiBSZW1vdmUuCgkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IERvbid0IHByaW50IEJMT0NLX1RZUEVfVEFHUy4KCSogc3RtdC5jIChsYXN0X2Jsb2NrX2VuZF9ub3RlKTogUmVtb3ZlLgoJKGluaXRfc3RtdCk6IERvbid0IGFkZCBhIEdDIHJvb3QgZm9yIGl0LgoJKGV4cGFuZF9maXh1cCk6IERvbid0IHNldCBpdC4KCShyZW1lbWJlcl9lbmRfbm90ZSk6IFJlbW92ZS4KCShleHBhbmRfZW5kX2JpbmRpbmdzKTogRG9uJ3Qgc2V0IGxhc3RfYmxvY2tfZW5kX25vdGUuCgpUdWUgT2N0IDI2IDAwOjQxOjU0IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfZm9yX3ZhbHVlX3ApOiBTaG93CglSRUxPQURfRk9SX09USEVSX0FERFJFU1MgcmVsb2FkcyBjYW4gY29uZmxpY3Qgd2l0aCBSRUxPQURfT1RIRVIKCXJlbG9hZHMuCgpNb24gT2N0IDI1IDIzOjU0OjQ1IDE5OTkgIEdlb2ZmIEtlYXRpbmcgIDxnZW9mZmtAY3lnbnVzLmNvbT4KCgkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCk6IEFsbG93IGZvciB0aGUgY2FzZSBvZiBub24taW50ZWdlcgoJb2JqZWN0cyB0aGF0IGFyZSBzbWFsbGVyIHRoYW4gYSB3b3JkIChsaWtlIFNGbW9kZSBvbiBhIDY0LWJpdAoJbWFjaGluZSkuCgoJKiBsb29wLmMgKGJhc2ljX2luZHVjdGlvbl92YXIpOiBBIG5vbi1pbnRlZ2VyIHZhcmlhYmxlIHdoaWNoIGlzCgliZWluZyBzZXQgYnkgYSBwYXJhZG94aWNhbCBzdWJyZWcgaXMgcHJvYmFibHkgbm90IGEgYml2LgoKMTk5OS0xMC0yNSBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogcHJlZml4LmMgKHRyYW5zbGF0ZV9uYW1lKSBDaGVjayBmb3IgZW1wdHkgcHJlZml4IHN0cmluZy4KCk1vbiBPY3QgMjUgMjM6MTA6NDUgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIE1ha2VmaWxlLmluIChDUFBfQ1JPU1NfTkFNRSk6IE5ldyB2YXJpYWJsZS4KCShpbnN0YWxsLWNwcCk6IFVzZSBpdCBpbnN0ZWFkIG9mIENQUF9JTlNUQUxMX05BTUUgZm9yIHRoZSBjcm9zcwoJeGNwcC4KCSh1bmluc3RhbGwtY3BwKTogVXNlIENQUF9JTlNUQUxMX05BTUUgYW5kIENQUF9DUk9TU19OQU1FIGZvciB0aGUKCW5hbWVzIG9mIHRoZSBmaWxlcyB0byBiZSB1bmluc3RhbGxlZC4KCk1vbiBPY3QgMjUgMjM6MDM6MDkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29sbGVjdDIuYyAoSVNfRElSX1NFUEFSQVRPUik6IERlZmluZS4KCShwcmVmaXhfZnJvbV9zdHJpbmcpOiBVc2UgSVNfRElSX1NFUEFSQVRPUiBhbmQgRElSX1NFUEFSQVRPUi4KCgkqIHNvbS5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogU2V0IFBSSVZfTEVWIGZvciBzdGF0aWMKCWZ1bmN0aW9ucyB0b28uCgoJKiBoYWlmYS1zY2hlZC5jIChhZGRfZGVwZW5kZW5jZSk6IFVwZGF0ZSB0aGUgdHJ1ZSBkZXBlbmRlbmN5CgljYWNoZSB0aGUgZmlyc3QgdGltZSB3ZSBhZGQgYSB0cnVlIGRlcGVuZGVuY2UgdG8gdGhlIExPR19MSU5LUyBjaGFpbi4KCk1vbiBPY3QgMjUgMjI6Mjc6NDAgMTk5OSAgSmltIEtpbmdkb24gIDxodHRwOi8vZGV2ZWxvcGVyLnJlZGhhdC5jb20vPgoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogRml4IGNvbW1lbnQuCgpNb24gT2N0IDI1IDIyOjQ5OjM0IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGRieG91dC5jIChsYXN0ZmlsZSwgY3dkLCBkYnhvdXRfdHlwZV9tZXRob2RfMSwKCWRieG91dF9zeW1ib2xfbG9jYXRpb24sIGRieG91dF9zeW1ib2xfbmFtZSwgZGJ4b3V0X2luaXQsCglkYnhvdXRfc3RhcnRfbmV3X3NvdXJjZV9maWxlLCBkYnhvdXRfc291cmNlX2ZpbGUsCglkYnhvdXRfc291cmNlX2xpbmUsIGRieG91dF9maW5pc2gsIGRieG91dF90eXBlX2ZpZWxkcywKCWRieG91dF90eXBlX21ldGhvZHMsIGRieG91dF9zeW1ib2wsIGRieG91dF9wcmVwYXJlX3N5bWJvbCk6CglDb25zdGlmeSBhIGNoYXIqLgoJKGRieG91dF90eXBlcywgZGJ4b3V0X2FyZ3MsIGRieG91dF9zeW1ib2wpOiBEZWxldGUgcHJvdG90eXBlcy4KCShkYnhvdXRfc3ltYm9sKTogTWFyayBwYXJhbWV0ZXIgYGxvY2FsJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoZGJ4b3V0X2Jsb2NrKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgYmxvY2tudW0nLgoKCSogZGJ4b3V0LmggKGRieG91dF9pbml0LCBkYnhvdXRfZmluaXNoLAoJZGJ4b3V0X3N0YXJ0X25ld19zb3VyY2VfZmlsZSwgZGJ4b3V0X3NvdXJjZV9maWxlLCBkYnhvdXRfdHlwZXMsCglkYnhvdXRfYXJncywgZGJ4b3V0X3NvdXJjZV9saW5lKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGR3YXJmb3V0LmMgKGR3YXJmX3RhZ19uYW1lLCBkd2FyZl9hdHRyX25hbWUsCglkd2FyZl9zdGFja19vcF9uYW1lLCBkd2FyZl90eXBlbW9kX25hbWUsIGR3YXJmX2ZtdF9ieXRlX25hbWUsCglkd2FyZl9mdW5kX3R5cGVfbmFtZSwgbmFtZV9hdHRyaWJ1dGUsIHN0bXRfbGlzdF9hdHRyaWJ1dGUsCglsb3dfcGNfYXR0cmlidXRlLCBoaWdoX3BjX2F0dHJpYnV0ZSwgYm9keV9iZWdpbl9hdHRyaWJ1dGUsCglib2R5X2VuZF9hdHRyaWJ1dGUsIGNvbXBfZGlyX2F0dHJpYnV0ZSwgc2ZfbmFtZXNfYXR0cmlidXRlLAoJc3JjX2luZm9fYXR0cmlidXRlLCBtYWNfaW5mb19hdHRyaWJ1dGUsIHByb2R1Y2VyX2F0dHJpYnV0ZSwKCWxvb2t1cF9maWxlbmFtZSwgZ2VuZXJhdGVfbWFjaW5mb19lbnRyeSwgZnVuZGFtZW50YWxfdHlwZV9jb2RlLAoJZHdhcmZvdXRfbGluZSwgZHdhcmZvdXRfc3RhcnRfbmV3X3NvdXJjZV9maWxlLCBkd2FyZm91dF9kZWZpbmUsCglkd2FyZm91dF91bmRlZik6IENvbnN0aWZ5IGEgY2hhciouCgkoYWRkX2luY29tcGxldGVfdHlwZSwgcmV0cnlfaW5jb21wbGV0ZV90eXBlcyk6IEFkZCBwcm90b3R5cGVzLgoKCSogZHdhcmZvdXQuaCAoZHdhcmZvdXRfZGVmaW5lLCBkd2FyZm91dF91bmRlZiwKCWR3YXJmb3V0X3N0YXJ0X25ld19zb3VyY2VfZmlsZSwgZHdhcmZvdXRfbGluZSk6IENvbnN0aWZ5IGEgY2hhciouCgoxOTk5LTEwLTI1ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoTUlQU19JU0FfREVGQVVMVCk6IEluc3VyZSBpdCdzIGRlZmluZWQuCgkoTVVMVElMSUJfSVNBX0RFRkFVTFQpOiBOZXcuCgkoTVVMVElMSUJfREVGQVVMVFMpOiBVc2UgaXQuCgkqIGNvbmZpZy9taXBzL21pcHMuYyAoKTogUmVtb3ZlIHRoZSBub3cgdW5uZWNlc3NhcnkgZGVmaW5pdGlvbgoJb2YgTUlQU19JU0FfREVGQVVMVC4KCSogY29uZmlnL21pcHMvZWxmNjQuaCAoTVVMVElMSUJfREVGQVVMVFMpOiBSZW1vdmUgdGhlIG5vdwoJdW5uZWNlc3NhcnkgZGVmaW5pdGlvbi4KCk1vbiBPY3QgMjUgMjI6MDg6MzUgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5tZCAocGljX2xvYWRfYWRkcik6IEFkZCBjb25zdHJhaW50cyB0byBvcGVyYW5kIDEuCgoxOTk5LTEwLTI1ICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmMvZ2VuZml4ZXM6ICBQcm92aWRlIGEgbWVhbnMgZm9yIHNwZWNpZnlpbmcgLUQgb3B0aW9ucyB0bwoJQXV0b0dlbgoKTW9uIE9jdCAyNSAwMDo0MjozNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhcm0uYyAoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBDb3JyZWN0IGluaXRpYWxpemF0aW9uIG9mCglhcm1fZmFzdF9tdWx0aXBseSwgYXJtX2FyY2g0LCBhcm1fYXJjaDUsIGFybV9sZF9zY2hlZCwKCWFybV9pc19zdHJvbmcsIGFuZCBhcm1faXNfNl9vcl83LgoKCSogbG9vcC5jIChub3RlX3NldF9wc2V1ZG9fbXVsdGlwbGVfdXNlc19yZXR2YWwpOiBOZXcgdmFyaWFibGUuCgkobm90ZV9zZXRfcHNldWRvX211bHRpcGxlX3VzZXMpOiBOZXcgZnVuY3Rpb24uCgkoY2hlY2tfZGJyYV9sb29wKTogVXNlIG5vdF9zZXRfcHNldWRvX211bHRpcGxlX3VzZXMgdG8gZGV0ZXJtaW5lCglpZiBhIHBzZXVkbyBzZXQgaW4gdGhlIGxvb3AgZXhpdCBpcyB1c2VkIGVsc2V3aGVyZS4KClN1biBPY3QgMjQgMjA6NTI6NDAgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGkzODYubWQgKG11bHNpMyk6IFR3ZWFrIHRvIHdvcmsgd2l0aCBTQ08gT1NSNSBDT0ZGIGFzc2VtYmxlci4KClN1biBPY3QgMjQgMjE6MDI6NDYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYubWQgKCpsZWFfMCk6IENvbGxhcHNlIGFkZHNpXzAsIGFkZHNpX2xlYV9bMTIzXSBpbnRvCglhIHNpbmdsZSBsb2FkLWFkZHJlc3MgcGF0dGVybi4KClN1biBPY3QgMjQgMTk6MzM6MjQgMTk5OSAgTWFyayBQLiBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkdWxlX2luc25zKTogRG9uJ3QgYXNzaWduIExVSURzIGRpZmZlcmVudGx5CglkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgbGluZS1udW1iZXIgbm90ZXMgYXJlIHByZXNlbnQuCgpTdW4gT2N0IDI0IDIwOjI5OjU5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNjY3AuYyAocHJvZ25hbWUsIGZpbGVfYnVmLCBkZWZhdWx0X2luY2x1ZGUsIGluY2x1ZGVfZmlsZSwKCW1hY3JvZGVmLCBkZWZpbml0aW9uLCBoYXNodmFsLCB3Y2hhcl90eXBlLCB1c2VyX2xhYmVsX3ByZWZpeCwKCWRpcmVjdGl2ZSwgb3V0X2ZuYW1lLCBpZl9zdGFjaywgc2FmZV93cml0ZSwgaW5kZXgwLCBnZXRfbGludGNtZCwKCWV4cGFuZF90b190ZW1wX2J1ZmZlciwgaXNfc3lzdGVtX2luY2x1ZGUsIGJhc2VfbmFtZSwKCWFic29sdXRlX2ZpbGVuYW1lLCByZWFkX25hbWVfbWFwLCBvcGVuX2luY2x1ZGVfZmlsZSwKCXJlY29yZF9jb250cm9sX21hY3JvLCBjaGVja19wcmVjb21waWxlZCwgY2hlY2tfcHJlY29uZGl0aW9ucywKCXBjZmluY2x1ZGUsIHBhc3NfdGhydV9kaXJlY3RpdmUsIGNyZWF0ZV9kZWZpbml0aW9uLAoJY2hlY2tfbWFjcm9fbmFtZSwgY29tcF9kZWZfcGFydCwgY29sbGVjdF9leHBhbnNpb24sCgljaGVja19hc3NlcnRpb24sIHJlYWRfdG9rZW5fbGlzdCwgYXNzZXJ0aW9uX2luc3RhbGwsCglhc3NlcnRpb25fbG9va3VwLCBldmFsX2lmX2V4cHJlc3Npb24sIGNvbmRpdGlvbmFsX3NraXAsCgl2YWxpZGF0ZV9lbHNlLCBza2lwX3F1b3RlZF9zdHJpbmcsIHF1b3RlX3N0cmluZywgbWFjYXJnMSwKCWVycm9yX2Zyb21fZXJybm8sIGluc3RhbGwsIGxvb2t1cCwgaGFzaGYsIGR1bXBfZGVmbl8xLAoJcGVycm9yX3dpdGhfbmFtZSwgcGZhdGFsX3dpdGhfbmFtZSwgbWFpbiwgdHJpZ3JhcGhfcGNwLAoJY2hlY2tfd2hpdGVfc3BhY2UsIHJlc2NhbiwgaGFuZGxlX2RpcmVjdGl2ZSwgbW9udGhuYW1lcywKCXNwZWNpYWxfc3ltYm9sLCBkb19pbmNsdWRlLCByZW1hcF9pbmNsdWRlX2ZpbGUsIHdyaXRlX291dHB1dCwKCWFyZ2xpc3QsIGRvX2Fzc2VydCwgZG9fdW5hc3NlcnQsIGRvX2xpbmUsIGRvX2Vycm9yLCBkb19vbmNlLAoJZG9faWRlbnQsIGRvX3NjY3MsIGRvX3hpZmRlZiwgc2tpcF9pZl9ncm91cCwKCW91dHB1dF9saW5lX2RpcmVjdGl2ZSwgbWFjcm9leHBhbmQsIG1hY2FyZywgY2hhbmdlX25ld2xpbmVzLAoJaW5pdGlhbGl6ZV9idWlsdGlucywgbWFrZV9kZWZpbml0aW9uKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIHBjcC5oIChzdHJpbmdkZWYpOiBMaWtld2lzZS4KClN1biBPY3QgMjQgMTM6Mjk6MjggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IEV4YW1pbmUgU0VUX0RFU1Qgb2Ygc2luZ2xlX3NldAoJbm90IG9mIHBhdHRlcm4uCgpTdW4gT2N0IDI0IDEzOjE0OjIwIDE5OTkgIEdyYWhhbSAgPGdyYWhhbXNAcmNwLmNvLnVrPgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbGlhcy5jOiBJbmNsdWRlIGdnYy5oLgoJKHJlZ19iYXNlX3ZhbHVlLCBuZXdfcmVnX2Jhc2VfdmFsdWUsIHJlZ19iYXNlX3ZhbHVlX3NpemUpOiBNYWtlIHN0YXRpYy4KCShyZWNvcmRfc2V0KTogVmVyaWZ5IGVub3VnaCByb29tIGluIHJlZ19iYXNlX3ZhbHVlLgoJKGluaXRfYWxpYXNfYW5hbHlzaXMpOiBBbGxvY2F0ZSByZWdfYmFzZV92YWx1ZSB3aXRoIHhjYWxsb2MuCglSZWdpc3RlciBpdCBhcyBhIEdDIHJvb3QuCgkoZW5kX2FsaWFzX2FuYWx5c2lzKTogRnJlZSByZWdfYmFzZV92YWx1ZS4gIFJlbW92ZSBpdCBhcyBhIEdDIHJvb3QuCgkqIE1ha2VmaWxlLmluIChhbGlhcy5vKTogRGVwZW5kIG9uIGdnYy5oLgoKCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogVmVyaWZ5IHRoZSBpbnNuIGJlZm9yZSBhIGJhcnJpZXIKCWlzIGEgSlVNUF9JTlNOIGJlZm9yZSBjaGVja2luZyBKVU1QX0xBQkVMLgoKU3VuIE9jdCAyNCAxNTo0Njo0NCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBtaXBzL2JzZC01LmggKEFTTV9PVVRQVVRfQVNDSUkpOiBDb25zdGlmeSBhIGNoYXIqLgoJKiBtaXBzL2lyaXM0LmggKEFTTV9PVVRQVVRfQVNDSUkpOiBMaWtld2lzZS4KCSogbWlwcy9taXBzLTUuaCAoQVNNX09VVFBVVF9BU0NJSSk6IExpa2V3aXNlLgoJKiBtaXBzL21pcHMuaCAoQVNNX09VVFBVVF9BU0NJSSk6IExpa2V3aXNlLgoJKiBtaXBzL3N2cjMtNS5oIChBU01fT1VUUFVUX0FTQ0lJKTogTGlrZXdpc2UuCgkqIG1pcHMvc3ZyNC01LmggKEFTTV9PVVRQVVRfQVNDSUkpOiBMaWtld2lzZS4KClN1biBPY3QgMjQgMTU6MzU6NDMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogb3V0cHV0LmggKGN0b3JzX3NlY3Rpb24sIGR0b3JzX3NlY3Rpb24sIGJzc19zZWN0aW9uKTogUHJvdG90eXBlLgoKCSogYWxwaGEvYWxwaGEtaW50ZXJpeC5oICh0ZXh0X3NlY3Rpb24pOiBEZWxldGUgcHJvdG90eXBlLgoJKiBhbHBoYS9lbGYuaCAodGV4dF9zZWN0aW9uKTogTGlrZXdpc2UuCgkqIGFybS9saW51eC1lbGYuaCAodGV4dF9zZWN0aW9uKTogTGlrZXdpc2UuCgkqIGFybS9saW51eC10ZWxmLmggKHRleHRfc2VjdGlvbik6IExpa2V3aXNlLgoJKiBjNHgvYzR4LmggKHRleHRfc2VjdGlvbik6IExpa2V3aXNlLgoJKiBkc3AxNnh4L2RzcDE2eHguaCAoYnNzX3NlY3Rpb24pOiBMaWtld2lzZS4KCSogZWxmb3MuaCAodGV4dF9zZWN0aW9uKTogTGlrZXdpc2UuCgkqIGkzODYvYWl4Mzg2bmcuaCAodGV4dF9zZWN0aW9uKTogTGlrZXdpc2UuCgkqIGkzODYvaTM4Ni1pbnRlcml4LmggKHRleHRfc2VjdGlvbik6IExpa2V3aXNlLgoJKiBpMzg2L3NjbzUuaCAodGV4dF9zZWN0aW9uKTogTGlrZXdpc2UuCgkqIGkzODYvc3ZyM2dhcy5oICh0ZXh0X3NlY3Rpb24pOiBMaWtld2lzZS4KCSogbmV4dHN0ZXAuaCAodGV4dF9zZWN0aW9uKTogTGlrZXdpc2UuCgkqIHBzb3MuaCAodGV4dF9zZWN0aW9uKTogTGlrZXdpc2UuCgkqIHB0eDQuaCAodGV4dF9zZWN0aW9uKTogTGlrZXdpc2UuCgkqIHN2cjMuaCAodGV4dF9zZWN0aW9uKTogTGlrZXdpc2UuCgkqIHN2cjQuaCAodGV4dF9zZWN0aW9uLCBjdG9yc19zZWN0aW9uLCBkdG9yc19zZWN0aW9uKTogTGlrZXdpc2UuCgpTdW4gT2N0IDI0IDE1OjIwOjU5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGZpbmFsLmMgKHBlZXBob2xlKTogRGVsZXRlIHByb3RvdHlwZS4KCgkqIGdjc2UuYyAocHJvY2Vzc19pbnNlcnRfaW5zbiwgcHJlX2VkZ2VfaW5zZXJ0KTogQWRkIHByb3RvdHlwZXMuCgkocHJlX2luc2VydF9jb3BpZXMpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBiYicuCgoJKiBnZW5yZWNvZy5jIChkZWJ1Z19kZWNpc2lvbl8wLCBkZWJ1Z19kZWNpc2lvbl9saXN0LCBtYWluKTogQWRkCglwcm90b3R5cGVzLgoKCSogb3V0cHV0LmggKHBlZXBob2xlKTogQWRkIHByb3RvdHlwZS4KClN1biBPY3QgMjQgMTE6MzU6MzAgMTk5OSAgTWFyayBQLiBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNvbmZpZy9taXBzL2lyaXM2LmggKFNVQlRBUkdFVF9BU01fT1BUSU1JWklOR19TUEVDKTogRGVmaW5lIHRvCgktTzAuCgpTYXQgT2N0IDIzIDIxOjEzOjAwIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBpbnRlZ3JhdGUuYyAoaW50ZWdyYXRlX2RlY2xfdHJlZSk6IFR3ZWFrIHNldHRpbmcgb2YgREVDTF9DT05URVhUCglmb3IgaW5saW5lZCBkZWNsYXJhdGlvbnMuCgpGcmkgT2N0IDIyIDE4OjA1OjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGFybS5jIChsb2dpY2FsX2JpbmFyeV9vcGVyYXRvcik6IE5ldyBmdWNudGlvbi4KCSogYXJtLmggKGxvZ2ljYWxfYmluYXJ5X29wZXJhdG9yKTogRGVjbGFyZSBpdC4KCShQUkVESUNBVEVfQ09ERVMpOiBIYW5kbGUgbG9naWNhbF9iaW5hcnlfb3BlcmF0b3IuCgkqIGFybS5tZCAoYW5kZGkzLCBhbmRkaV96ZXNpZGlfZGksIGFuZGRpX3Nlc2RpX2RpKTogVXNlICIjIiBmb3IKCW91dHB1dCBjb25zdHJhaW50cy4gIEFkZCBhcHByb3ByaWF0ZSBzcGxpdHRlcnMuCgkoYW5kZGlfbm90ZGlfZGksIGFuZGRpX25vdHplc2lkaV9kaSwgYW5kZGlfbm90c2VzaWRpX2RpKTogTGlrZXdpc2UuCgkoaW9yZGkzLCBpb3JkaV96ZXNpZGlfZGksIGlvcmRpX3Nlc2lkaV9kaSk6IExpa2V3aXNlLgoJKHhvcmRpMywgeG9yZGlfemVzaWRpX2RpLCB4b3JkaV9zZXNpZGlfZGkpOiBMaWtld2lzZS4KCkZyaSBPY3QgMjIgMjM6NDY6NTAgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBnZW5vdXRwdXQuYyAoc3RydWN0IG9wZXJhbmRfZGF0YSk6IE5ldyBlbHQgZWxpbWluYWJsZS4KCShvdXRwdXRfb3BlcmFuZF9kYXRhKTogV3JpdGUgaXQuCgkoc2Nhbl9vcGVyYW5kcyk6IFNldCBpdCBmb3IgTUFUQ0hfT1BFUkFORCwgY2xlYXIgZm9yIG90aGVyIG1hdGNoZXJzLgoJKGNvbXBhcmVfb3BlcmFuZHMpOiBUYWtlIGl0IGludG8gYWNjb3VudC4KCSogcmVjb2cuaCAoc3RydWN0IGluc25fb3BlcmFuZF9kYXRhKTogTmV3IGVsdCBlbGltaW5hYmxlLgoJKiByZWxvYWQxLmMgKGNoZWNrX2VsaW1pbmFibGVfb2NjdXJyZW5jZXMsIGVsaW1pbmF0aW9uX2VmZmVjdHMpOiBOZXcKCWZ1bmN0aW9ucy4KCShvbGRfYXNtX29wZXJhbmRzX3ZlYywgbmV3X2FzbV9vcGVyYW5kc192ZWMpOiBEZWxldGUuCgkoZWxpbWluYXRlX3JlZ3MpOiBNb3ZlIGNvZGUgdGhhdCBkZXRlY3RzIGNoYW5nZXMgdG8gZWxpbWluYXRpb24KCXRhcmdldCByZWdzIGludG8gbmV3IGZ1bmN0aW9uIGVsaW1pbmF0aW9uX2VmZmVjdHMuCglEZWxldGUgb25lICNpZiAwIGJsb2NrLgoJQWJvcnQgZm9yIFVTRSwgQ0xPQkJFUiwgQVNNX09QRVJBTkRTIGFuZCBTRVQuCgkoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IFJldHVybiBpbW1lZGlhdGVseSBmb3IgVVNFcywgQ0xPQkJFUnMsCglBRERSX1ZFQ3MsIEFERFJfRElGRl9WRUNzIGFuZCBBU01fSU5QVVRzLgoJT25seSBjYWxsIGVsaW1pbmF0ZV9yZWdzIGZvciByZWFsIG9wZXJhbmRzIG9mIHRoZSBpbnNuLCBub3QgZm9yIHBhcnRzCglvZiBpdHMgc3RydWN0dXJlIG9yIHBhcnRzIG1hdGNoZWQgYnkgdGhpbmdzIGxpa2UgbWF0Y2hfb3BlcmF0b3IuCglVc2UgZWxpbWluYXRpb25fZWZmZWN0cyBhbmQgY2hlY2tfZWxpbWluYWJsZV9vY2N1cnJlbmNlcy4gIFVzZQoJY29weV9pbnNuIHRvIGR1cGxpY2F0ZSB0aGUgcGF0dGVybiB3aGVuIG5vdCBpbiB0aGUgZmluYWwgcGFzcy4KCkZyaSBPY3QgMjIgMDk6MDM6NDQgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGkzODYubWQ6IEFkZCBtaXNzaW5nIGB5JyBtb2RpZmllcnMgdG8gdXNlcyBvZiBmc3QsIGZzdHAsIGZsZCwKCWFuZCBmbGQuCgoxOTk5LTEwLTIyICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmMvUkVBRE1FOiBkb2N1bWVudCB0aGUgIm1hY2giIG1hY2hpbmUgbWF0Y2hpbmcgdGVzdAoJKiBmaXhpbmMvZml4Zml4ZXMuYzogSW1wbGVtZW50IHRoZSAjZWxzZS8jZW5kaWYgbGFiZWwgZml4CgkqIGZpeGluYy9maXh0ZXN0cy5jOiBJbXBsZW1lbnQgdGhlICNlbHNlLyNlbmRpZiBsYWJlbCB0ZXN0CgkqIGZpeGluYy9pbmNsaGFjay5kZWY6IHV0aWxpemUgdGhlc2UgdGVzdHMgYW5kIGZpeGVzCgkqIGZpeGluYy9pbmNsaGFjay5zaDogIHJlZ2VuCgkqIGZpeGluYy9maXhpbmNsLng6ICByZWdlbgoJKiBmaXhpbmMvZml4aW5jbC5zaDogIHJlZ2VuCgpUaHUgT2N0IDIxIDIwOjM3OjE5IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChjc2Uubyk6IERlcGVuZCBvbiBoYXNodGFiLmgsIG5vdCBzcGxheS10cmVlLmguICBBbHNvCglkZXBlbmQgb24gZ2djLmguCgpUaHUgT2N0IDIxIDIwOjMwOjE5IDE5OTkgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgoKCSogZ2NjLjE6IERvY3VtZW50IGV4aXQgY29kZXMuCgpUaHUgT2N0IDIxIDEyOjQ5OjA1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNhbGxzLmM6IEluY2x1ZGUgdG1fcC5oIGxhdGVyLCBzbyBldmVyeXRoaW5nIHdlIG5lZWQgaXMgZGVmaW5lZC4KCSogZXhwci5jOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYzogTGlrZXdpc2UuCgoJKiBleGNlcHQuYzogSW5jbHVkZSB0bV9wLmguCgoJKiBzcGFyYy5jOiBMaWtld2lzZS4KCShkd2FyZjJvdXRfY2ZpX2xhYmVsKTogRG9uJ3QgcHJvdG90eXBlLgoJKGNoZWNrX3JldHVybl9yZWdzLCBlcGlsb2d1ZV9yZW51bWJlciwKCXVsdHJhX2Ntb3ZlX3Jlc3VsdHNfcmVhZHlfcCwgdWx0cmFfZnBtb2RlX2NvbmZsaWN0X2V4aXN0cywKCXVsdHJhX2ZpbmRfdHlwZSwgdWx0cmFfYnVpbGRfdHlwZXNfYXZhaWwsIHVsdHJhX2ZsdXNoX3BpcGVsaW5lLAoJdWx0cmFfcmVzY2FuX3BpcGVsaW5lX3N0YXRlLCBzZXRfZXh0ZW5kcywgdWx0cmFfY29kZV9mcm9tX21hc2ssCgl1bHRyYV9zY2hlZHVsZV9pbnNuKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkoZGF0YV9zZWdtZW50X29wZXJhbmQsIHRleHRfc2VnbWVudF9vcGVyYW5kKTogQ2FsbCBpdHNlbGYgd2l0aCB0aGUKCXByb3BlciBudW1iZXIgb2YgYXJndW1lbnRzLgoJKHNwYXJjX2ZsYXRfc2F2ZV9yZXN0b3JlLCBzcGFyY192OHBsdXNfc2hpZnQpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogc3BhcmMuaDogTW92ZSBhbGwgZGVjbGFyYXRpb25zIHRvIHNwYXJjLXByb3Rvcy5oLgoJKFNFTEVDVF9SVFhfU0VDVElPTik6ICBQYXNzIGEgbWlzc2luZyBNT0RFIGFyZ3VtZW50IHRvCglzeW1ib2xpY19vcGVyYW5kLgoKCSogc3BhcmMvc3lzdjQuaCAoU0VMRUNUX1JUWF9TRUNUSU9OKTogTGlrZXdpc2UuCgoJKiBjb25maWcvc3ZyNC5oICh0ZXh0X3NlY3Rpb24sIGN0b3JzX3NlY3Rpb24sIGR0b3JzX3NlY3Rpb24pOiBBZGQKCVByb3RvdHlwZXMuCgkoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUsIFVOSVFVRV9TRUNUSU9OLAoJQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVCwgQVNNX09VVFBVVF9MSU1JVEVEX1NUUklORywKCUFTTV9PVVRQVVRfQVNDSUkpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogc3BhcmMtcHJvdG9zLmg6IE5ldyBmaWxlIGZvciBzcGFyYyBwcm90b3R5cGVzLgoKVGh1IE9jdCAyMSAxMjoyMzo0MCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmdW5jdGlvbi5jIChyZWNvcmRfaW5zbnMsIGNvbnRhaW5zKTogQWx3YXlzIGRlY2xhcmUgYW5kIGRlZmluZS4KCShyZWNvcmRfaW5zbnMpOiBNYXJrIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KClRodSBPY3QgMjEgMTM6MDM6NDkgMTk5OSAgSm9uYXRoYW4gTGFybW91ciAgPGpsYXJtb3VyQGN5Z251cy5jby51az4KCgkqIGNvbmZpZy9hcm0vdGVsZi5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IEFkZCAlbm9iaXRzIG9wdGlvbgoJdG8gLnNlY3Rpb24gd2hlbiBvdXRwdXR0aW5nIGEgLmJzcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCBtdWx0aXBsZQoJLmJzcyBpbnB1dCBzZWN0aW9ucyAoYXMgaGFwcGVucyB3aXRoIC1mZGF0YS1zZWN0aW9ucykKCUFsc28gb3V0cHV0ICVwcm9nYml0cywgbm90IEBwcm9nYml0cyBzbyB0aGUgYXNzZW1ibGVyIGRvZXNuJ3QgdHJlYXQgYXMKCWEgY29tbWVudC4KCSogY29uZmlnL2FybS91bmtub3duLWVsZi5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IExpa2V3aXNlCgoJKiBjb25maWcvYXJtL2xpYjFmdW5jcy5hc20gKF9jYWxsX3ZpYV9yWCk6IEFsbG93IGNvbXBpbGF0aW9uIG9mCgl0aHVtYiBwYXJ0cyBldmVuIHdoZW4gYnVpbGRpbmcgd2l0aCBub24tdGh1bWIgQ1BVcywgYnkgZm9yY2luZwoJdGh1bWIgbW9kZS4KCldlZCBPY3QgMjAgMjI6NTc6NTggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3BhcmMubWQgKG1vdnNmX2NvbnN0X2ludHJlZyk6IElmIHNwbGl0dGluZywgbGVuZ3RoIG11c3QgYmUgPiAxLgoJKG1vdmRmX2NvbnN0X2ludHJlZ19zcDY0KTogU2ltaWxhcmx5LgoKCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBDaGVjayB0aGUgY29ycmVjdCBpbnNuCglmb3IgcHJlLWV4aXN0aW5nIFJFR19FUVVJViBub3Rlcy4KCldlZCBPY3QgMjAgMjA6NDE6NDYgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNzZS5jIChjc2VfZW5kX29mX2Jhc2ljX2Jsb2NrKTogRG9uJ3QgcmV0dXJuIHRoZSBlbmQgb2YgYSBiYXNpYwoJYmxvY2sgcmVhY2hlZCBieSBhIGJyYW5jaCBpZiB3ZSdyZSBub3QgZ29pbmcgdG8gYWN0dWFsbHkgcHJvY2VzcwoJdGhpcyBibG9jay4KCldlZCBPY3QgMjAgMTU6MTg6NDIgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogaW50ZWdyYXRlLmMgKGludGVncmF0ZV9kZWNsX3RyZWUpOiBTZXQgREVDTF9DT05URVhUIHRvIDAgaWYgdGhpcyBpcwoJYSBsb2NhbCBleHRlcm4gZnVuY3Rpb24gZGVjbGFyYXRpb24uCgpXZWQgT2N0IDIwIDEzOjU2OjAxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2LmMgKGl4ODZfZXhwYW5kX3Byb2xvZ3VlKTogUHJvcGVybHkgd3JhcCBVU0UgYXJvdW5kCglyZWcgZm9yIENBTExfSU5TTl9GVU5DVElPTl9VU0FHRS4KClRodSBPY3QgMTQgMTg6NTE6MzcgMTk5OSAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLm1kIChtb3ZkZl9pbnRlcm5hbDFhKTogQWxsb3cgZmxvYXRpbmctcG9pbnQKCW1vdmUgYmV0d2VlbiBHUF9SRUdzLgoKV2VkIE9jdCAyMCAxNTozNjoxMSAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdGh1bWIuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogVGFrZSBhY2NvdW50IG9mCgl0aGUgbW9kZSBzaXplIHdoZW4gZmluZGluZyBvdXQgaWYgYW4gb2Zmc2V0IGlzIGxlZ2FsLgoKV2VkIE9jdCAyMCAwNjoyNjo1OCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYmFzaWMtYmxvY2suaCAoUFJPUF8qKTogTW92ZSBjb25zdGFudHMgZnJvbSAuLi4KCSogZmxvdy5jOiAuLi4gaGVyZS4KCShjb21wdXRlX2JiX2Zvcl9pbnNuKTogRnJlZSB0aGUgYXJyYXkgYmVmb3JlIHJlYWxsb2NhdGluZy4KCSh1cGRhdGVfbGlmZV9pbmZvKTogTmV3IGFyZyBQUk9QX0ZMQUdTOyBwYXNzIG9uIHRvIHByb3BhZ2F0ZV9ibG9jay4KCShhbGxvY2F0ZV9yZWdfbGlmZV9kYXRhKTogUmVzZXQgYWxsIHJlZyB2YXJpYWJsZXMgY29sbGVjdGVkIGJ5Cglwcm9wYWdhdGVfYmxvY2suCgkoZ2V0X2Jsb2NrX2hlYWRfdGFpbCk6IERvbid0IGNvbnZlcnQgZnJvbSBiYiB0byBibG9jay4KCShnZXRfYmJfaGVhZF90YWlsKTogTmV3LiAgVXBkYXRlIGFsbCBjYWxsZXJzIG9mIGdldF9ibG9ja19oZWFkX3RhaWwuCgkoZmluZF9pbnNuX3JlZ193ZWlnaHQpOiBUYWtlIGJsb2NrIG5vdCBiYi4KCShzY2hlZHVsZV9ibG9jayk6IERvbid0IHNldCBibG9jayBudW0gZm9yIG1vdmVkIGluc25zLgoJKHNjaGVkdWxlX3JlZ2lvbik6IERvbid0IHVwZGF0ZV9saWZlX2luZm8gb3IgZmluZF9pbnNuX3JlZ193ZWlnaHQuCgkoc2NoZWR1bGVfaW5zbnMpOiBEbyBpdCBoZXJlIGluc3RlYWQuCgkqIGNvbWJpbmUuYyAoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBJbnZva2UgY29tcHV0ZV9iYl9mb3JfaW5zbgoJYmVmb3JlIHVwZGF0ZV9saWZlX2luZm8uCgkqIHJlY29nLmMgKHNwbGl0X2FsbF9pbnNucywgcGVlcGhvbGUyX29wdGltaXplKTogVXBkYXRlIGZvcgoJbmV3IGFyZyB0byB1cGRhdGVfbGlmZV9pbmZvLgoJKiBydGxhbmFsLmMgKHJlbW92ZV9ub3RlKTogQ29wZSB3aXRoIE5VTEwgbm90ZS4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBEb24ndCBpbnZva2UgcmVjb21wdXRlX3JlZ191c2FnZQoJaWYgd2UgZGlkIHNjaGVkMS4KCldlZCBPY3QgMjAgMTA6NDY6NDEgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZV8xKTogTW9yZSBhY2N1cmF0ZWx5IGRldGVjdCBjYXNlc2kgaW5zbnMuCgoJKiBmbG93LmMgKG1lcmdlX2Jsb2Nrc19tb3ZlX3ByZWRlY2Vzc29yX25vanVtcHMpOiBSZS1vcmRlciB0aGUgYmFzaWMKCWJsb2NrIHJlY29yZHMgc28gdGhhdCBtZXJnZV9ibG9ja3Nfbm9tb3ZlIHdpbGwgY2xlYW4gdXAgY29ycmVjdGx5LgoJKHNwbGl0X2VkZ2UpOiBIYW5kbGUgY2FzZXNpIGluc25zLgoKCSogZ2NjLXBhZ2UuYzogVHJ5IE1BUF9BTk9OIGlmIHdlIGRvbid0IGhhdmUgTUFQX0FOT05ZTU9VUy4KClR1ZSBPY3QgMTkgMjM6NDM6NTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEubWQgKGNhbGwsIGNhbGxfdmFsdWUpOiBEbyBub3QgZW1pdCBhIGJsb2NrYWdlIGFmdGVyIHJlc3RvcmluZwoJdGhlIFBJQyByZWdpc3Rlci4KClR1ZSBPY3QgMTkgMTc6MjI6MzkgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGMtdHlwZWNrLmMgKGNfZXhwYW5kX2FzbV9vcGVyYW5kcyk6IEZpeCB0eXBvLgoKVHVlIE9jdCAxOSAxODo0Mjo1OCAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGFybS5jIChmcHVfcmhzX29wZXJhbmQpOiBWZXJpZnkgbW9kZXMuCgkoZnB1X2FkZF9vcGVyYW5kKTogTGlrZXdpc2UuCgkoZGlfb3BlcmFuZCk6IExpa2V3aXNlLgoJKHNvZnRfZGZfb3BlcmFuZCk6IExpa2V3aXNlLgoKVHVlIE9jdCAxOSAxNToyNjoxMSAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5jIChhcm1fcmV0dXJuX2luX21lbW9yeSk6IEFQQ1MgcnVsZXMgc3RhdGUgdGhhdCB0aGUgZWxlbWVudHMKCW9mIGEgc3RydWN0dXJlIHJldHVybmVkIGluIGEgcmVnaXN0ZXIgbXVzdCBiZSAnaW50ZWdlci1saWtlJy4KCjE5OTktMTAtMTkgIEJydWNlIEtvcmIgIDxhdXRvZ2VuQGxpbnV4Ym94LmNvbT4KCgkqIGZpeGluYy9NYWtlZmlsZS5pbjogQ2hhbmdlIHRoZSBnZW5lcmF0aW9uIHJ1bGVzIHRvIHJ1biBgZ2VuZml4ZXMnCglpbiB0aGUgc291cmNlIHRyZWUgd2hlbiB0aGUgZ2VuZXJhdGVkIHRhcmdldHMgYXJlIG91dCBvZiBkYXRlCgkqIGZpeGluYy9nZW5maXhlczogQWx0ZXIgaXQgdG8gcnVuIGluZGl2aWR1YWwgZml4ZXMgZm9yIG1ha2UuCgkqIGZpeGluYy9SRUFETUU6IHJld3JpdGUKCSogZml4aW5jL2luY2xoYWNrLmRlZjogbW92ZWQgaW5pdGlhbCBjb21tZW50cyB0byBSRUFETUUKClR1ZSBPY3QgMTkgMTQ6MDE6MzQgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChtYWluKTogRG8gbm90IGdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4KCXVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgc3dpdGNoIGlzIHJlY29nbml6YWJsZSBieSBhbm90aGVyCglsYW5ndWFnZS4gIElmIGV4dHJhX3dhcm5pbmdzIGFyZSBlbmFibGVkLCB0aGVuIGdlbmVyYXRlIGEKCXdhcm5pbmcgbWVzc2FnZSBpbnN0ZWFkLgoKVHVlIE9jdCAxOSAxMTo0MToxMiAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGMtcHJhZ21hLmggKFBSQUdNQV9JTlNFUlRfQVRUUklCVVRFUyk6IERlbGV0ZSBtYWNyby4KCShpbnNlcnRfcGFja19hdHRyaWJ1dGVzKTogRGVsZXRlIHByb3RvdHlwZS4KCgkqIGMtcHJhZ21hLmMgKGRlZmF1bHRfYWxpZ25tZW50KTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShwdXNoX2FsaWdubWVudCk6IEluaXRpYWxpemUgdG8gY3VycmVudCBlZmZlY3RpdmUgYWxpZ25tZW50LgoJKHBvcF9hbGlnbm1lbnQpOiBVc2UgdG8gc2V0IG5ldyBhbGlnbm1lbnQuCgkoaW5zZXJ0X3BhY2tfYXR0cmlidXRlcyk6IERlbGV0ZSBmdW5jdGlvbi4KCShoYW5kbGVfcHJhZ21hX3Rva2VuKTogU2V0IGRlZmF1bHRfYWxpZ25tZW50IGFzIHdlbGwgZWFjaCB0aW1lCglhICNwcmFnbWEgcGFjayg8bj4pIGlzIGVuY291bnRlcmVkLgoKVHVlIE9jdCAxOSAwMjowMzowMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWctc3RhY2suYyAoc3RhY2tfcmVzdWx0KTogQWdncmVnYXRlcyBhcmUgbm90IHJldHVybmVkIGluCglzdGFjayByZWdpc3RlcnMuCgpUdWUgT2N0IDE5IDAxOjI2OjQ4IDE5OTkgIEFsYXNkYWlyIEJhaXJkIDxhbGFzZGFpckB3aWxkY2F0LmRlbW9uLmNvLnVrPgoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogRml4IHRoaW5rbyBpbiB4KygtMCkgLT4geCB0cmFuc2Zvcm1hdGlvbi4KCk1vbiBPY3QgMTggMTU6MTk6NDEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGJhc2ljLWJsb2NrLmggKHNldF9ibG9ja19udW0pOiBEZWNsYXJlLgoJKiBmbG93LmMgKHVwZGF0ZV9saWZlX2luZm8pOiBEb24ndCBjYWxsIGNvbXB1dGVfYmJfZm9yX2luc24KCW9yIGZyZWVfYmFzaWNfYmxvY2tfdmFycy4KCSogaGFpZmEtc2NoZWQuYyAocmVtb3ZlX2RlcGVuZGVuY2UpOiBDb25kaXRpb25hbGl6ZSBvbiBIQVZFX2NjMC4KCShpbnNuX29yaWdfYmxvY2spOiBSZW1vdmUuCgkoSU5TTl9CTE9DSyk6IFJlbW92ZS4gIFVwZGF0ZSBhbGwgY2FsbGVycyB0byB1c2UgQkxPQ0tfTlVNLgoJKHNjaGVkdWxlX2Jsb2NrKTogS2VlcCBCTE9DS19OVU0gdXAtdG8tZGF0ZS4KCShzY2hlZHVsZV9pbnNucyk6IFVzZSBjb21wdXRlX2JiX2Zvcl9pbnNuLgoJKiByZWNvZy5jIChzcGxpdF9hbGxfaW5zbnMpOiBMaWtld2lzZS4KCShwZWVwaG9sZTJfb3B0aW1pemUpOiBMaWtld2lzZS4KCk1vbiBPY3QgMTggMTg6NTA6NTEgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCk6IEFkZCBvbmUgd29yZAoJaWYgdGhlIHBpYyByZWdpc3RlciBpcyB1c2VkLgoKTW9uIE9jdCAxOCAwMjozODo0NiAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGMtZGVjbC5jIChwdXNoZGVjbCk6IFVzZSBUWVBFX0NPTlRFWFQgcmF0aGVyIHRoYW4gVFJFRV9QRVJNQU5FTlQuCgkoZmluaXNoX2RlY2wpOiBEdXBsaWNhdGUgdGVzdCBmb3IgVFJFRV9BU01fV1JJVFRFTiBpbiBlbHNlIGJyYW5jaCBvZgoJaWYgdGhhdCB0ZXN0cyBUUkVFX1BFUk1BTkVOVC4KCk1vbiBPY3QgMTggMDE6NDE6MzUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3NlLmMgKGludmFsaWRhdGVfZm9yX2NhbGwpOiBEbyBub3QgcmVtb3ZlIG1lbW9yeSByZWZlcmVuY2VzIGZyb20KCXRoZSB0YWJsZSBoZXJlLiAgSXQncyBoYW5kbGVkIGVsc2V3aGVyZS4KCgkqIGhhaWZhLXNjaGVkLmMgKGFkZF9kZXBlbmRlbmNlKTogUHJvdGVjdCByZWZlcmVuY2VzIHRvIHRoZQoJdHJ1ZSBkZXBlbmRlbmN5IGNhY2hlIHdpdGggI2lmZGVmIElOU05fU0NIRURVTElORy4KCShyZW1vdmVfZGVwZW5kZW5jZSk6IFNpbWlsYXJseS4KCgkqIG1uMTAyMDAubWQgKG91dGxpbmVfZXBpbG9ndWVfanVtcCk6IEVtYmVkIGEgKHJldHVybikgdG8gaW5kaWNhdGUKCXRvIHRoZSBjZmcgY29kZSB0aGF0IHRoaXMgaXMgYSByZXR1cm4gaW5zdHJ1Y3Rpb24uCgkqIG1uMTAzMDAubWQgKHJldHVybl9pbnRlcm5hbCk6IFNpbWlsYXJseS4KCgkqIGNvbWJpbmUuYyAoZ2V0X2xhc3RfdmFsdWUpOiBJZiB0aGUgbGFzdCBzZXQgb2YgYSByZWdpc3RlcgoJaXMgYWZ0ZXIgc3Vic3RfbG93X2N1aWQsIHRoZW4gd2UgY2FuIG5vdCB1c2UgaXQgdG8gZGV0ZXJtaW5lCgl0aGUgcmVnaXN0ZXIncyBsYXN0IHZhbHVlLgoKU3VuIE9jdCAxNyAxMTowMjo1MiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW46IEJhY2sgb3V0IHByZXZpb3VzIGNoYW5nZS4KClN1biBPY3QgMTcgMTU6MjI6NTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYyAobW92ZV9vcGVyYW5kKTogUmVqZWN0IChsb19zdW0gKHJlZykgKHVuc3BlYyAuLi4pKS4KCgkqIGhhaWZhLXNjaGVkLmMgKGFkZF9kZXBlbmRlbmNlKTogT25seSBjaGVjay91cGRhdGUgdGhlIGNhY2hlCglpZiBpdCBleGlzdHMuCgkocmVtb3ZlX2RlcGVuZGVuY2UpOiBMaWtld2lzZS4KCShzY2hlZHVsZV9pbnNucyk6IE9ubHkgY3JlYXRlIHRoZSB0cnVlX2RlcGVuZGVuY3lfY2FjaGUgaWYgdGhlCglhdmVyYWdlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgaW4gYSBiYXNpYyBibG9jayBpcyB2ZXJ5IGxhcmdlLgoKU3VuIE9jdCAxNyAxMTowMjo1MiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKGdnYy1jb21tb24ubyk6IERlcGVuZCBvbiBnZW5ydGwuaC4KCShnZ2Mtc2ltcGxlLm8pOiBMaWtld2lzZS4KCShnZ2MtcGFnZS5vKTogTGlrZXdpc2UuCgpTdW4gT2N0IDE3IDAyOjA5OjUwIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGJhc2ljLWJsb2NrLmggKHByZV9lZGdlX2xjbSwgcHJlX2VkZ2VfcmV2X2xjbSwgY29tcHV0ZV9hdmFpbGFibGUpOgoJUHJvdG90eXBlIGZvciBleHBvcnRlZCBmdW5jdGlvbnMuCgkocHJlX2xjbSwgcHJlX3Jldl9sY20pOiBSZW1vdmUgcHJvdG90eXBlcy4KCSogZ2NzZS5jIChjb21wdXRlX2FlX2tpbGwpOiBBZGQgYWVfZ2VuIGFuZCBhZV9raWxsIGFzIHBhcmFtZXRlcnMuCgkoY29tcHV0ZV9hdmFpbGFibGUpOiBNb3ZlIHRvIGxjbS5jLCBhbmQgY2hhbmdlIHBhcmFtZXRlciBvcmRlci4KCShvbmVfY2xhc3NpY19nY3NlX3Bhc3MpOiBDYWxsIGNvbXB1dGVfYWVfa2lsbCB3aXRoIHBhcmFtZXRlcnMuCgkocHJlX2luc2VydCwgc19wcmVkcywgc19zdWNjcywgbnVtX3ByZWRzLCBudW1fc3VjY3MpOiBEZWxldGUuCgkoZ2NzZV9tYWluKTogTm8gbG9uZ2VyIGNhbGwgY29tcHV0ZV9wcmVkc19zdWNjcy4gIFJlYnVpbGQgdGhlCglzZXQgdGFibGUgYWZ0ZXIgcmVhY2ggcHJlIHBhc3MuCgkocHJlX2luc2VydF9tYXAsIHByZV9kZWxldGVfbWFwLCBlZGdlX2xpc3QpOiBOZXcuCgkoYWxsb2NfcHJlX21lbSk6IEFsbG9jYXRlIGVkZ2UgdmVjdG9ycy4KCShmcmVlX3ByZV9tZW0pOiBEZWxldGUgZWRnZSB2ZWN0b3JzLgoJKGNvbXB1dGVfcHJlX2RhdGEpOiBDYWxsIG5ldyBlZGdlIGJhc2VkIGxjbSByb3V0aW5lcy4KCShwcm9jZXNzX2luc2VydF9pbnNuKTogTmV3IGZ1bmN0aW9uLgoJKGluc2VydF9pbnNuX2VuZF9iYik6IFVzZSBpdC4KCShwcmVfZWRnZV9pbnNlcnQpOiBOZXcgZnVuY3Rpb24uCgkocHJlX2luc2VydF9jb3B5X2luc24pOiBGb3JtYXR0aW5nIGZpeGVzLiAgVXBkYXRlIEJMT0NLX0VORCBhcwoJbmVlZGVkLgoJKHByZV9pbnNlcnRfY29waWVzKTogUmV2YW1wIHVzaW5nIG5ldyBlZGdlIGJhc2VkIGxjbSBvdXRwdXRzLgoJKHByZV9kZWxldGUpOiBMaWtld2lzZS4KCShvbmVfcHJlX2djc2VfcGFzcyk6IEluc2VydCAmIHJlbW92ZSBmYWtlIGVkZ2VzIHRvIHRoZSBleGl0CglibG9jay4KCShjb21wdXRlX2NvZGVfaG9pc3RfdmJlaW5vdXQpOiBOZXcgbmV3IGVkZ2UgYmFzZWQgcm91dGluZXMuCgkqIGxjbS5jOiBSZW1vdmUgYWxsIHRoZSBvbGQgTENNIGZ1bmN0aW9ucy4gIFJlcGxhY2Ugd2l0aCBuZXcgb25lcwoJdGhhdCB3b3JrIHdpdGggdGhlIG5ldyBjZmcgZGF0YXN0cnVjdHVyZXMgYW5kIHdvcmsgd2l0aCBlZGdlcwoJaW5zdGVhZCBvZiBibG9ja3MuCgpTdW4gT2N0IDE3IDAwOjQ0OjE3IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmggKHN0cnVjdCByZWxvYWQpOiBBZGQgbmV3IGZpZWxkcyAibW9kZSIgYW5kICJucmVncyIuCgkqIHJlbG9hZDEuYzogQ2hhbmdlIGFsbCBvY2N1cnJlbmNlcyBvZiByZWxvYWRfbW9kZSBhbmQgcmVsb2FkX25yZWdzCgl0byByZWZlcmVuY2UgdGhlICJtb2RlIiBhbmQgIm5yZWdzIiBmaWVsZCB3aXRoaW4gc3RydWN0IHJlbG9hZC4KClNhdCBPY3QgMTYgMjE6NTA6MjggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaGFpZmEtc2NoZWQuYyAodHJ1ZV9kZXBlbmRlbmN5X2NhY2hlKTogTmV3LgoJKGFkZF9kZXBlbmRlbmNlKTogVXNlIHRoZSB0cnVlIGRlcGVuZGVuY3kgY2FjaGUgdG8gYXZvaWQgZXhwZW5zaXZlCgl3YWxrcyBkb3duIHRoZSBMT0dfTElOS1MgZGVwZW5kZW5jeSBsaXN0LiAgQWRkIGVudHJpZXMgdG8gdGhlCgljYWNoZSBhcyBuZWNlc3NhcnkuCgkocmVtb3ZlX2RlcGVuZGVuY2UpOiBSZW1vdmUgZW50cmllcyBmcm9tIHRoZSB0cnVlIGRlcGVuZGVuY3kgY2FjaGUKCWFzIG5lZWRlZC4KCShzY2hlZHVsZV9pbnNucyk6IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuZCBmcmVlIHRoZSB0cnVlCglkZXBlbmRlbmN5IGNhY2hlLgoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWR1bGVfaW5zbnMpOiBEbyBub3QgcmVtb3ZlIGludGVyLWJsb2NrCglkZXBlbmRlbmNpZXMgYW55bW9yZS4KClNhdCBPY3QgMTYgMTE6MTk6NTIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYvdC1jeWd3aW4gKHdpbm50Lm8pOiBEZXBlbmQgb24gUlRMX0ggYW5kIFRSRUVfSC4KCSogaTM4Ni90LXdpbm50OiBMaWtld2lzZS4KClNhdCBPY3QgMTYgMTE6MTE6NTQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdnYy1wYWdlLmMgKGluaXRfZ2djKTogV29yayBhcm91bmQgU3VuT1MgdW5hbGlnbmVkIG1tYXAgYnVnLgoKMTk5OS0xMC0xNiAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtaG9sbHN0ZWluQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTEFOR1VBR0VTKTogT21pdCAicHJvdG8iLgoJKGNsZWFuKTogUmVtb3ZlIHN0YWxlIGNvbW1lbnQgYWJvdXQgcmVtb3ZpbmcgdW5wcm90b2l6ZS5jLgoKU2F0IE9jdCAxNiAxMToyOToxNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBwcm90b2l6ZS5jIChzYWZlX3JlYWQsIHNhZmVfd3JpdGUpOiBBdm9pZCB0aGUgZ2NjIGV4dGVuc2lvbiBvZgoJdXNpbmcgYXJpdGhtZXRpYyBvbiB2b2lkIHBvaW50ZXJzLgoKU2F0IE9jdCAxNiAwMjo0ODoyMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoYWlmYS1zY2hlZC5jIChjb21wdXRlX2Jsb2NrX2ZvcndhcmRfZGVwZW5kZW5jaWVzKTogT25seSBjaGVjawoJZm9yIG5vdGVzLCBkZWxldGVkIGluc25zIGFuZCBkdXBsaWNhdGVzIGlmIEVOQUJMRV9DSEVDS0lORyBpcyBkZWZpbmVkLgoKU2F0IE9jdCAxNiAwMDowNzowMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2NzZS5jIChoYXNoX2V4cHJfMSk6IEFkZCBpbiBNRU1fQUxJQVNfU0VULgoJKGV4cHJfZXF1aXZfcCk6IFJlamVjdCBtZW1vcmllcyB3aXRoIGRpZmZlcmVudCBhbGlhcyBzZXRzLgoKRnJpIE9jdCAxNSAxNToxNzoyOSAxOTk5ICBHcmVnIE1jR2FyeSAgPGdrbUBnbnUub3JnPgoKCSogZmxhZ3MuaCAoZmxhZ19ib3VuZHNfY2hlY2ssIGZsYWdfYm91bmRlZF9wb2ludGVycyk6IE5ldyBleHRlcm4gZGVjbHMuCgkqIHRvcGxldi5jIChmbGFnX2JvdW5kc19jaGVjaywgZmxhZ19ib3VuZGVkX3BvaW50ZXJzKTogTmV3IGZsYWdzLgoJKGZfb3B0aW9ucyk6IEFkZCAiYm91bmRlZC1wb2ludGVycyIgYW5kICJib3VuZHMtY2hlY2siIGVudHJpZXMuCgkqIGMtbGFuZy5jIChsYW5nX2luaXRfb3B0aW9ucyk6IFNldCBmbGFnX2JvdW5kc19jaGVjayBhcyAidW5zcGVjaWZpZWQiLgoJKGxhbmdfaW5pdCk6IFNldCBkZWZhdWx0IGZvciBmbGFnX2JvdW5kc19jaGVjayBpZiBzdGlsbCAidW5zcGVjaWZpZWQiLgoKU2F0IE9jdCAxNiAxMzo0MjoyOSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoSEYgbW9kZSBwYXR0ZXJucyk6ICBBZGQgbWlzc2luZyBtb2Rlcy4KClNhdCBPY3QgMTYgMTM6Mzc6NDYgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKG1vdnN0cnFpX3NtYWxsKTogVXRpbGl6ZSBwYXJhbGxlbCBtb3ZlCglpbnN0cnVjdGlvbnMuCgpTYXQgT2N0IDE2IDEzOjI2OjQ3IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kICgqZGJfbm9jbG9iYmVyLAoJKmRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm9fbm9jbG9iYmVyKTogTmV3IHBhdHRlcm5zIGFuZAoJYXNzb2NpYXRlZCBzcGxpdHRlcnMuCgpTYXQgT2N0IDE2IDEzOjEzOjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChwYXJhbGxlbCBpbnN0cnVjdGlvbiBwYXR0ZXJucyk6IFJld29yawoJY29uc3RyYWludHMgdG8ga2VlcCByZWxvYWQgaGFwcHkuCgpTYXQgT2N0IDE2IDEzOjAzOjE2IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kICgqYWJzcWkyX25vY2xvYmJlciwgKm5lZ3FpMl9ub2Nsb2JiZXIsCgkqb25lX2NtcGxxaTJfbm9jbG9iYmVyLCAqc3VicWkzX25vY2xvYmJlciwgKmFuZHFpM18yNTVfbm9jbG9iYmVyLAoJKmFuZHFpM182NTUzNV9ub2Nsb2JiZXIsICphbmRucWkzX25vY2xvYmJlciwgKnhvcnFpM19ub2Nsb2JiZXIpOgoJQWRkIG5ldyBwYXR0ZXJucyBhbmQgYXNzb2NpYXRlZCBwb3N0LXJlbG9hZCBzcGxpdHRlcnMuCgpTYXQgT2N0IDE2IDEyOjQyOjEyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9lbWl0X2xpYmNhbGwpOiBVc2UgZ2djX2FsbG9jX3N0cmluZy4KClNhdCBPY3QgMTYgMTI6MzQ6NDQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X3JwdGJfaW5zZXJ0KTogRW1pdCBycHRzX3RvcCBwYXR0ZXJuCglpZiBhcHByb3ByaWF0ZS4KCSogY29uZmlnL2M0eC9jNHgubWQgKHJwdHNfdG9wKTogTmV3IHBhdHRlcm4gYW5kIHNwbGl0dGVyLgoKU2F0IE9jdCAxNiAxMjoyNjozMCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChzcmNfb3BlcmFuZCk6ICBDaGVjayBTWU1CT0xfUkVGIGFuZCBMQUJFTF9SRUYKCW1lbW9yeSBtb2RlLgoKRnJpIE9jdCAxNSAxNzowMjowOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5jIChtb3ZlX29wZXJhbmQpOiBSZWx5IG9uIG1lbW9yeV9hZGRyZXNzX3AgdG8gZGV0ZXJtaW5lIHRoZQoJdmFsaWRpdHkgb2Ygbm9uLWluZGV4ZWQgbWVtb3J5IGFkZHJlc3Nlcy4KCSogcGEuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQWxsb3cgTE9fU1VNIHdpdGggYSBzeW1ib2xpYwoJb3BlcmFuZCBpbiBERm1vZGUgYW5kIFNGbW9kZSB3aGVuIGdlbmVyYXRpbmcgUEEyLjAgY29kZS4KCkZyaSBPY3QgMTUgMTQ6MjU6MTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBMaW1pdCBsYXN0ICd1JyBjaGFuZ2UgdG8gTEFCRUxfUkVGLgoKRnJpIE9jdCAxNSAxMzo0ODo0NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbWlwcy5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IEZpeCBhcmd1bWVudCB0eXBlcy4KCSogbWlwcy5tZCAoY2FzZXNpKTogVXNlIGVtaXRfanVtcF9pbnNuIGZvciBjYXNlc2lfaW50ZXJuYWwuCgkoY2FzZXNpX2ludGVybmFsKTogV3JpdGUgdG8gdGhlIHNjcmF0Y2ggcmVnaXN0ZXIuCgoxOTk5LTEwLTE1IDExOjE2IC0wNzAwICBaYWNrIFdlaW5iZXJnICA8emFja0BiaXRtb3Zlci5jb20+CgoJKiBjcHBleHAuYyAoY3BwX3BhcnNlX2VzY2FwZSk6IE1ha2Ugc3RhdGljLiAgQ2hhbmdlIHNlY29uZCBhcmcKCXRvIFVfQ0hBUiAqKi4KCShwYXJzZV9jaGFyY29uc3QpOiBEZWxldGUgdW5uZWNlc3NhcnkgY2FzdCB3aGVuIGNhbGxpbmcKCWNwcF9wYXJzZV9lc2NhcGUuCgkoY3BwbGliLmgpOiBLaWxsIHByb3RvdHlwZSBvZiBjcHBfcGFyc2VfZXNjYXBlLgoKRnJpIE9jdCAxNSAxMTowMjo0NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCUJhc2VkIG9uIHBhdGNoIGZyb20gTWljaGFlbCBHc2Nod2luZCA8bWlrZWdAd2F0c29uLmlibS5jb20+OgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBDYXN0IHJldHVybiB2YWx1ZSBvZiBhbGxvY2EuCgkqIGkzNzAvaTM3MC5jOiBJbmNsdWRlIGZ1bmN0aW9uLmggYW5kIHRvcGxldi5oLgoJKGkzNzBfbGFiZWxfc2Nhbik6IFJlbW92ZSBjKysgY29tbWVudGVkIGFib3J0LgoJKiBpMzcwL2kzNzAuaCAoSEFORExFX1BSQUdNQSk6IFRha2VzIHRocmVlIGFyZ3VtZW50cy4KCShBU01fT1VUUFVUX0xBQkVMUkVGKTogRml4IFRPVVBQRVIvZWxzZSBicm9rZW4gMTYgU2VwdC4KCSogaTM3MC94bS1pMzcwLmggKEhPU1RfQklUU19QRVJfTE9OR0xPTkcpOiBEZWZpbmUuCgkqIGkzNzAveG0tbXZzLmgsIGkzNzAveG0tb2UuaDogTGlrZXdpc2UuCgpGcmkgT2N0IDE1IDAzOjAxOjAxIDE5OTkgIExvcmVuIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CgoJKiBjb25maWcvdC1mcmVlYnNkOiBEbyBub3Qgb3ZlcnJpZGUgVVNFUl9ILgoJKiBnaW5jbHVkZS9zdGRkZWYuaDogR2VuZXJhbGl6ZSBjaGVjayBmb3IgX01BQ0hJTkVfQU5TSV9IXy4KCkZyaSBPY3QgMTUgMDI6Mzc6MjggMTk5OSAgQWxhc3RhaXIgSi4gSG91Z2h0b24gPGFqaDhAZG9jLmljLmFjLnVrPgoJCQkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogYy1wYXJzZS5pbiAoY29tcG9uZW50X2RlY2wpOiBTdXBwb3J0IGFub255bW91cyBzdHJ1Y3QvdW5pb24uCgkoJWV4cGVjdCk6IFVwZGF0ZS4KCSogYy1wYXJzZS55OiBSZWdlbmVyYXRlLgoJKiBjLXBhcnNlLmM6IExpa2V3aXNlLgoJKiBvYmpjL29iamMtcGFyc2UueTogTGlrZXdpc2UuCgkqIG9iamMvb2JqYy1wYXJzZS5jOiBMaWtld2lzZS4KCSogYy1kZWNsLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCBzb3J0IHRoZSBmaWVsZHMuCgkoZmllbGRfZGVjbF9jbXApOiBEZWxldGUgdW51c2VkIGZ1bmN0aW9uLgoKRnJpIE9jdCAxNSAwMToyMDo1MiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMubWQgKG1vdnNmX2NvbnN0X2ludHJlZyk6IFJldmVydCBsYXN0IGNvbnN0cmFpbnQgY2hhbmdlLgoJKG1vdmRmX2NvbnN0X2ludHJlZ19zcDMyKTogTGlrZXdpc2UuCgpGcmkgT2N0IDE1IDAxOjQ3OjUxIDE5OTkgIFZsYWRpbWlyIE1ha2Fyb3YgIDx2bWFrYXJvdkBsb29ueS5jeWdudXMuY29tPgoKCSogY3NlLmM6IEluY2x1ZGUgaGFzaHRhYi5oIGluc3RlYWQgb2Ygc3BsYXktdHJlZS5oCgkoc3RydWN0IGNzZV9yZWdfaW5mbyk6IE5vIGxvbmdlciB1c2UgdmFyaWFudCB1bmlvbi4gIEFkZCBuZXcKCWZpZWxkICJyZWdubyIuICBBbGwgcmVmZXJlbmNlcyBjaGFuZ2VkIHRvIGF2b2lkIHVuaW9uLgoJKGNzZV9yZWdfaW5mb191c2VkX2xpc3QsIGNzZV9yZWdfaW5mb191c2VkX2xpc3RfZW5kKTogTmV3IHZhcmlhYmxlcy4KCShmcmVlX2NzZV9yZWdfaW5mbyk6IFJlbW92ZS4KCShoYXNoX2NzZV9yZWdfaW5mbywgY3NlX3JlZ19pbmZvX2VxdWFsX3ApOiBOZXcgZnVuY3Rpb25zLgoJKGdldF9jc2VfcmVnX2luZm8pOiBSZXZhbXAgdG8gdXNlIGV4cGFuZGFibGUgaGFzaCB0YWJsZXMgaW5zdGVhZAoJb2Ygc3BsYXkgdHJlZXMuICBJbml0aWFsaXplIG5ldyBmaWVsZHMgaW4gY3NlX3JlZ19pbmZvIHN0cnVjdHVyZS4KCShuZXdfYmFzaWNfYmxvY2spOiBTaW1pbGFybHkuCgpUaHUgT2N0IDE0IDIzOjUxOjU2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZW5yZWNvZy5jIChtZXNzYWdlX3dpdGhfbGluZSk6IFByb3RvdHlwZS4KCSh2YWxpZGF0ZV9wYXR0ZXJuKTogUGFzcyBhbG9uZyB0aGUgc2V0IGZvciB0aGUgZGVzdCwgbm90IGEgZmxhZy4KCUZpeCBub24tbHZhbHVlIG1lc3NhZ2UuICBEb24ndCB3YXJuIGZvciBWT0lEbW9kZSBTRVRfREVTVCBvZiBDQUxMLgoJQ2hlY2sgZm9yIFBDL0NDMCBhcyBzb3VyY2VzLgoJKG5vZGVzX2lkZW50aWNhbCk6IENoZWNrIGZvciBjaGlsZHJlbiBwb3NpdGlvbiBtYXRjaCBiZWZvcmUKCWFsbG93aW5nIHRoZSBjb21iaW5hdGlvbi4KCgkqIHJ0bC5jIChyZWFkX3J0eCk6IFRyYWNrIGxpbmUgbnVtYmVyIGFjcm9zcyBcXFxuLgoKVGh1IE9jdCAxNCAyMzo1MDoyNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbWlwcy5oIChTUEVDSUFMX01PREVfUFJFRElDQVRFUyk6IE5ldy4KCSogbWlwcy5tZCAoKikgVXNlIG5vbmltbWVkaWF0ZV9vcGVyYW5kIG5vdCBnZW5lcmFsX29wZXJhbmQgZm9yIG91dHB1dHMuCgkobW92ZGkrMSwgbW92c2krMSk6IEFkZCBvdXRwdXQgcmVsb2FkIGNvbnN0cmFpbnQuCgkoY2FzZXNpX2ludGVybmFsKTogTGlrZXdpc2UuICBGaXggY29tbWVudGFyeS4KCShyZXR1cm5faW50ZXJuYWwpOiBVc2UgcG1vZGVfcmVnaXN0ZXJfb3BlcmFuZC4KClRodSBPY3QgMTQgMjM6MTk6MzQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIDE3NTBhLm1kIChtb3ZzdHJxaSk6IEFkZCBtaXNzaW5nIG91dHB1dCByZWxvYWQgY29uc3RyYWludC4KCShjYWxsX3ZhbHVlKTogTGlrZXdpc2UuCgkqIGEyOWsubWQgKGNweHh4IHBhdHRlcm5zKTogQWRkIG1pc3NpbmcgbWF0Y2hfb3BlcmF0b3IgbW9kZS4KCShqbXBmZGVjKTogQWRkIG1pc3NpbmcgaW5vdXQgcmVsb2FkIGNvbnN0cmFpbnQuCgkqIGVseHNpLm1kIChhZGRzaSBwYXR0ZXJucyk6IEFkZCBtaXNzaW5nIG91dHB1dCByZWxvYWQgY29uc3RyYWludC4KCShtb3ZlIGZyb20gc3ApOiBVc2UgQCBhbHRlcm5hdGVzLgoJKGNhbGxfdmFsdWUpOiBObyBjb25zdHJhaW50IG9uIG91dHB1dC4KCSogZnIzMC5tZCAobW92c2lfcG9wKTogQWRkIG1pc3Npbmcgb3V0cHV0IHJlbG9hZCBjb25zdHJhaW50LgoJKG1vdnNmX2NvbnN0YW50X3N0b3JlKTogTGlrZXdpc2UuCgkoc3BsaXRzKTogUmVtb3ZlIGNvbnN0cmFpbnRzLgoJKHN1YnNpMyk6IEFkZCBtaXNzaW5nIG1vZGUuCgkqIGkzNzAubWQgKGNtcHN0cnNpKzEpOiBBZGQgbWlzc2luZyBvdXRwdXQgcmVsb2FkIGNvbnN0cmFpbnQuCgkoY2FsbF92YWx1ZSk6IExpa2V3aXNlLgoJKiBpOTYwLm1kIChjbXBpbmMvY21wZGVjIHBhdHRlcm5zKTogQWRkIGlub3V0IHJlbG9hZCBjb25zdHJhaW50cy4KCSogbTMyci5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgc2V0aF9hZGQzX29wZXJhbmQuCgkqIG0zMnIubWQgKG1vdnNpY2NfaW50ZXJuYWwpOiBBZGQgb3V0cHV0IHJlbG9hZCBjb25zdHJhaW50LgoJKG1vdnN0cnNpX2ludGVybmFsKTogQWRkIGlub3V0IHJlbG9hZCBjb25zdHJhaW50cy4KCSogbTg4ay5oIChyZWdfbmFtZXMpOiBEb24ndCBkZWNsYXJlLgoJKFNQRUNJQUxfTU9ERV9QUkVESUNBVEVTKTogTmV3LgoJKiBtODhrLm1kICgqKTogVXNlIHJlZ2lzdGVyX29wZXJhbmQgbm90IHJlZ19vcl8wX29wZXJhbmQKCW9uIGRlc3RpbmF0aW9ucy4KCSogbW4xMDIwMC5oIChQUkVESUNBVEVfQ09ERVMpOiBOZXcuCgkqIG5zMzJrLm1kIChmZnMgcGF0dGVybik6IEFkZCBvdXRwdXQgcmVsb2FkIGNvbnN0cmFpbnQuCgkqIHBkcDExLm1kIChzb2IgcGF0dGVybik6IEFkZCBpbm91dCByZWxvYWQgY29uc3RyYWludC4KCSogc2gubWQgKHNwbGl0cyk6IFJlbW92ZSBjb25zdHJhaW50cy4KCShpbmRpcmVjdF9qdW1wX3NjcmF0Y2gsIGZwdV9zd2l0Y2gpOiBBZGQgb3V0cHV0IHJlbG9hZCBjb25zdHJhaW50LgoJKiB2ODUwLm1kIChwYXR0ZXJuX2lzX29rX2Zvcl9lcGlsb2d1ZSk6IExpa2V3aXNlLgoJKiB2YXgubWQgKGpnZXF1IHBhdHRlcm4pOiBBZGQgaW5vdXQgcmVsb2FkIGNvbnN0cmFpbnQuCgpGcmkgT2N0IDE1IDAwOjA1OjAwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoZGpncHApOiBSZXZlcnQgcHJldmlvdXMgcGF0Y2guCgkqIGNvbmZpZ3VyZTogUmVidWl0LgoJKiBjb25maWcvaTM4Ni9kamdwcC5oOiBSZXZlcnQgcHJldmlvdXMgcGF0Y2guCgpGcmkgT2N0IDE1IDAwOjAwOjI0IDE5OTkgIExvcmVuIEouIFJpdHRsZSA8bGpyaXR0bGVAYWNtLm9yZz4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWY6IFJlc3RvcmUgcGF0Y2ggbG9zdCBkdXJpbmcgbGFzdCBtZXJnZSBvZgoJIm5vX2JvZ29zaXR5IiBicmFuY2guCgkqIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluY2wueDogUmVidWlsdC4KClRodSBPY3QgMTQgMjM6NTc6NTYgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBmaXhpbmNsdWRlczogQWRkIGEgSFBVWCAxMSBmaXggZm9yIGludHR5cGVzLmguCgkqIGZpeGluYy9pbmNsaGFjay5kZWY6IFNhbWUuCgkqIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluY2wuc2gsIGZpeGluYy9maXhpbmNsLng6IFJlZ2VuZXJhdGUuCgpUaHUgT2N0IDE0IDIyOjUxOjU1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5oIChHT19JRl9MRUdJVElNQVRFX1NJTVBMRV9BRERSRVNTKTogQWNjZXB0IEFERFJFU1NPRgoJYXMgdGhlIGJhc2Ugb2YgYSBQTFVTLgoKRnJpIE9jdCAxNSAxODozNjowNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZDogIERlZmluZSBtb2RlIGZvciByZW1haW5pbmcgdW5zcGVjIG9wZXJhdG9ycy4KCSogY29uZmlnL2M0eC9jNHguYyAoZHN0X29wZXJhbmQpOiAgVXNlIG5vbmltbWVkaWF0ZV9vcGVyYW5kLgoKVGh1IE9jdCAxNCAyMjoxNDoyMyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcGEubWQgKHBvc3Rfc3R3KzEpOiBVc2UgcG1vZGVfcmVnaXN0ZXJfb3BlcmFuZC4KCShkY2FjaGVmbHVzaCwgaWNhY2hlZmx1c2gpOiBMaWtld2lzZS4KCgkqIGkzODYubWQgKG1vdnN0cmljdGhpXzEpOiBBbGxvdyByL3IuCgpUaHUgT2N0IDE0IDE5OjQ0OjA4IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IENvbnZlcnQgKG9yIChub3QgYXJnMCkgKG5vdCBhcmcxKSkKCXRvIChub3QgKGFuZCAoYXJnMCkgKGFyZzEpKSkuIFNpbWlsYXJ5IGZvciBhbmQuCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBNb3ZlIGJpdF9yb3RhdGUgY29kZSB0byB0aGUgRVhQUl9QTFVTIGNhc2UsCglmYWxsdGhyb3VnaCB0byBhc3NvY2lhdGUgY29kZS4KCUNvbnZlcnQgWE9SIHRvIE9SIGluIGNvZGUgbGlrZSAoYSZjMSleKGEmYzIpIHdoZXJlIGMxIGFuZCBjMiBkb24ndCBoYXZlCgliaXRzIGluIGNvbW1vbi4KCgkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfbG9naWNhbCk6IENvbnZlcnQgWE9SIHRvIElPUiBpZiBvcGVyYW5kcyBoYXZlCglubyBiaXRzIGluIGNvbW1vbjsgcmVtb3ZlIFhPUiB0byBST1RBVEUgY29udmVyc2lvbi4KCkZyaSBPY3QgMTUgMTc6NDA6MTEgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoYzR4X3ZhX3N0YXJ0LCBjNHhfdmFfYXJnKTogRGVjbGFyZS4KCkZyaSBPY3QgMTUgMTc6Mjc6MTcgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoZHN0X29wZXJhbmQpOiBOZXcuCgkoUFJFRElDQVRFX0NPREVTKTogVXBkYXRlLgoJKiBjb25maWcvYzR4L2M0eC5oIChkc3Rfb3BlcmFuZCk6IERlY2xhcmUgaXQuCgkqIGNvbmZpZy9jNHgvYzR4Lm1kOiAgRGVmaW5lIG1vZGUgZm9yIGVhY2ggdW5zcGVjIHVzYWdlLgoJKG1vdmUgcGF0dGVybnMpOiAgVXNlIGRzdF9vcGVyYW5kIHByZWRpY2F0ZSBpbnN0ZWFkIG9mIHNyY19vcGVyYW5kLgoJKG1vdnFpX3VwZGF0ZSwgbW92cWZfdXBkYXRlKTogRGVsZXRlLgoKVGh1IE9jdCAxNCAxODo0ODo1NCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVjb2cuYyAocG1vZGVfcmVnaXN0ZXJfb3BlcmFuZCk6IE5ldy4KCSogcmVjb2cuaDogRGVjbGFyZSBpdC4KCSogZ2VucmVjb2cuYyAocHJlZF9jb2Rlcyk6IExpa2V3aXNlLgoJKHNwZWNpYWxfbW9kZV9wcmVkX3RhYmxlKTogTGlrZXdpc2UuCgkodmFsaWRhdGVfcGF0dGVybik6IERvbid0IHdhcm4gbm8gbW9kZSBmb3IgYWRkcmVzc19vcGVyYW5kLgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCkgW0xBQkVMX1JFRl06IE9ubHkgZG8gZnVsbCBzdWJleHByZXNzaW9uCglpZiB0aGUgb3BlcmFuZCBpcyBub3QgaW5zbi1saWtlLgoKVGh1IE9jdCAxNCAxOTozODo0MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgkJCSAgU3lsdmlhbiBQaW9uIDxTeWx2YWluLlBpb25Ac29waGlhLmlucmlhLmZyPgoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogSGFuZGxlIG1vcmUgc2ltcGxpZmljYXRpb25zIGFsbG93ZWQgYnkgSUVFRS4KClRodSBPY3QgMTQgMTc6MzA6MTQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHNwYXJjLm1kICgqKTogVXNlIHtub25pbW1lZGlhdGUscmVnaXN0ZXJ9X29wZXJhbmQgYXMgYXBwcm9wcmlhdGUKCWluc3RlYWQgb2YgZ2VuZXJhbF9vcGVyYW5kIGluIGEgU0VUX0RFU1QuICBVc2UgY29uc3RfZG91YmxlX29wZXJhbmQKCWluc3RlYWQgb2YgYW4gZXhwbGljaXQgdGVzdCBhZ2FpbnN0IENPTlNUX0RPVUJMRS4KCShtb3ZzZl9jb25zdF9sbyk6IEFkZCBtaXNzaW5nIHJlZ2lzdGVyIG1vZGUuCgkoZ290b19oYW5kbGVyX2FuZF9yZXN0b3JlKTogQWRkIGF1eGlsaWFyeSB0ZXN0IGZvciBQbW9kZS4KCShmbHVzaCk6IEFkanVzdCB0byB1c2UgYWRkcmVzc19vcGVyYW5kLgoJKHJldHVybl9zZl9ub19mcHUpOiBBZGQgbWlzc2luZyBvdXRwdXQgY29uc3RyYWludC4KClRodSBPY3QgMTQgMTc6MjE6MjYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5tZCAoY2FsbF92YWx1ZV9pbmRpcmVjdF9haXgzMik6IFVzZSB3aWxkY2FyZCBtYXRjaF9vcGVyYW5kCglmb3IgY2FsbCByZXR1cm4gdmFsdWUuCgkoY2FsbF92YWx1ZV9pbmRpcmVjdF9haXg2NCwgY2FsbF92YWx1ZV9pbmRpcmVjdF9udCk6IExpa2V3aXNlLgoKVGh1IE9jdCAxNCAxMzo1NDoyNSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAobWFpbik6IE9ubHkgd2FybiBhYm91dCBvcHRpb25zIGZvciBvdGhlciBsYW5ndWFnZXMuCgkqIGNvbGxlY3QyLmMgKG1haW4pOiBQYXNzIC13IHRvIHN1Yi1nY2MuCgpUaHUgT2N0IDE0IDE2OjI3OjUwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKHByb3BhZ2F0ZV9ibG9jayk6IEFkZCBjYWxsLWNsb2JiZXJlZCByZWdpc3RlcnMgdG8KCXNpZ25pZmljYW50IHRvby4KCgkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogVXNlIGZyZWVfRVhQUl9MSVNUX2xpc3QgaW5zdGVhZCBvZgoJemFwcGluZyBtZW1fc2V0X2xpc3QuCgkoaW52YWxpZGF0ZV9tZW1zX2Zyb21fYXV0b2luYyk6IFVzZSBmcmVlX0VYUFJfTElTVF9ub2RlLgoJKG1hcmtfc2V0XzEsIG1hcmtfdXNlZF9yZWdzKTogTGlrZXdpc2UuCgpUaHUgT2N0IDE0IDEwOjUxOjQ5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtNjhrLm1kICh6ZXJvX2V4dGVuZHNpZGkyKTogQWRkIG1pc3Npbmcgb3V0cHV0IHJlbG9hZCBjb25zdHJhaW50LgoKV2VkIE9jdCAxMyAwMDowOToxOCAxOTk5ICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CgoJKiBpbnZva2UudGV4aTogTGFiZWwgLVdiYWQtZnVuY3Rpb24tY2FzdCwgLVdtaXNzaW5nLXByb3RvdHlwZXMsCgktV25lc3RlZC1leHRlcm5zLCAtV3N0cmljdC1wcm90b3R5cGVzLCBhbmQgLVd0cmFkaXRpb25hbCBhcyBDIG9ubHkKCW9wdGlvbnMuIEFsc28gYWRkIGEgbmV3IGl0ZW0gIkMtb25seSBXYXJuaW5nIE9wdGlvbnMiIHRvIHRoZQoJb3B0aW9uIHN1bW1hcnkuCgoxOTk5LTEwLTE0ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGxpYmdjYzIuYyAoX19kb19nbG9iYWxfZHRvcnMpOiBQcm90ZWN0IF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvCglmcm9tIG11bHRpcGxlIGNhbGxzLgoKVGh1IE9jdCAxNCAwNDo1NDo1NCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5tZCAoY2FsbCB2YWx1ZSBwYXR0ZXJucyk6IE1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KCShwcm9sb2d1ZV9zZXRfZ290LCBwcm9sb2d1ZV9nZXRfcGMpOiBVc2UgcmVnaXN0ZXJfb3BlcmFuZCBmb3Igb3AgMC4KCjE5OTktMTAtMTQgTWFyayBFbGJyZWNodCA8c25vd2JhbGwzQGJpZ2Zvb3QuY29tPgoKCSogY29uZmlndXJlLmluIChkamdwcCBjb25maWd1cmF0aW9uKTogRGVmaW5lIGV4dHJhX29iamVjdHMuLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZy9pMzg2L2RqZ3BwLmggKENUT1JTX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lLgoJKERUT1JTX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lLgoJKElOSVRfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCgkoRklOSV9TRUNUSU9OX0FTTV9PUCk6IERlZmluZS4KCShEQVRBX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lLgoJKFRFWFRfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCgkoRUhfRlJBTUVfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCgkoTElOS19DT01NQU5EX1NQRUMpOiBSZW1vdmUgLVRkamdwcC5kamwuCgkoU1RBUlRGSUxFX1NQRUMpOiBBZGQgY3J0YmVnaW4uby4KCShFTkRGSUxFX1NQRUMpOiBEZWZpbmUgYW5kIGFkZCBjcnRlbmQuby4gTW92ZSBhcmd1bWVudCAtVGRqZ3BwLmRqbAoJdG8gaGVyZSBmcm9tIExJTktfQ09NTUFORF9TUEVDLgoJKERPX0dMT0JBTF9DVE9SU19CT0RZKTogRGVmaW5lLgoJKENSVFNUVUZGX1VTRV9GSU5JX1NFQ1RJT04pOiBEZWZpbmUKCShIQVNfSU5JVF9TRUNUSU9OKTogRGVsZXRlLgoKVGh1IE9jdCAxNCAwNTowODoxNCAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogTWFrZWZpbGUuaW4gKGFsbC5jcm9zcyk6IERlcGVuZCBvbiB4Y3BwJChleGVleHQpLgoKVGh1IE9jdCAxNCAwNDowMDo0MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcGEuaCAoUFJFRElDQVRFX0NPREVTKTogTmV3LgoKCSogZ2VucmVjb2cuYyAodmFsaWRhdGVfcGF0dGVybik6IENvbmRlbnNlIHRoZSBkZXN0aW5hdGlvbgoJbm9uLWx2YWx1ZSBtZXNzYWdlLgoKVGh1IE9jdCAxNCAwMzoyMzowOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGNhbGwtMSk6IFN1cHBseSBtaXNzaW5nIG1vZGUgZm9yIG9wZXJhdG9yLgoJKCopOiBBZGQgbWlzc2luZyBvdXRwdXQgcmVsb2FkIGNvbnN0cmFpbnRzLiAgUmVtb3ZlIGNvbnN0cmFpbnRzCglmcm9tIGRlZmluZV9zcGxpdHMuCgoJKiBpMzg2LmggKFNQRUNJQUxfTU9ERV9QUkVESUNBVEVTKTogTmV3LgoJKiBpMzg2Lm1kIChtb3ZzdHJpY3RoaV8xKTogVXNlIG5vbmltbWVkaWF0ZV9vcGVyYW5kIGZvciBvcCAwLgoJKG1vdnFpXzEsIG1vdmRpXzEsIG1vdmRpXzIsIHNvbWUgc3BsaXRzKTogTGlrZXdpc2UuCgkoYWRkc2lfbGVhXzMpOiBBZGQgbWlzc2luZyBtb2RlIGZvciBvcCAzLgoJKHByb2xvZ3VlX3NldF9nb3QsIHByb2xvZ3VlX2dldF9wYyk6IEFkZCBtaXNzaW5nIG1vZGVzLgoJKCopIEFkZCBtaXNzaW5nIG91dHB1dCByZWxvYWQgY29uc3RyYWludHMuCgpUaHUgT2N0IDE0IDAzOjU5OjU3IDE5OTkgIFN0ZXBoYW5lIENhcnJleiAgPHN0Y2FycmV6QHdvcmxkbmV0LmZyPgoKCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3VuaW9uKTogVXNlIEhPU1RfV0lERV9JTlQgZm9yIGNvbnN0X3NpemU7CgljaGVjayBmb3IgbWVtYmVyIGJpdC1zaXplIG92ZXJmbG93IGFuZCB1c2UgdmFyX3NpemUgaWYgaXQgb2NjdXJzLgoJKGxheW91dF9yZWNvcmQpOiBVc2UgYml0c2l6ZV9pbnQoKSB0byBkZWZpbmUgdGhlIHR5cGUgc2l6ZSBpbiBiaXRzLgoJTGlrZXdpc2UgZm9yIGNvbXB1dGF0aW9uIGFuZCBhc3NpZ25tZW50IHRvIERFQ0xfRklFTERfQklUUE9TLgoJKGxheW91dF9kZWNsKTogTGlrZXdpc2Ugd2hlbiBhc3NpZ25pbmcgdG8gREVDTF9TSVpFLgoKVGh1IE9jdCAxNCAwMjo1NzowNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VucmVjb2cuYyAodmFsaWRhdGVfcGF0dGVybik6IFR5cG8gbGFzdCBjaGFuZ2UuICBWZXJpZnkKCXRoYXQgb3V0cHV0IG9wZXJhbmRzIGhhdmUgb3V0cHV0IHJlbG9hZHMuCgpUaHUgT2N0IDE0IDAxOjQ5OjU0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZW5yZWNvZy5jIChzcGVjaWFsX21vZGVfcHJlZF90YWJsZSk6IE5ldy4KCShOVU1fU1BFQ0lBTF9NT0RFX1BSRURTKTogTmV3LgoJKGZpbmRfb3BlcmFuZCk6IE5ldy4KCSh2YWxpZGF0ZV9wYXR0ZXJuKTogTmV3IGFyZ3VtZW50IGBpbnNuJy4gIFdhcm4gZm9yIGFzc2lnbm1lbnQgdG8KCWFueSBwcmVkaWNhdGUgYWNjZXB0aW5nIG5vbi1sdmFsdWVzLiAgQ29uZGl0aW9uYWxseSB3YXJuIGZvcgoJbWF0Y2hfb3BlcmFuZCB3aXRob3V0IGEgbW9kZS4gIFRyeSBtdWNoIGhhcmRlciB0byBtYXRjaCBzb3VyY2UKCWFuZCBkZXN0aW5hdGlvbiBtb2RlcyBvbiBhIHNldC4KCSogdG0udGV4aSAoU1BFQ0lBTF9NT0RFX1BSRURJQ0FURVMpOiBEb2N1bWVudC4KClRodSBPY3QgMTQgMDI6NTQ6MTMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogRGV0ZWN0IHJvdGF0ZXMgYnVpbHQgZnJvbSBCSVRfWE9SX0VYUFJzLgoKVGh1IE9jdCAxNCAwMjoxODoxOSAxOTk5ICBNYXJjIEVzcGllIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X2xvZ2ljYWwpOiBSZWNvZ25pemUgeG9yIHBhdHRlcm4gdGhhdCBlbmNvZGVzCglyb3RhdGlvbi4KCldlZCBPY3QgMTMgMjM6MjM6NDUgMTk5OSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogcnM2MDAwLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogVXNlIElOVFZBTCwgbm90IFhJTlQgdG8gYWNjZXNzCglhbGlnbm1lbnQuCgpXZWQgT2N0IDEzIDIxOjQ3OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZ2MtcGFnZS5jIChNQVBfRkFJTEVEKTogUHJvdmlkZSBkZWZhdWx0LgoKV2VkIE9jdCAxMyAyMTo0MTo1OSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMuYyAoc3ltYm9saWNfb3BlcmFuZCk6IFZlcmlmeSBtb2RlOyBkb24ndCBhY2NlcHQgQ09OU1RfRE9VQkxFLgoJKiBzcGFyYy5oIChQUkVESUNBVEVfQ09ERVMpOiBVcGRhdGUuCgpXZWQgT2N0IDEzIDIxOjE4OjE3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChzb21lX25pX29wZXJhbmQpOiBOZXcuCgkqIGFscGhhLXByb3Rvcy5oOiBEZWNsYXJlIGl0LgoJKiBhbHBoYS5oIChQUkVESUNBVEVfQ09ERVMpOiBVcGRhdGUuCgkqIGFscGhhLm1kIChzWGFkZHEgcmVsb2FkIGluc25zKTogVXNlIHNvbWVfbmlfb3BlcmFuZAoJZm9yIFNFVF9ERVNUIGluc3RlYWQgb2Ygc29tZV9vcGVyYW5kLgoKV2VkIE9jdCAxMyAyMTowNDo0NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoJCQkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGdlbnJlY29nLmMgKG1heWJlX2JvdGhfdHJ1ZV8yKTogRG9uJ3QgY29tcGFyZSBtb2RlcyBvZgoJdHdvIERUX3ByZWQgdGVzdHMuCgkocHJvY2Vzc190cmVlKTogRWxpZGUgcGVlcGhvbGUyX2luc25zLiAgSW52b2tlIHNpbXBsaWZ5X3Rlc3RzCglhZnRlciBmaW5kX2FmdGVyd2FyZC4KCShkZWJ1Z19kZWNpc2lvbl8xKTogRHVtcCBuZXh0IGFuZCBhZnRlcndhcmQgY29kZXMuCgpXZWQgT2N0IDEzIDIwOjM1OjE2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBydGwuYyAoZHVtcF9hbmRfYWJvcnQpOiBSZW1vdmUuCgkoZmF0YWxfd2l0aF9maWxlX2FuZF9saW5lKTogTmV3LgoJKGZhdGFsX2V4cGVjdGVkX2NoYXIpOiBOZXcuCgkocmVhZF9ydHhfbGluZW5vLCByZWFkX3J0eF9maWxlbmFtZSk6IE5ldy4KCShyZWFkX3NraXBfc3BhY2VzKTogVHJhY2sgbGluZSBudW1iZXIuCgkocmVhZF9uYW1lKTogVXNlIGZhdGFsX3dpdGhfZmlsZV9hbmRfbGluZS4KCShyZWFkX3J0eCk6IFVzZSBmYXRhbF9leHBlY3RlZF9jaGFyLiAgVHJhY2sgbGluZSBudW1iZXIuCgkqIHJ0bC5oIChyZWFkX3J0eF9maWxlbmFtZSwgcmVhZF9ydHhfbGluZW5vKTogRGVjbGFyZS4KCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBEb24ndCBzcGVjaWFsIGNhc2UgTEFCRUxfUkVGIGFyZ3VtZW50CglpZiBpdCBpc24ndCBhIENPREVfTEFCRUwuCgoJKiBnZW5hdHRyLmMgKG1haW4pOiBTZXQgcmVhZF9ydHhfZmlsZW5hbWUuCgkqIGdlbmF0dHJ0YWIuYyAobWFpbik6IExpa2V3aXNlLgoJKiBnZW5jb2Rlcy5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbmNvbmZpZy5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbmVtaXQuYyAobWFpbik6IExpa2V3aXNlLgoJKiBnZW5leHRyYWN0LmMgKG1haW4pOiBMaWtld2lzZS4KCSogZ2VuZmxhZ3MuYyAobWFpbik6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYyAobWFpbik6IExpa2V3aXNlLgoJKiBnZW5vdXRwdXQuYyAobWFpbik6IExpa2V3aXNlLgoJKiBnZW5wZWVwLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGdlbnJlY29nLmMgKGRlY2lzaW9uX3Rlc3QudS5pbnNuKTogQWRkIGBsaW5lbm8nLgoJKHBhdHRlcm5fbGluZW5vLCBlcnJvcl9jb3VudCk6IE5ldyB2YXJpYWJsZXMuCgkobWVzc2FnZV93aXRoX2xpbmUpOiBOZXcuCgkoYWRkX3RvX3NlcXVlbmNlKTogQnJlYWsgb3V0IGNoZWNraW5nIGNvZGUgdG8gLi4uCgkodmFsaWRhdGVfcGF0dGVybik6IC4uLiBoZXJlLiAgRGV0ZWN0IFNFVF9ERVNUIG1hdGNoaW5nIENPTlNUX0lOVC4KCShtZXJnZV9pbnNuKTogVXNlIG1lc3NhZ2Vfd2l0aF9saW5lLgoJKG1ha2VfaW5zbl9zZXF1ZW5jZSk6IFVzZSB2YWxpZGF0ZV9wYXR0ZXJuLiAgUmVjb3JkIGluc24gbGluZW5vLgoJKG1haW4pOiBTZXQgcmVhZF9ydHhfZmlsZW5hbWUsIHBhdHRlcm5fbGluZW5vLiAgRXhpdCBlYXJseSBvbiBlcnJvci4KCldlZCBPY3QgMTMgMjI6MDE6MzUgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IENsZWFyIHVuaW9uIGlmIGNvbnN0cnVjdG9yIGlzIGVtcHR5LgoKV2VkIE9jdCAxMyAxNToxOTowNCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb25maWcvcnM2MDAwL3N5c3Y0LmggKENDMV9TUEVDKTogRml4IGVycm9ycyBmcm9tIEphbiAxOSBjaGFuZ2UuCglBZGQgIWVuZGlhbiBjaGVja3MuICBDaGFuZ2UgJXsuLi59IHRvICUoLi4uKS4KCldlZCBPY3QgMTMgMTM6MzA6MzQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYubWQgKCphZGRzaTNfY2MpOiBSZW5hbWVkIGZyb20gYWRkY3NpMy4KCSgqYWRkc2kzX2NhcnJ5KTogUmVuYW1lZCBmcm9tIGFkZHhzaTMuCgkoKnN1YnNpM19jYyk6IFJlbmFtZWQgZnJvbSBzdWJjc2kzLgoJKCpzdWJzaTNfY2FycnkpOiBSZW5hbWVkIGZyb20gc3VieHNpMy4KCSgqeG9ycWlfY2NfMSk6IFJlbmFtZWQgZnJvbSB4b3JjcWlfMS4KCSh4b3JxaV9jY19leHRfMSk6IFJlbmFtZWQgZnJvbSB4b3JjcWlfZXh0XzEuCgkqIGkzODYuYyAoaXg4Nl9leHBhbmRfZnBfY29tcGFyZSk6IFVwZGF0ZSBmb3IgeG9ycWlfY2NfZXh0XzEuCgpXZWQgT2N0IDEzIDEzOjEwOjQ2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoZ2djLWNvbW1vbi5vKTogRGVwZW5kIG9uIFJUTF9IIG5vdCBSVExfQkFTRV9ILgoJKGdnYy1zaW1wbGUubywgZ2djLXBhZ2UubywgZ2djLW5vbmUubywgZ2djLWNhbGxiYWNrcy5vKTogTGlrZXdpc2UuCgoxOTk5LTEwLTEzICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogcmVnbW92ZS5jIChvcHRpbWl6ZV9yZWdfY29weV8zKTogTWFrZSBzdXJlIFAgaXMgbm9uLW5pbCBhcyB3ZQoJY2xpbWIgdXAgdGhlIGNoYWluIG9mIGluc25zLgoKV2VkIE9jdCAxMyAxMDoyMDo1OCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VucmVjb2cuYyAod3JpdGVfc3Vicm91dGluZSk6IENhcmVmdWwgZm9yIG51bGwgdHJlZXMuCgkocHJvY2Vzc190cmVlKTogRG9uJ3QgZWxpZGUgZW1wdHkgZnVuY3Rpb25zLgoKV2VkIE9jdCAxMyAxMDowNzo1NCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGdlbnJ0bC5vKTogRGVwZW5kIG9uIGdnYy5oLgoJKiBjb25maWd1cmUuaW4gKHZhbGxvYyk6IFByb2JlIGZvciBpdC4KCSh3aXRoLWdjKTogVXNlIGdnYy1wYWdlIGlmIHZhbGxvYyBwcmVzZW50LgoJKiBnZ2MtY29tbW9uLmMgKGdnY19tYXJrX3J0eF9jaGlsZHJlbik6IFVzZSBnZ2NfbWFya19pZl9nY2FibGUuCgkoZ2djX21hcmtfcnR2ZWNfY2hpbGRyZW4pOiBOZXcgZnJvbSBjb3Jwc2Ugb2YgZ2djX21hcmtfcnR2ZWMuCgkoZ2djX2FsbG9jX3N0cmluZyk6IE1vdmVkIGZyb20gZ2djLXBhZ2UuYy4KCSogZ2djLW5vbmUuYyAoZ2djX2FsbG9jX29iaik6IE5ldy4KCShnZ2NfYWxsb2NfcnR4LCBnZ2NfYWxsb2NfcnR2ZWMpOiBSZW1vdmUuCgkqIGdnYy1wYWdlLmMgKHN5cy9tbWFuLmgpOiBPbmx5IGluY2x1ZGUgaWYgSEFWRV9NTUFQLgoJKHN0cnVjdCBnbG9iYWxzKTogTGlrZXdpc2UgZm9yIGRldl96ZXJvX2ZkLgoJKGluaXRfZ2djKTogTGlrZXdpc2UgZm9yIGl0J3MgaW5pdGlhbGl6YXRpb24uCgkoZ2djX2FsbG9jYXRlZF9wKTogTW92ZSBjYXJlZnVsIGRlcmVmZXJlbmNlIGZyb20gLi4uCgkoZ2djX2xvb2t1cF9wYWdlX3RhYmxlKTogLi4uIGhlcmUuICBEZWxldGUuCgkobG9va3VwX3BhZ2VfdGFibGVfZW50cnkpOiBEb24ndCB1c2UgZ2djX2xvb2t1cF9wYWdlX3RhYmxlLgoJKGFsbG9jX2Fub24pOiBVc2UgdmFsbG9jIGlmIG5vIG1tYXAuCgkocmVsZWFzZV9wYWdlcyk6IFVzZSBmcmVlIGlmIHVzaW5nIHZhbGxvYy4KCShnZ2NfYWxsb2Nfb2JqKTogUmVuYW1lZCBmcm9tIGFsbG9jX29iai4KCShnZ2Nfc2V0X21hcmspOiBSZW5hbWVkIGZyb20gbWFya19vYmouCgkoZ2djX21hcmtfaWZfZ2NhYmxlKTogUmVuYW1lZCBmcm9tIGdnY19tYXJrX3N0cmluZ19pZl9nY2FibGUuCgkoZ2djX2FsbG9jX3J0eCwgZ2djX2FsbG9jX3J0dmVjKTogRGVsZXRlLgoJKGdnY19hbGxvY190cmVlLCBnZ2NfYWxsb2Nfc3RyaW5nLCBnZ2NfYWxsb2MpOiBEZWxldGUuCgkoZ2djX3NldF9tYXJrX3J0eCwgZ2djX3NldF9tYXJrX3J0dmVjKTogRGVsZXRlLgoJKGdnY19zZXRfbWFya190cmVlLCBnZ2NfbWFya19zdHJpbmcsIGdnY19tYXJrKTogRGVsZXRlLgoJKGdnY19jb2xsZWN0KTogVXNlIGZwIHByaW50aW5nIGluc3RlYWQgb2Ygb3VyIG93biByb3VuZGluZy4KCSogZ2djLXNpbXBsZS5jIChJU19NQVJLRUQsIElHTk9SRV9NQVJLKTogRGVsZXRlLgoJKEdHQ19TVFJJTkdfTUFHSUMsIEdHQ19TVFJJTkdfTUFHSUNfTUFSSyk6IERlbGV0ZS4KCShHR0NfQU5ZX01BR0lDLCBHR0NfQU5ZX01BR0lDX01BUkspOiBEZWxldGUuCgkoc3RydWN0IGdnY19ydHgsIHN0cnVjdCBnZ2NfcnR2ZWMsIHN0cnVjdCBnZ2NfdHJlZSk6IERlbGV0ZS4KCShzdHJ1Y3QgZ2djX3N0cmluZywgc3RydWN0IGdnY19hbnkpOiBEZWxldGUuCgkob2Zmc2V0b2YpOiBQcm92aWRlIGRlZmF1bHQgZGVmaW5pdGlvbi4KCShHR0NfQkFMQU5DRSwgR0dDX0FMV0FZU19DT0xMRUNULCBHR0NfQUxXQVlTX1ZFUklGWSk6IE5ldy4KCShQVFJfS0VZKTogTmV3LgoJKHN0cnVjdCBnZ2NfbWVtKTogTmV3LCBmcm9tIGNvcnBzZSBvZiBnZ2NfYW55LgoJKHN0cnVjdCBnZ2Nfc3RhdHVzKTogRGVsZXRlLgoJKGdnY19jaGFpbiwgZ2djX2FsbG9jYXRlZF9zdHJpbmdzLCBnZ2Nfc3RyaW5nc191c2VkKTogRGVsZXRlLgoJKG5fcnR4c19jb2xsZWN0ZWQsIG5fdmVjc19jb2xsZWN0ZWQsIG5fdHJlZXNfY29sbGVjdGVkKTogRGVsZXRlLgoJKG5fc3RyaW5nc19jb2xsZWN0ZWQsIG5fYW55c19jb2xsZWN0ZWQpOiBEZWxldGUuCgkoZ2djX2FsbG9jX3J0eCwgZ2djX2FsbG9jX3J0dmVjLCBnZ2NfYWxsb2NfdHJlZSk6IERlbGV0ZS4KCShnZ2NfYWxsb2Nfc3RyaW5nLCBnZ2NfYWxsb2MpOiBEZWxldGUuCgkoZ2djX2ZyZWVfcnR4LCBnZ2NfZnJlZV9ydHZlYywgZ2djX2ZyZWVfdHJlZSk6IERlbGV0ZS4KCShnZ2NfZnJlZV9zdHJpbmcsIGdnY19mcmVlX2FueSk6IERlbGV0ZS4KCShnZ2Nfc2V0X21hcmtfcnR4LCBnZ2Nfc2V0X21hcmtfcnR2ZWMsIGdnY19zZXRfbWFya190cmVlKTogRGVsZXRlLgoJKGdnY19jb21wYXJlX2FkZHJlc3NlcywgZ2djX21hcmtfc3RyaW5nKTogRGVsZXRlLgoJKGdnY19tYXJrX3N0cmluZ19pZl9nY2FibGUsIGdnY19tYXJrKTogRGVsZXRlLgoJKHNlYXJjaF9kYXRhKTogRGVsZXRlLgoJKHN0cnVjdCBnbG9iYWxzKTogTmV3LgoJKEdHQ19NSU5fRVhQQU5EX0ZPUl9HQywgR0dDX01JTl9MQVNUX0FMTE9DQVRFRCk6IE5ldy4KCSh0cmVlX2luc2VydCwgdHJlZV9sb29rdXApOiBOZXcuCgkoZ2djX2FsbG9jX29iaiwgZ2djX3NldF9tYXJrLCBnZ2NfbWFya19pZl9nY2FibGUpOiBOZXcuCgkoY2xlYXJfbWFya3MsIHN3ZWVwX29ianMpOiBOZXcuCgkoZ2djX2NvbGxlY3QpOiBHdXQuICBVc2UgY2xlYXJfbWFya3MsIHN3ZWVwX29ianMuCgkoaW5pdF9nZ2MpOiBTZXQgYWxsb2NhdGVkX2xhc3RfZ2MuCgkoZ2djX3B1c2hfY29udGV4dCk6IEd1dC4gIFVzZSBHLmNvbnRleHQuCgkoZ2djX3BvcF9jb250ZXh0KTogTGlrZXdpc2UuCgkoZ2djX3BvcF9jb250ZXh0XzEpOiBOZXcuCgkoZGVidWdfZ2djX3RyZWUpOiBOZXcuCgkoZGVidWdfZ2djX2JhbGFuY2UsIHRhbGx5X2xlYXZlcyk6IE5ldy4KCSogZ2djLmggKGdnY19tYXJrX3J0dmVjLCBnZ2NfbWFya19zdHJpbmcsIGdnY19tYXJrKTogUmVtb3ZlIGRlY2wuCgkoZ2djX21hcmtfc3RyaW5nX2lmX2djYWJsZSk6IFJlbW92ZSBkZWNsLgoJKGdnY19tYXJrX3J0eCwgZ2djX21hcmtfdHJlZSk6IFVzZSBnZ2Nfc2V0X21hcmsuCgkoZ2djX21hcmtfcnR2ZWNfY2hpbGRyZW4pOiBOZXcuCgkoZ2djX21hcmtfcnR2ZWMsIGdnY19tYXJrX3N0cmluZywgZ2djX21hcmspOiBOZXcuCgkoZ2djX21hcmtfaWZfZ2NhYmxlKTogTmV3IGRlY2wuCgkoZ2djX2FsbG9jX3J0eCwgZ2djX2FsbG9jX3J0dmVjKTogUmVtb3ZlIGRlY2wuCgkoZ2djX2FsbG9jX3RyZWUsIGdnY19hbGxvYyk6IExpa2V3aXNlLgoJKGdnY19zZXRfbWFya19ydHgsIGdnY19zZXRfbWFya19ydHZlYywgZ2djX3NldF9tYXJrX3RyZWUpOiBMaWtld2lzZS4KCShnZ2NfYWxsb2Nfb2JqKTogTmV3IGRlY2wuCgkoZ2djX2FsbG9jX3J0eCwgZ2djX2FsbG9jX3J0dmVjKTogTmV3IG1hY3Jvcy4KCShnZ2NfYWxsb2NfdHJlZSwgZ2djX2FsbG9jKTogTGlrZXdpc2UuCgkoZ2djX3NldF9tYXJrKTogTmV3IGRlY2wuCgkqIHJ0bC5oIChzdHJ1Y3QgcnR4X2RlZik6IFJlbW92ZSBnY19tYXJrLgoJKHN0cnVjdCBydHZlY19kZWYpOiBMaWtld2lzZS4KCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9jb21tb24pOiBMaWtld2lzZS4KCldlZCBPY3QgMTMgMDE6NDQ6MjkgMTk5OSAgQ2Fyb2wgTGVQYWdlICA8Y2Fyb2xvQGhhbC5jb20+CgoJKiBjb25maWd1cmUuaW4gKHNwYXJjLWhhbC1zb2xhcmlzMiopOiBGaXggeG1fZmlsZSwgeG1fZGVmaW5lcywKCWZsb2F0X2Zvcm1hdCBhbmQgdGhyZWFkX2ZpbGUgZGVmaW5pdGlvbnMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCldlZCBPY3QgMTMgMDk6MjU6MDMgMTk5OSAgTmllbHMgTfZsbGVyIDxuaXNzZUBseXNhdG9yLmxpdS5zZT4KCgkqIGV4dGVuZC50ZXhpIChGdW5jdGlvbiBOYW1lcyk6IERvY3VtZW50IHR5cGVzIG9mIGZ1bmN0aW9uIG5hbWVzLgoKV2VkIE9jdCAxMyAwMDo0NTowNCAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wKTogIFJFTE9BRF9PVEhFUiByZWxvYWRzIHdpdGgKCWFuIGVhcmx5Y2xvYmJlcmVkIG91dHB1dCBjb25mbGljdCB3aXRoIFJFTE9BRF9JTlBVVCByZWxvYWRzLgoKVHVlIE9jdCAxMiAyMzoyODoyOCAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5oIChCT09MX1RZUEVfU0laRSk6IERvbid0IHVzZSBJTlRfVFlQRV9TSVpFIC8gQ0hBUl9UWVBFX1NJWkUuCgpUdWUgT2N0IDEyIDIzOjE5OjMyIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IENoYW5nZSBQUl9SRUcgdG8gUFJfUkVHUy4KClR1ZSBPY3QgMTIgMTc6MDk6MzggMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogY29sbGVjdDIuYyAobWFpbik6IERvIHByZWxpbW5hcnkgbGluayBvbiBBSVggaWYgcmZsYWcuCgpUdWUgT2N0IDEyIDA5OjQ1OjE5IDE5OTkgIEpvbmF0aGFuIExhcm1vdXIgIDxqbGFybW91ckBjeWdudXMuY28udWs+CgoJKiBjb25maWcvcnM2MDAwL2VhYmktY3RvcnMuYyAoX19kb19nbG9iYWxfY3RvcnMpOiBSdW4gdGhyb3VnaAoJX19DVE9SX0xJU1RfXyBpbiBvcHBvc2l0ZSBvcmRlciwgd2hpY2ggaXMgdGhlIGNvcnJlY3Qgb3JkZXIgZm9yIHNvcnRlZAoJY29uc3RydWN0b3JzLgoJKF9fZG9fZ2xvYmFsX2R0b3JzKTogc2ltaWxhcmx5IGZvciBfX0RUT1JfTElTVF9fLgoKRnJpIE9jdCAgOCAxOTo0NjowMyAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgkJCQlEaWVnbyBOb3ZpbGxvIDxkbm92aWxsb0BjeWdudXMuY29tPgoKCSogY29uZmlnL3NoL3NoLmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IEhhbmRsZSBtb3ZlcyBmcm9tIFRfUkVHUyB0bwoJRlBVTF9SRUdTLgoKVHVlIE9jdCAxMiAwNzozODo0MSAxOTk5ICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmNsLyo6IE1lcmdlZCAibm9fYm9nb3NpdHkiIGJyYW5jaAoJKiBmaXhpbmNsL2ZpeGxpYi5oOiBwcm90ZWN0IGFnYWluc3QgZG91Ymx5IGRlZmluaW5nIHRfYm9vbAoJKiBmaXhpbmNsL3NlcnZlci5oOiBwcm90ZWN0IGFnYWluc3QgZG91Ymx5IGRlZmluaW5nIHRfYm9vbAoKTW9uIE9jdCAxMSAyMDoxODo0MSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBnZW5vdXRwdXQuYzogSW5jbHVkZSB0b3BsZXYuaC4KCk1vbiBPY3QgMTEgMTg6NTY6MTQgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlnL3NwYXJjL2xpdGVlbGYuaCAoSU5JVF9TRUNUSU9OX0FTTV9PUCwgRklOSV9TRUNUSU9OX0FTTV9PUCk6CglVbmRlZi4KCSogY29uZmlndXJlLmluIChzcGFyY2xpdGUtKi1lbGYsIHNwYXJjODZ4LSotZWxmKTogRG9uJ3QgdXNlIGxpYmdsb3NzLmguCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCk1vbiBPY3QgMTEgMTY6MDc6NDkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdjc2UuYyAoZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3MpOiBSZXR1cm5zIHZvaWQuCgpNb24gT2N0IDExIDIwOjMxOjUxIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogcnRsLmMgKGNvcHlfcnR4KTogRG9uJ3QgdXNlIGFjY2Vzc29yIG1hY3JvcyB0byBjb3B5IGZpZWxkcy4KCSogZW1pdC1ydGwuYyAoY29weV9pbnNuXzEpOiBMaWtld2lzZS4KCk1vbiBPY3QgMTEgMTM6Mjk6MDYgMTk5OSAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBzX2J1aWxkX3ZhX2xpc3QpOiBDb3JyZWN0CglUUkVFX0NIQUlOIHNldHRpbmcgd2hlbiBoYXJkLWZsb2F0LgoJKG1pcHNfdmFfc3RhcnQpOiBVc2UgY29ycmVjdGVkIHNldHRpbmcuCgkobWlwc192YV9hcmcpOiBMaWtld2lzZS4gIEFsc28gcGFzcyBhIHRyZWUgdG8gYnVpbGQgb2YKCVBPU1RJTkNSRU1FTlRfRVhQUiByYXRoZXIgdGhhbiBhIG5ha2VkICdpbnQnLgoKU3VuIE9jdCAxMCAxODoyNzoyNyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZ2djLmggKGdnY19wdXNoX2NvbnRleHQpOiBGaXggY29tbWVudC4KCShnZ2NfcG9wX2NvbnRleHQpOiBMaWtld2lzZS4KCShtYXJrX3N0cmluZ19pZl9nY2FibGUpOiBMaWtld2lzZS4KCSogZ2djLWNvbW1vbi5jIChnZ2NfbWFya19ydHhfY2hpbGRyZW4pOiBVc2UKCWdnY19tYXJrX3N0cmluZ19pZl9nY2FibGUuCgkqIGdnYy1wYWdlLmMgKGdnY19sb29rdXBfcGFnZV90YWJsZSk6IE5ldyBmdW5jdGlvbi4KCShnZ2NfYWxsb2NhdGVkX3ApOiBMaWtld2lzZS4KCShtYXJrX29iaik6IEZpeCBmb3JtYXR0aW5nLgoJKGdnY19tYXJrX3N0cmluZ19pZl9nY2FibGUpOiBOZXcgZnVuY3Rpb24uCgkqIGdnYy1zaW1wbGUuYyAoZ2djX2FsbG9jYXRlZF9zdHJpbmdzKTogTmV3IHZhcmlhYmxlLgoJKGdnY19zdHJpbmdzX3VzZWQpOiBMaWtld2lzZS4KCShnZ2NfY29tcGFyZV9hZGRyZXNzZXMpOiBOZXcgZnVuY3Rpb24uCgkoZ2djX3BvcF9jb250ZXh0KTogUG9wIHRoZSBgYW55JyBtZW1vcnkgdG9vLgoJKGdnY19tYXJrX3N0cmluZ19pZl9nY2FibGUpOiBOZXcgZnVuY3Rpb24uCgkoZ2djX2NvbGxlY3QpOiBJbml0aWFsaXplIGFuZCB0ZWFyIGRvd24gZ2djX2FsbG9jYXRlZF9zdHJpbmdzLgoKU3VuIE9jdCAxMCAyMDowNToyMSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKG1vdnN0cnNpXz9yZWcpOiBVc2UgcHJlZmVycmVkIHJEL3JTID0gcjUgZm9ybS4KCShzY2MgcGF0dGVybnMpOiBEaXNhYmxlIG1vc3QgU0ltb2RlIHZhcmlhbnRzIGlmIFRBUkdFVF9QT1dFUlBDNjQuCgkqIHJzNjAwMC5jIChleHBhbmRfYmxvY2tfbW92ZSk6IE1hdGNoIG1vdnN0cnNpXz9yZWcgcmVnaXN0ZXIKCWNoYW5nZXMuCgpTdW4gT2N0IDEwIDE2OjM3OjAxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9yZWdfbl9jYWxsc19jcm9zc2VkKTogRGVsZXRlLgoJKHNjaGVkX3JlZ19saXZlX2xlbmd0aCwgc2NoZWRfcmVnX2Jhc2ljX2Jsb2NrKTogRGVsZXRlLgoJKGN1cnJlbnRfYmxvY2tfbnVtLCBiYl9saXZlX3JlZ3MsIG9sZF9saXZlX3JlZ3MpOiBEZWxldGUuCgkoZGVhZF9ub3Rlcywgc3RydWN0IHNvbWV0aW1lcyk6IERlbGV0ZS4KCShzY2hlZF9ub3RlX3NldCwgYmlydGhpbmdfaW5zbl9wKTogRGVsZXRlLgoJKGFkanVzdF9wcmlvcml0eSk6IEd1dCB1c2VsZXNzIHJlZyBsaWZldGltZSBjb2RlLgoJKGNyZWF0ZV9yZWdfZGVhZF9ub3RlLCBhdHRhY2hfZGVhdGhzKTogRGVsZXRlLgoJKGF0dGFjaF9kZWF0aHNfaW5zbiwgbmV3X3NvbWV0aW1lc19saXZlKTogRGVsZXRlLgoJKGZpbmlzaF9zb21ldGltZXNfbGl2ZSk6IERlbGV0ZS4KCShmaW5kX3ByZV9zY2hlZF9saXZlLCBmaW5kX3Bvc3Rfc2NoZWRfbGl2ZSk6IERlbGV0ZS4KCSh1cGRhdGVfcmVnX3VzYWdlKTogRGVsZXRlLgoJKGZpbmRfaW5zbl9yZWdfd2VpZ2h0KTogTmV3LCBmcm9tIGNvcnBzZSBvZiBmaW5kX3ByZV9zY2hlZF9saXZlLgoJKHNjaGVkdWxlX2luc25zKTogRGVsZXRlIHJlZyBsaWZldGltZSBjb2RlLgoJKHNjaGVkX2FuYWx5emUpOiBVc2UgUkVHX1NBVkVfTk9URSB0byBzdHVmZiBOT1RFX0lOU04gbm90ZXMgYXdheS4KCSh1bmxpbmtfb3RoZXJfbm90ZXMpOiBBZGp1c3QgUkVHX05PVEUgY29tbWVudGFyeS4KCShyZWVtaXRfbm90ZXMpOiBVc2UgUkVHX1NBVkVfTk9URS4KCShzY2hlZHVsZV9ibG9jayk6IExpa2V3aXNlLgoJKHNjaGVkdWxlX3JlZ2lvbik6IEFsbG9jYXRlIGJpdG1hcCBvZiBibG9ja3MgaW4gcmVnaW9uLiAgVXNlCgljb3VudF9vcl9yZW1vdmVfZGVhdGhfbm90ZXMuICBVc2UgdXBkYXRlX2xpZmVfaW5mby4KCgkqIHJ0bC5oIChSRUdfU0FWRV9OT1RFKTogTmV3LgoJKiBydGwuYyAocmVnX25vdGVfbmFtZSk6IFVwZGF0ZS4KClN1biBPY3QgMTAgMTY6MTQ6MTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbWJpbmUuYyAocmVmcmVzaF9ibG9ja3MsIG5lZWRfcmVmcmVzaCk6IE5ldy4KCShjb21iaW5lX2luc3RydWN0aW9ucyk6IEFsbG9jYXRlIHJlZnJlc2hfYmxvY2tzLiAgSW52b2tlCgl1cGRhdGVfbGlmZV9pbmZvIGlmIG5lZWRlZC4KCShkaXN0cmlidXRlX25vdGVzKTogTWFyayByZWZyZXNoX2Jsb2NrcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcKCVVTRSBpbnNucy4KCSogZmxvdy5jICh1cGRhdGVfbGlmZV9pbmZvKTogUmVtb3ZlIG5vdGVzIGlmIEdMT0JBTF9STV9OT1RFUy4KCSogYmFzaWNfYmxvY2suaCAoZW51bSB1cGRhdGVfbGlmZV9leHRlbnQpOiBBZGQgR0xPQkFMX1JNX05PVEVTLgoKCSogTWFrZWZpbGUuaW4gKHJlY29nLm8pOiBEZXBlbmQgb24gYmFzaWMtYmxvY2suaC4KClN1biBPY3QgMTAgMTI6MDM6MjEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdlbnJlY29nLmMgKGFkZF90b19zZXF1ZW5jZSk6IFRoaW5rbyBsYXN0IGNoYW5nZTogZGVsZXRlCglzaGFkb3dpbmcgYWxsb3dfY29uc3RfaW50IHZhcmlhYmxlLgoKU3VuIE9jdCAxMCAwODo0MDowMCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcHBpbml0LmM6IFVzZSBIQVZFX0dDQ19WRVJTSU9OIGluc3RlYWQgb2YgZXhwbGljaXRseSB0ZXN0aW5nCglfX0dOVUNfXyBhbmQgX19HTlVDX01JTk9SX18uCgoJKiBnYW5zaWRlY2wuaDogTGlrZXdpc2UuCgoJKiBydGwuYzogTGlrZXdpc2UuCgoJKiBydGwuaDogTGlrZXdpc2UuCgoJKiB0b3BsZXYuaDogTGlrZXdpc2UuCgoJKiB0cmVlLmM6IExpa2V3aXNlLgoKCSogdHJlZS5oOiBMaWtld2lzZS4KCgkqIHZhcnJheS5jOiBMaWtld2lzZS4KCgkqIHZhcnJheS5oOiBMaWtld2lzZS4KClN1biBPY3QgMTAgMTM6Mjg6NDggMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGZpbmRfYW5kX3ZlcmlmeV9sb29wcyk6IFdoZW4gbG9va2luZyBmb3IgYSBCQVJSSUVSLCBkb24ndAoJdXNlIG9uZSBiZWZvcmUgYSBqdW1wIHRhYmxlLgoKCSogcnRsLmRlZiAoQUREUkVTUyk6IENoYW5nZSBkb2N1bWVudGF0aW9uIHRvIG1hdGNoIHJlYWxpdHkuCgkqIG1kLnRleGk6IERvbid0IGRvY3VtZW50IGl0LgoJKiBnbWljcm8ubWQgKGxvYWQgYWRkcmVzcyBwYXR0ZXJuKTogVXNlICdwJyBjb25zdHJhaW50LCBkZWxldGUgdXNlCglvZiBBRERSRVNTIHJ0eC4KCgkqIGVtaXQtcnRsLmMgKGNvcHlfaW5zbl8xKTogTWFrZSBmb3JtYXRfcHRyIGEgY29uc3QgY2hhciAqLgoKU3VuIE9jdCAxMCAwMjo0MTo0MSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VucmVjb2cuYyAoYWRkX3RvX3NlcXVlbmNlKTogTW92ZSBhbGxvd19jb25zdF9pbnQgdGVzdCBvdXRzaWRlCglrbm93biBwcmVkaWNhdGUgYmxvY2s7IGRlZmF1bHQgYWxsb3dfY29uc3RfaW50IHRydWUuCgkoZGVidWdfZGVjaXNpb25fbGlzdCk6IE5ldy4KClN1biBPY3QgMTAgMDA6NDM6MDggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoQ0MxX1NQRUMpOiBUeXBvIC0tIHVzZSBjYzFfY3B1LgoKU2F0IE9jdCAgOSAyMzoyNjo1NSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY3NlLmMgKGdjc2VfbWFpbik6IEF2b2lkIGdsb2JhbCBvcHRpbWl6YXRpb25zIGlmIHdlIGhhdmUgYQoJbGFyZ2UgbnVtYmVyIG9mIGJhc2ljIGJsb2NrcyBhbmQgdGhlIHJhdGlvIG9mIGVkZ2VzIHRvIGJsb2NrcwoJaXMgaGlnaC4KCShkZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrcyk6IExpa2V3aXNlLgoKU2F0IE9jdCAgOSAyMzoxNjowMSAxOTk5ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AbWl0LmVkdT4KCgkqIGMtY29tbW9uLmMgKGNoZWNrX2Zvcm1hdF9pbmZvKTogV2FybiBpZiBmb3JtYXQgc3RyaW5nIGlzbid0IGEKCXN0cmluZyBsaXRlcmFsLgoKU2F0IE9jdCAgOSAyMzowNDowMiAxOTk5ICBKb25hdGhhbiBMYXJtb3VyICA8amxhcm1vdXJAY3lnbnVzLmNvLnVrPgoKCSogY29uZmlndXJlLmluIChhcm0qLSotKik6IERvbid0IGxldCBhdXRvY29uZiByZW1vdmUgYnJhY2tldHMKCSogY29uZmlndXJlOiByZWdlbmVyYXRlCgpTYXQgT2N0ICA5IDEzOjE1OjUzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoZXh0ZW5kc2lkaTIpOiBUdXJuIGludG8gYSBzcGxpdHRlci4gIEFsbG93IGYvZi4KCUlmIFRBUkdFVF9GSVgsIGFsbG93IHIvZi4gIFJlbW92ZSBjdnRscSB1bnNwZWMgcGF0dGVybi4KCShwZWVwaG9sZXMpOiBSZS1lbmFibGUuCgpTYXQgT2N0ICA5IDEyOjE4OjE2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoZmxvdy5vKTogRGVwZW5kIG9uIFRSRUVfSC4KCSogYmFzaWMtYmxvY2suaCAoUkVHX1NFVF9FUVVBTF9QKTogTmV3LgoJKFhPUl9SRUdfU0VUKTogTmV3LgoJKG5fZWRnZXMpOiBEZWNsYXJlLgoJKGZyZWVfcmVnc2V0X3ZlY3Rvcik6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCShmbG93X2RlbGV0ZV9pbnNuX2NoYWluKTogRGVjbGFyZS4KCShlbnVtIHVwZGF0ZV9saWZlX2V4dGVudCk6IE5ldy4KCSh1cGRhdGVfbGlmZV9pbmZvLCBjb3VudF9vcl9yZW1vdmVfZGVhdGhfbm90ZXMpOiBEZWNsYXJlLgoJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpIFtSRUdfREVBRF06IFN0b3Agc2VhcmNoIGF0IGJiLT5oZWFkLgoJVmVyaWZ5IHJlZ2lzdGVyIGxpdmUgYXQgYmItPmdsb2JhbF9saXZlX2F0X3N0YXJ0IGJlZm9yZSBhZGRpbmcgVVNFLgoJKiBmbG93LmMgKEhBVkVfZXBpbG9ndWUsIEhBVkVfcHJvbG9ndWUpOiBQcm92aWRlIGRlZmF1bHQuCgkoQ0xFQU5fQUxMT0NBKTogTmV3LgoJKG5fZWRnZXMpOiBOZXcuCgkoUFJPUF8qKTogTmV3IGZsYWdzLgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBVc2UgYWxsb2NfRVhQUl9MSVNULgoJKGNsZWFyX2VkZ2VzKTogWmVybyBuX2VkZ2VzLgoJKG1ha2VfZWRnZSk6IEluY3JlbWVudCBuX2VkZ2VzLgoJKHNwbGl0X2VkZ2UpOiBEb24ndCBhbGxvY2F0ZSBiYi0+bG9jYWxfc2V0LiAgSW5jcmVtZW50IG5fZWRnZXMuCgkoZmxvd19kZWxldGVfaW5zbl9jaGFpbik6IEV4cG9ydC4KCShkZWxldGVfYmxvY2spOiBEZWNyZW1lbnQgbl9lZGdlcy4KCShtZXJnZV9ibG9ja3Nfbm9tb3ZlKTogTGlrZXdpc2UuCgkobGlmZV9hbmFseXNpcyk6IEdpdmUgbGlmZV9hbmFseXNpc18xIFBST1AgZmxhZ3MuCgkodmVyaWZ5X3dpZGVfcmVnXzEsIHZlcmlmeV93aWRlX3JlZyk6IE5ldy4KCSh2ZXJpZnlfbG9jYWxfbGl2ZV9hdF9zdGFydCk6IE5ldy4KCSh1cGRhdGVfbGlmZV9pbmZvKTogUmV3cml0ZSB0byBjYWxsIGludG8gcHJvcGFnYXRlX2Jsb2NrLgoJKG1hcmtfcmVnKTogTmV3LgoJKG1hcmtfcmVnc19saXZlX2F0X2VuZCk6IEFmdGVyIHJlbG9hZCwgaWYgZXBpbG9ndWUgYXMgcnRsLAoJYWx3YXlzIG1hcmsgc3RhY2sgcG9pbnRlci4gIENvbmRpdGlvbmFsbHkgbWFyayBQSUMgcmVnaXN0ZXIuCglBZnRlciByZWxvYWQsIG1hcmsgY2FsbC1zYXZlZCByZWdpc3RlcnMsIHJldHVybiByZWdzaXRlcnMuCgkobGlmZV9hbmFseXNpc18xKTogQWNjZXB0IFBST1AgZmxhZ3Mgbm90IHJlbW92ZV9kZWFkX2NvZGUuCglDYWxsIG1hcmtfcmVnc19saXZlX2F0X2VuZCBiZWZvcmUgemVyb2luZyByZWdzX2V2ZXJfbGl2ZS4KCVVzZSBjYWxjdWxhdGVfZ2xvYmFsX3JlZ3NfbGl2ZS4gIENvcHkgZ2xvYmFsX2xpdmVfYXRfZW5kIGJlZm9yZQoJY2FsbGluZyBmaW5hbCBwcm9wYWdhdGVfYmxvY2suICBaZXJvIHJlZ19uZXh0X3VzZSBvbiBleGl0LgoJKGNhbGN1bGF0ZV9nbG9iYWxfcmVnc19saXZlKTogTmV3LgoJKGFsbG9jYXRlX2JiX2xpZmVfZGF0YSk6IERvbid0IGFsbG9jYXRlIGJiLT5sb2NhbF9zZXQuCgkoaW5pdF9yZWdzZXRfdmVjdG9yLCBmcmVlX3JlZ3NldF92ZWN0b3IpOiBSZW1vdmUuCgkocHJvcGFnYXRlX2Jsb2NrKTogQWNjZXB0IEZMQUdTIG5vdCBGSU5BTCBvciBSRU1PVkVfREVBRF9DT0RFLgoJVGVzdCBmbGFncyBiZWZvcmUgZXZlcnkgb3BlcmF0aW9uLiAgV2FybiBpZiBwcm9sb2d1ZS9lcGlsb2d1ZSBpbnNuCgl3b3VsZCBoYXZlIGJlZW4gZGVsZXRlZC4KCShtYXJrX3NldF9yZWdzLCBtYXJrX3NldF8xKTogQWNjZXB0IGFuZCB1c2UgRkxBR1MuCglVc2UgYWxsb2NfRVhQUl9MSVNULgoJKG1hcmtfdXNlZF9yZWdzKTogQWNjZXB0IGFuZCB1c2UgRkxBR1MsIG5vdCBGSU5BTC4KCVJlbW92ZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBSRVRVUk4uCgkodHJ5X3ByZV9pbmNyZW1lbnQpOiBVc2UgYWxsb2NfRVhQUl9MSVNULgoJKGR1bXBfZmxvd19pbmZvKTogRHVtcCBuX2VkZ2VzLgoJKHVubGlua19pbnNuX2NoYWluLCBzcGxpdF9oYXJkX3JlZ19ub3Rlcyk6IFJlbW92ZS4KCShtYXliZV9hZGRfZGVhZF9ub3RlLCBtYXliZV9hZGRfZGVhZF9ub3RlX3VzZSk6IFJlbW92ZS4KCShmaW5kX2luc25fd2l0aF9ub3RlLCBuZXdfaW5zbl9kZWFkX25vdGVzKTogUmVtb3ZlLgoJKHVwZGF0ZV9uX3NldHMsIHNldHNfcmVnX29yX3N1YnJlZ18xLCBzZXRzX3JlZ19vcl9zdWJyZWcpOiBSZW1vdmUuCgkobWF5YmVfcmVtb3ZlX2RlYWRfbm90ZXMsIHByZXBlbmRfcmVnX25vdGVzKTogUmVtb3ZlLgoJKHJlcGxhY2VfaW5zbnMpOiBSZW1vdmUuCgkoY291bnRfb3JfcmVtb3ZlX2RlYXRoX25vdGVzKTogTmV3LgoJKHZlcmlmeV9mbG93X2luZm8pOiBBYm9ydCBvbiBlcnJvciBhZnRlciBhbGwgY2hlY2tzLgoJKHJlbW92ZV9lZGdlKTogRGVjcmVtZW50IG5fZWRnZXMuCgkocmVtb3ZlX2Zha2VfZWRnZXMpOiBUd2VhayBmb3JtYXQuCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkdWxlX2luc25zKTogVXNlIHNwbGl0X2FsbF9pbnNucy4KCSogb3V0cHV0LmggKHVwZGF0ZV9saWZlX2luZm8pOiBSZW1vdmUgZGVjbGFyYXRpb24uCgkqIHJlY29nLmMgKHNwbGl0X2FsbF9pbnNucyk6IEZyb20gdGhlIGNvcnBzZSBvZiBzcGxpdF9ibG9ja19pbnNucywKCWRvIHRoZSB3aG9sZSBmdW5jdGlvbiBibG9jayBieSBibG9jay4gIFVzZSB1cGRhdGVfbGlmZV9pbmZvLgoJKHJlY29nX2xhc3RfYWxsb3dlZF9pbnNuKTogTmV3LgoJKHJlY29nX25leHRfaW5zbik6IE1pbmQgaXQuCgkocGVlcGhvbGUyX29wdGltaXplKTogU2V0IGl0LiAgV2FsayBiYWNrd2FyZHMgdGhyb3VnaCBibG9ja3MuCglVc2UgdXBkYXRlX2xpZmVfaW5mby4KCSogcnRsLmggKHVwZGF0ZV9mbG93X2luZm8sIHJlcGxhY2VfaW5zbnMpOiBSZW1vdmUgZGVjbGFyYXRpb25zLgoJKHNwbGl0X2FsbF9pbnNucyk6IERlY2xhcmUuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogVGhyZWFkIHByb2xvZ3VlIGJlZm9yZSBmbG93Mi4KCVVzZSBzcGxpdF9hbGxfaW5zbnMuCgoJKiBpMzg2Lm1kIChvciAtMSBwZWVwMnMpOiBEaXNhYmxlLgoKRnJpIE9jdCAgOCAxNzo0OTowOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5tZCAobW92c3Ryc2krWzEyM10pIDogQ29tYmluZSB0aGVzZSBpbnRvCglhIHNpbmdsZSBwYXR0ZXJuLiAgU2NyYXAgdGhlICdkJyB2ZXJzaW9ucyBhcyB1bm5lY2Vzc2FyeS4KCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKHRhYmxlanVtcF9pbnRlcm5hbDMsdGFibGVqdW1wX21pcHMxNjEsCgl0YWJsZWp1bXBfbWlwczE2Mix0YWJsZWp1bXBfaW50ZXJuYWw0KTogVGhlIG9wZXJhbmRzIHRvIGEKCWxhYmVsX3JlZiBtdXN0IGJlIFZPSURtb2RlLgoKRnJpIE9jdCAgOCAxNjoxMjo0MiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb25maWd1cmUuaW4gKGMtbWJjaGFyKTogQXBwZW5kLCBkb24ndCBvdmVyd3JpdGUsIGBleHRyYV9jX2ZsYWdzJy4KCkZyaSBPY3QgIDggMTE6NTg6MzQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIG1pcHMuYyAobWlwc192YV9hcmcpIFtFQUJJXTogUmV0dXJuIGFkZHJfcnR4LgoKRnJpIE9jdCAgOCAxMTo1ODozNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbGlzdHMuYyAoaW5pdF9FWFBSX0lOU05fTElTVF9jYWNoZSk6IERvbid0IG5lZWQgdG8gemFwIHRoZQoJY2FjaGUgZXZlcnkgZnVuY3Rpb24gaWYgZ2djX3AuCgpGcmkgT2N0ICA4IDE4OjQ2OjExIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSoganVtcC5jIChkdXBsaWNhdGVfbG9vcF9leGl0X3Rlc3QpOiBVc2UgY29weV9pbnNuL2NvcHlfaW5zbl8xCglpbnN0ZWFkIG9mIGNvcHlfcnR4LiAgQWNjZXB0IHNlcXVlbmNlcyB0aGF0IGNvbnRhaW4gYXNtIHN0YXRlbWVudHMuCgkqIGVtaXQtcnRsLmMgKGNvcHlfaW5zbl8xLCBjb3B5X2luc24pOiBOZXcgZnVuY3Rpb25zLgoJKGNvcHlfaW5zbl9zY3JhdGNoX2luLCBjb3B5X2luc25fc2NyYXRjaF9vdXQsIGNvcHlfaW5zbl9uX3NjcmF0Y2hlcywKCW9yaWdfYXNtX29wZXJhbmRzX3ZlY3RvciwgY29weV9hc21fb3BlcmFuZHNfdmVjdG9yLAoJb3JpZ19hc21fY29uc3RyYWludHNfdmVjb3RyLCBjb3B5X2FzbV9jb25zdHJhaW50c192ZWN0b3IpOiBOZXcgc3RhdGljCgl2YXJpYWJsZXMuCgkqIHJ0bC5oIChjb3B5X2luc24sIGNvcHlfaW5zbl8xKTogRGVjbGFyZS4KCkZyaSBPY3QgIDggMTM6MDg6MTIgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGluc24tcmVjb2cubyk6IERlcGVuZCBvbiBoYXJkLXJlZy1zZXQuaCBhbmQgcmVzb3VyY2UuaC4KCgkqIGFscGhhLmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBQYXNzIHRoZSBjb3JyZWN0IG51bWJlciBvZgoJYXJndW1lbnRzIHRvIGBjdXJyZW50X2ZpbGVfZnVuY3Rpb25fb3BlcmFuZCcuCgoJKiBnZW5yZWNvZy5jOiBJbmNsdWRlIGhhcmQtcmVnLXNldC5oIGFuZCByZXNvdXJjZS5oIGluIHRoZQoJZ2VuZXJhdGVkIG91dHB1dCBmaWxlLgoKCSogcmVhbC5jOiBJbmNsdWRlIHRtX3AuaC4KCkZyaSBPY3QgIDggMTg6NDY6MTEgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBpMzg2Lm1kIChwcm9sb2d1ZV9hbGxvY2F0ZV9zdGFjayk6IEFkZCAnPScgY29uc3RyYWludCBsZXR0ZXIgb24KCW91dHB1dCBvcGVyYW5kLgoKVGh1IE9jdCAgNyAyMzowNjo1MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnM2MDAwLm1kIChmaXhfdHJ1bmNkZnNpMl9pbnRlcm5hbCsxKTogRW1pdCBhIGNsb2JiZXIKCWJlZm9yZSB0aGUgZmN0aXd6IGluc24uCgpUaHUgT2N0ICA3IDIyOjUzOjAwIDE5OTkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCQkJICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdHJlZS5jIChtYWtlX2xhbmdfdHlwZV9mbik6IE5ldyBmdW5jdGlvbiBwb2ludGVyLgoJKG1ha2VfbGFuZ190eXBlKTogQ2FsbCBpdC4KCSogdHJlZS5oIChtYWtlX2xhbmdfdHlwZSk6IERlY2xhcmUuCgkobWFrZV9sYW5nX3R5cGVfZm4pOiBMaWtld2lzZS4KCSogcnM2MDAwLmMgKHJzNjAwMF9idWlsZF92YV9saXN0KTogVXNlIG1ha2VfbGFuZ190eXBlLgoKVGh1IE9jdCAgNyAwMDozNjoxNyAxOTk5ICBEaWVnbyBOb3ZpbGxvICA8ZG5vdmlsbG9AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBGb3IgVEFSR0VUX0VMRgoJbWFrZSBzdXJlIHRoYXQgSElHSCBpbnN0cnVjdGlvbnMgYXJlIGNvcGllZCBpbnRvIEJBU0VfUkVHUy4KClRodSBPY3QgIDcgMTc6MDI6MzQgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfZXhwciwgVEFSR0VUX0VYUFIpOiBTZXQgVFJFRV9VU0VEIHNvb25lci4KClRodSBPY3QgIDcgMTc6MDE6NTggMTk5OSAgR3JlZyBNY0dhcnkgIDxna21AZ251Lm9yZz4KCgkqIGMtZGVjbC5jIChmaW5pc2hfc3RydWN0KTogVXNlIHNpbXBsZXIgbWV0aG9kIG9mCglyZW1vdmluZyBlbGVtZW50cyBvZiBhIHNpbmdseS1saW5rZWQgbGlzdC4KClRodSBPY3QgIDcgMTU6MjM6MjggMTk5OSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAocGVlcGhvbGUyJ3MpOiBDb21tZW50IG91dCBwZWVwaG9sZTIncyB0aGF0IGdlbmVyYXRlCglidWdneSBjb2RlLgoKVGh1IE9jdCAgNyAxMjowMDo1MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VucmVjb2cuYyAoYWRkX3RvX3NlcXVlbmNlKTogRGlzYWJsZSBtb2RlIGNoZWNrIGZvcgoJd2lsZGNhcmQgbWF0Y2hlcy4KClRodSBPY3QgIDcgMjA6MTQ6MTYgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBnZ2Mtc2ltcGxlLmMgKGluaXRfZ2djKTogU2V0IGVtcHR5X3N0cmluZy4KClRodSBPY3QgIDcgMDE6MTM6MTUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogRGV0ZWN0IG1tYXAuICBBZGQgLS13aXRoLWdjPWZvbyB0byBzZWxlY3QKCWdhcmJhZ2UgY29sbGVjdG9yOyBkZWZhdWx0IHRvIHBhZ2UgaWYgbW1hcCBhdmFpbGFibGUuCgkqIE1ha2VmaWxlLmluIChHR0MpOiBTdWJzdGl0dXRlLgoKV2VkIE9jdCAgNiAyMzo1NjozMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYy1kZWNsLmMgKGdnY19wKTogRW5hYmxlLgoKV2VkIE9jdCAgNiAxNzoxNzowOCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmbG93LmMgKHZlcmlmeV9mbG93X2luZm8pOiBNYWtlIGl0IGV4dGVybiAmIHVuY29uZGl0aW9uYWxseSBkZWZpbmUuCgoxOTk5LTEwLTA2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogc3BhcmMvc3A4NngtZWxmLmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBtaXNzaW5nIGRvYwoJc3RyaW5nIGZvciBsaXR0bGUtZW5kaWFuLWRhdGEuCgpXZWQgT2N0ICA2IDE2OjEwOjM1IDE5OTkgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogdmFycmF5LmggKFZBUlJBWV9DSEVDSyk6IEZpeCB1cCBhcHByb3ByaWF0ZSByZXZpc2lvbiBjaGVjaywgaW4KCWNhc2Ugc29tZWJvZHkgdHJpZXMgdG8gY29tcGlsZSAtLWVuYWJsZS1jaGVja2luZyBjb2RlIHdpdGggZ2NjCgkxLjM0IG9yIHN1Y2guCgpXZWQgT2N0ICA2IDEyOjIyOjUwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZW5yZWNvZy5jIChhZGRfdG9fc2VxdWVuY2UpOiBWZXJpZnkgb3BlcmFuZCB0byBsYWJlbF9yZWYgaXMKCVZPSURtb2RlLgoKV2VkIE9jdCAgNiAxMDoyMToxNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VuY29uZmlnLmMgKG1haW4pOiBEaXNhYmxlIEhBVkVfY29uZGl0aW9uYWxfYXJpdGhtZXRpYy4KCSoganVtcC5jIChqdW1wX29wdGltaXplXzEpOiBEb2N1bWVudCB3aHkuCgpXZWQgT2N0ICA2IDEwOjQxOjU2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbGxlY3QyLmMgKHNjYW5fcHJvZ19maWxlLCBzY2FuX2xpYnJhcmllcyk6IFByb3RvdHlwZSBmdW5jdGlvbgoJcG9pbnRlcnMgYW5kIGNhc3RzIGZvciBgaW50X2hhbmRsZXInIGFuZCBgcXVpdF9oYW5kbGVyJy4KCgkqIGZsb3cuYyAodmVyaWZ5X2Zsb3dfaW5mbywgc3BsaXRfaGFyZF9yZWdfbm90ZXMsCglmaW5kX2luc25fd2l0aF9ub3RlLCBzZXRzX3JlZ19vcl9zdWJyZWdfMSwgcHJlcGVuZF9yZWdfbm90ZXMsCglyZW1vdmVfZWRnZSwgcmVtb3ZlX2Zha2Vfc3VjY2Vzc29ycyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCSh2ZXJpZnlfZmxvd19pbmZvKTogV3JhcCB3aXRoIG1hY3JvIEVOQUJMRV9DSEVDS0lORy4KCShtYXJrX3NldF8xKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgcmVnbm8nLgoJKHVubGlua19pbnNuX2NoYWluKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBjdXJyJy4KCShyZW1vdmVfZmFrZV9lZGdlcyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBlJywgYHRtcCcgYW5kIGBsYXN0Jy4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogSW5pdGlhbGl6ZSB2YXJpYWJsZQoJYHVucm9sbGVkX2luc25fY29waWVzJy4KCShjbXBfY29tYmluZV9naXZzX3N0YXRzLCBjbXBfcmVjb21iaW5lX2dpdnNfc3RhdHMpOiBBZGQgc3RhdGljCglwcm90b3R5cGVzLiAgQ2hhbmdlIHRoZXNlIGZ1bmN0aW9ucyB0byB0YWtlIGNvbnN0IFBUUiBwYXJhbWV0ZXJzCgl0byBhdm9pZCBwcm90b3R5cGUgY29uZmxpY3Qgd2hlbiB1c2VkIGFzIHRoZSBjb21wYXJzb24gYXJndW1lbnQKCWZvciBxc29ydC4KCShjaGVja19kYnJhX2xvb3ApOiBJbml0aWFsaXplIHZhcmlhYmxlIGBjb21wYXJpc29uX3ZhbCcuCgoJKiByZWxvYWQuYyAoZGVidWdfcmVsb2FkX3RvX3N0cmVhbSwgZGVidWdfcmVsb2FkKTogQWRkIHByb3RvdHlwZXMuCgkoZ2V0X3NlY29uZGFyeV9tZW0pOiBNYXJrIHBhcmFtZXRlciBgeCcgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKGZpbmRfdmFsaWRfY2xhc3MpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBiZXN0X2NsYXNzJy4KCShmaW5kX3JlbG9hZHMpOiBDYWxsIG1lbWNweSwgbm90IGJjb3B5LgoKCSogcmVsb2FkMS5jIChnZW5fbW9kZV9pbnQsIGR1bXBfbmVlZHMpOiBBZGQgcHJvdG90eXBlcy4KCShoYXJkX3JlZ191c2VfY29tcGFyZSk6IERvbid0IG5lZWRsZXNzbHkgY2FzdCBhd2F5IGNvbnN0LgoJKHJlbG9hZF9yZWdfY2xhc3NfbG93ZXIpOiBMaWtld2lzZS4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBJbml0aWFsaXplIHZhcmlhYmxlIGByZWdubycuCgpUdWUgT2N0ICA1IDE2OjM0OjEyIDE5OTkgIFBhdWwgQnVyY2hhcmQgPGJ1cmNoYXJkQHBvYm94LmNvbT4KCgkqIGdnYy1wYWdlLmMgKEdHQ19BTFdBWVNfQ09MTEVDVCk6IEZpeCB0eXBvIHdoZW4gdW5kZWYnaW5nLgoKVHVlIE9jdCAgNSAxNjoxNDo0MCAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGxpYmdjYzEtdGVzdC5jICh0b3BsZXZlbCk6IEluY2x1ZGUgc3RkZGVmLmggdG8gZ2V0IHNpemVfdC4KCSh7LGR9ZGlzY2FyZCk6IEFkZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4gIERlY2xhcmUgcGFyYW1ldGVyIGFzCgl1bnVzZWQuCgkobWFpbl93aXRob3V0X21haW4pOiBFeHBsaWNpdGx5IGRlY2xhcmUgcmV0dXJuIHR5cGUgdG8gYmUgaW50LgoJKG1lbWNweSk6IFByb3Blcmx5IGRlY2xhcmUuCgoJKiBsaWJnY2MyLmMgKHRvcGxldmVsKTogSWYgaW5oaWJpdF9saWJjIGlzIGRlZmluZWQgYW5kIG5vdAoJYnVpbGRpbmcgdGhlIHRyYW1wb2xpbmUgc3VwcG9ydCwgZGVjbGFyZSBtYWxsb2MsIGZyZWUsIGFuZAoJYXRleGl0LgoJKF9fY2xlYXJfY2FjaGUpOiBNYXJrIGFyZ3VtZW50cyBhcyBwb3RlbnRpYWxseSB1bnVzZWQuCgoJKiBmcmFtZS5jICh0b3BsZXZlbCk6IElmIGluaGliaXRfbGliYyBpcyBkZWZpbmVkLCBkZWNsYXJlCgltYWxsb2MgYW5kIGZyZWUuCgpUdWUgT2N0ICA1IDEyOjAwOjMyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKG1ha2VfZWRnZSk6IEFjY2VwdCBhbiBvcHRpb25hbCAyRCBiaXRtYXAgaW4gd2hpY2gKCXRvIGNhY2hlIGVkZ2UgZXhpc3RlbmNlLiAgVXBkYXRlIGFsbCBjYWxsZXJzLgoJKG1ha2VfbGFiZWxfZWRnZSwgbWFrZV9laF9lZGdlKTogUGFzcyB0aHJvdWdoIHRoZSBlZGdlIGNhY2hlLgoJKG1ha2VfZWRnZXMpOiBQcm92aWRlIHRoZSBjYWNoZS4KClR1ZSBPY3QgIDUgMTI6MTY6NDkgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWJjaGFyLmMgKGxpdGVyYWxfY29kZXNldCwgbG9jYWxfbWJ0b3djLCBsb2NhbF9tYmxlbik6IENvbnN0aWZ5CglhIGNoYXIqLgoJKGxvY2FsX21idG93Yyk6IENoYW5nZSB0aGUgdHlwZSBvZiB2YXJpYWJsZSBgaScgZnJvbSBpbnQgdG8gc2l6ZV90LgoKCSogbWJjaGFyLmggKElTU0pJUzEsIElTU0pJUzIpOiBVc2UgcGFyZW5zIGFyb3VuZCAmJiB3aXRoaW4gfHwuCgkobG9jYWxfbWJ0b3djLCBsb2NhbF9tYmxlbiwgbGl0ZXJhbF9jb2Rlc2V0KTogQ29uc3RpZnkgYSBjaGFyKi4KClR1ZSBPY3QgIDUgMTE6MzQ6NTIgMTk5OSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBnZ2MtY29tbW9uLmMgKHRvcGxldmVsKTogUmVvcmRlciBpbmNsdWRlcywgc28gdGhhdCBnZ2MuaCBjb21lcwoJYWZ0ZXIgb3RoZXIgaW5jbHVkZXMgdGhhdCBkZWZpbmUgdGhlIGFwcHJvcHJpYXRlIHR5cGVzLiAgSW5jbHVkZQoJdG1fcC5oIGZvciBnZXR0aW5nIHVzZXIgcHJvdG90eXBlcy4KCSogZ2djLWNhbGxiYWNrcy5jICh0b3BsZXZlbCk6IERpdHRvLgoJKiBnZ2Mtbm9uZS5jICh0b3BsZXZlbCk6IERpdHRvLgoJKiBnY2MtcGFnZS5jICh0b3BsZXZlbCk6IERpdHRvLgoJKiBnZ2Mtc2ltcGxlLmMgKHRvcGxldmVsKTogRGl0dG8uCgpNb24gT2N0ICA0IDE2OjQ4OjE2IDE5OTkgIERpZWdvIE5vdmlsbG8gPGRub3ZpbGxvQGN5Z251cy5jb20+CgkJCSAgSm9uYXRoYW4gTGFybW91ciAgPGpsYXJtb3VyQGN5Z251cy5jby51az4KCgkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19tb3ZlXzJ3b3Jkcyk6IFNwbGl0IGRvdWJsZXMgaWYKCUlTQSA+PSAzLCAhVEFSR0VUXzY0QklULCBhbmQgZGVzdGluYXRpb24gaXMgbm90IGFuIEZQIHJlZ2lzdGVyLgoKTW9uIE9jdCAgNCAyMTo0NzozMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VucmVjb2cuYyAoc3RydWN0IGRlY2lzaW9uX3Rlc3QpOiBOZXcuCgkoc3RydWN0IGRlY2lzaW9uKTogUmVtb3ZlIHRlc3QtcmVsYXRlZCBtZW1iZXJzLCBzb3J0IHRoZSByZXN0IGJ5IHNpemUuCgkoSVNfU1BMSVQpOiBTaW1wbGlmeS4KCShuZXdfZGVjaXNpb24sIG5ld19kZWNpc2lvbl90ZXN0KTogTmV3LgoJKGFkZF90b19zZXF1ZW5jZSk6IFVzZSB0aGVtLiAgTm8gc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJncyBvZgoJbm9uLU1BVENIIGNvZGVzLgoJKG1heWJlX2JvdGhfdHJ1ZSk6IFJlbmFtZWQgZnJvbSBub3RfYm90aF90cnVlOyByZXR1cm4gc2Vuc2UgY2hhbmdlZC4KCShtYXliZV9ib3RoX3RydWVfMSwgbWF5YmVfYm90aF90cnVlXzIpOiBOZXcuICBCcm9rZW4gb3V0CglvZiBtYXliZV9ib3RoX3RydWUgYW5kIGFkanVzdGVkIGZvciBkZWNpc2lvbl90ZXN0LgoJKHBvc2l0aW9uX21lcml0KTogUmVtb3ZlLgoJKG5vZGVzX2lkZW50aWNhbCwgbm9kZXNfaWRlbnRpY2FsXzEpOiBOZXcsIGJyb2tlbiBvdXQgb2YgbWVyZ2VfdHJlZXMuCgkobWVyZ2VfYWNjZXB0X2luc24pOiBOZXcsIGJyb2tlbiBvdXQgb2YgbWVyZ2VfdHJlZXMuCgkobWVyZ2VfdHJlZXMpOiBVc2UgdGhlbS4gIE5vIHNwZWNpYWwgY2FzZSBmb3IgY190ZXN0OyBubyBub2RlCglzcGxpdHRpbmc7IHVzZSB0ZXN0IHR5cGUgaW5zdGVhZCBvZiBwb3NpdGlvbl9tZXJpdC4KCShmYWN0b3JfdGVzdHMpOiBOZXcuCgkoc2ltcGxpZnlfdGVzdHMpOiBOZXcuCgkoYnJlYWtfb3V0X3N1YnJvdXRpbmVzKTogRG9uJ3Qgd3JpdGUgY29kZSBub3cuCgkoZmluZF9hZnRlcndhcmQpOiBOZXcuCgkod3JpdGVfYWZ0ZXJ3YXJkLCB3cml0ZV9zd2l0Y2gsIHdyaXRlX2NvbmQpOiBOZXcuCgkod3JpdGVfYWN0aW9uLCBpc191bmNvbmRpdGlvbmFsKTogTmV3LgoJKHdyaXRlX25vZGUpOiBOZXcuICBVc2UgdGhlbS4KCSh3cml0ZV90cmVlXzEpOiBSZXdyaXRlLiAgVXNlIHRoZSBuZXcgZnVuY3Rpb25zIGFib3ZlLgoJKHdyaXRlX3RyZWUpOiBSZW1vdmUgYWZ0ZXJ3YXJkIHByb2Nlc3NpbmcuCgkod3JpdGVfc3Vicm91dGluZSk6IFNpbXBsaWZ5IGZ1bmN0aW9uIHZhcmlhbnQgZW1pc3Npb24uCgkod3JpdGVfc3Vicm91dGluZXMpOiBOZXcuCgkoc2FtZV9jb2RlcywgY2xlYXJfY29kZXMpOiBSZW1vdmUuCgkoc2FtZV9tb2RlcywgY2xlYXJfbW9kZXMpOiBSZW1vdmUuCgkod3JpdGVfaGVhZGVyKTogTmV3LCBicm9rZW4gb3V0IG9mIG1haW4uCgkobWFrZV9pbnNuX3NlcXVlbmNlKTogVXNlIG5ld19kZWNpc2lvbiBhbmQgbmV3X2RlY2lzaW9uX3Rlc3QuCgkocHJvY2Vzc190cmVlKTogTmV3LCBicm9rZW4gb3V0IG9mIG1haW4uCgkobWFpbik6IEFkanVzdCBmb3IgbWVyZ2VfdHJlZXMgaW50ZXJmYWNlIGNoYW5nZS4KCURvbid0ICNkZWZpbmUgb3BlcmFuZHMgaW4gdGhlIG91dHB1dCBmaWxlLgoJKHJlY29yZF9pbnNuX25hbWUpOiBOZXcsIGJyb2tlbiBvdXQgb2YgbWFrZV9pbnNuX3NlcXVlbmNlLgoJKGRlYnVnX2RlY2lzaW9uXzIsIGRlYnVnX2RlY2lzaW9uXzEsIGRlYnVnX2RlY2lzaW9uXzApOiBOZXcuCgkoZGVidWdfZGVjaXNpb24pOiBOZXcuCgoxOTk5LTEwLTA0IDIxOjU4IC0wNzAwICBaYWNrIFdlaW5iZXJnICA8emFja0BiaXRtb3Zlci5jb20+CgoJKiByZXNvdXJjZS5jIChmaW5kX2ZyZWVfcmVnaXN0ZXIpOiBNYXJrIGNsYXNzX3N0ciBhcmd1bWVudCBjb25zdC4KCSogcmVzb3VyY2UuaDogVXBkYXRlIHByb3RvdHlwZSB0byBtYXRjaC4KCgkqIGkzODYuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGVudHJ5IGZvciBsb25nX21lbW9yeV9vcGVyYW5kLgoJKiBpMzg2Lm1kOiBHaXZlIGFsbCBhbm9ueW1vdXMgaW5zbnMgbmFtZXMuCgpNb24gT2N0ICA0IDIxOjEyOjAyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAobWVyZ2VfYmxvY2tzKTogQXZvaWQgYXNzaW5nIEJBU0lDX0JMT0NLIGZvciBub24tZXhpc3RlbnQKCWJsb2Nrcy4KCk1vbiBPY3QgIDQgMjE6MDE6MzkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChkYnJfc2NoZWRfdGltZSk6IFVuY29uZGl0aW9uYWwuCgkocGVlcGhvbGUyX3RpbWUpOiBOZXcuCgkoY29tcGlsZV9maWxlKTogQWRkIHBhc3MgbnVtYmVycyB0byBhbGwgb2YgdGhlIGR1bXAgZmlsZSBzdWZmaXhlcy4KCUR1bXAgcGVlcGhvbGUyX3RpbWUuICBEb24ndCBkdW1wIHRpbWVzIGZvciBub24tYXBwbGljYWJsZSBwYXNzZXMuCgkocmVzdF9vZl9jb21waWxhdGlvbik6IEFkZCBwYXNzIG51bWJlcnMgdG8gZHVtcCBmaWxlIHN1ZmZpeGVzLgoJQ29uZGl0aW9uYWxpemUgY2FsbHMgdG8gdGhlIHNjaGVkdWxlci4KCSogaW52b2tlLnRleGk6IFVwZGF0ZS4KCk1vbiBPY3QgIDQgMjA6MjU6MTMgMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKG1ha2VfZWRnZXMpOiBGaXggaW5zbiBpdGVyYXRpb24uCgkoZmluZF9iYXNpY19ibG9ja3MpOiBBc3NpZ24gTlVMTF9SVFgsIG5vdCAwLCB0byBydHguCgkoZmluZF9iYXNpY19ibG9ja3NfMSk6IEZpeCBzcGVsbGluZyBtaXN0YWtlLgoKTW9uIE9jdCAgNCAxNjo1NjoxMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZDEpOiBTZXQgVFJFRV9TSURFX0VGRkVDVFMgZm9yIGV4cHJlc3Npb25zIHRoYXQKCWFsd2F5cyBoYXZlIHNpZGUtZWZmZWN0cy4gIFVzZSBtZW1zZXQgbm90IGJ6ZXJvLgoJKG1ha2Vfbm9kZSk6IExpa2V3aXNlLgoKTW9uIE9jdCAgNCAxNjoyMjoyMCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3RtdC5jIChleHBhbmRfYW5vbl91bmlvbl9kZWNsKTogV2hlbiBhbnkgb2YgdGhlIGVsZW1lbnRzIG9mIHRoZQoJdW5pb24gaXMgYWRkcmVzc2FibGUsIHNvIGlzIHRoZSBlbnRpcmUgdW5pb24uCgpNb24gT2N0ICA0IDExOjM4OjMzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzYml0bWFwLmMgKHNiaXRtYXBfb25lcyk6IERvbid0IHNldCB0b28gbWFueSBiaXRzLgoKCSogYml0bWFwLmggKGVudW0gYml0bWFwX2JpdHMpOiBBZGQgQklUTUFQX1hPUi4KCSogYml0bWFwLmMgKGJpdG1hcF9vcGVyYXRpb24pOiBSZXR1cm4gdHJ1ZSBpZmYgVE8gY2hhbmdlZC4KCShiaXRtYXBfZXF1YWxfcCk6IE5ldy4KCShiaXRtYXBfYml0X3ApOiBUaWR5IGFyaXRobWV0aWMuCgkoZGVidWdfYml0bWFwX2ZpbGUpOiBMaWtld2lzZS4KCk1vbiBPY3QgIDQgMTE6Mjg6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogVHVybiBvbiBjc2Vfbm90X2V4cGVjdGVkCgliZWZvcmUgY3NlMiBpbnN0ZWFkIG9mIGFmdGVyLgoKTW9uIE9jdCA0IDA5OjU1OjE3IDE5OTkgIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogbWlwcy5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBMZXQgbGVhc2kvbGlhZGkgaGFuZGxlIGxhcmdlCglyZWdpc3RlciBvZmZzZXRzLgoKTW9uIE9jdCAgNCAwODo1NDoxMiAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBsc2QuaWMudW5pY2FtcC5icj4KCgkqIGNwcGluaXQuYyAoaXNfaWRjaGFyIGluaXRpYWxpemVyKTogTG9vc2VuIHRlc3RzIHRvIGFjY2VwdAoJZ2NjIDIuPjYgYW5kID4yLgoKTW9uIE9jdCAgNCAwMjozMToyMCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogbWlwcy5tZDogRGVmaW5lIGNvbmRpdGlvbmFsIG1vdmUgcGF0dGVybnMgZm9yIGZsb2F0aW5nIHBvaW50CglvcGVyYW5kcyBhbmQgREkgbW9kZSBjb25kaXRpb25zLgoKTW9uIE9jdCAgNCAwMjoxMjo0MSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdHJlZS5jIChtYWtlX25vZGUpOiBTZXQgVFJFRV9TSURFX0VGRkVDVFMgZm9yIGV4cHJlc3Npb25zIHRoYXQKCWFsd2F5cyBoYXZlIHNpZGUtZWZmZWN0cy4KClN1biBPY3QgIDMgMTQ6MTQ6MTYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDIwMC5jIChhc21fZmlsZV9zdGFydCk6IEZpeCB0eXBvLgoKCSogY3BwaW5pdC5jIChpc19pZGNoYXIgaW5pdGlhbGl6ZXIpOiBUaWdodGVuIHRlc3RzIGZvciB3aGVuCgl0byBwdXQgdGhlIHRhYmxlIGludG8gaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCSogZ2djLW5vbmUuYyAoZ2djX2FsbG9jX3J0dmVjKTogQW4gcnR2ZWMgaXMgYW4gYXJyYXkgb2YgcnR4LAoJbm90IGFuIGFycmF5IG9mIHJ0dW5pb24uCgkqIGdjYy1wYWdlLmMgKGdnY19hbGxvY19ydHZlYyk6IFNpbWlsYXJseS4KCSogZ2NjLXNpbXBsZSAoZ2djX2ZyZWVfcnR2ZWMpOiBTaW1pbGFybHkuCgoJKiBnZW5hdHRydGFiLmMgKHNpbXBsaWZ5X2NvbmQpOiBNYWtlIFRFU1RTIGFuIGFycmF5IG9mIHJ0eHMsIGluc3RlYWQKCW9mIHJ0dW5pb25zLgoKCSogbWJjaGFyLmg6IEFkZCBtaXNzaW5nICNlbmRpZi4KCgkqIHQtZnIzMCAoTElCMkZVTkNTX0VYVFJBKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoRlBCSVQsIERQQklUKTogRGVmaW5lLgoKU3VuIE9jdCAgMyAxMjo0NDowNSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUsIGluZGVudF90byk6IFJlbW92ZSByZWR1bmRhbnQgcHJvdG90eXBlcy4KCgkqIHByb2ZpbGUuYyAoaW5zdHJ1bWVudF9hcmNzLCBvdXRwdXRfZ2Nvdl9zdHJpbmcsCgl0YWJsZWp1bXBfZW50cnlfcCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShvdXRwdXRfZ2Nvdl9zdHJpbmcpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogcmVnbW92ZS5jIChyZXBsYWNlbWVudF9xdWFsaXR5LCBmaXh1cF9tYXRjaF8yKTogQWRkIHN0YXRpYwoJcHJvdG90eXBlcy4KCgkqIHJlc291cmNlLmggKHJlZ19kZWFkX3ApOiBBZGQgZXh0ZXJuIHByb3RvdHlwZS4KCgkqIHJ0bC5jICh0cmltX2ZpbGVuYW1lKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBzY2FuLWRlY2xzLmMgKHNraXBfdG9fY2xvc2luZ19icmFjZSk6IExpa2V3aXNlLgoKCSogc3RtdC5jIChleHBhbmRfZGVjbF9jbGVhbnVwX25vX2VoKTogSGlkZSBkZWZpbml0aW9uLgoJKGV4cGFuZF9lbmRfY2FzZSk6IEluaXRpYWxpemUgdmFyaWFibGUgYHJhbmdlJy4KCShlbWl0X2Nhc2Vfbm9kZXMpOiBSZW1vdmUgdW51c2VkIHByb3RvdHlwZSBgcnR4X2ZuJy4KCgkqIHZhcmFzbS5jIChhc21fZW1pdF91bmluaXRpYWxpc2VkKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkoYXNtX2VtaXRfdW5pbml0aWFsaXNlZCwgYXNzZW1ibGVfdmFyaWFibGUpOiBNYXJrIHBhcmFtZXRlciB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKU3VuIE9jdCAgMyAxMjoyNDo1MiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcHBsaWIuYyAoaWZfZGlyZWN0aXZlX25hbWVvKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBjc2UuYyAoY3NlX2luc24pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBwJy4KCgkqIGV4Y2VwdC5jIChjcmVhdGVfcmV0aHJvd19yZWYsIHB1c2hfZW50cnksCglyZWNlaXZlX2V4Y2VwdGlvbl9sYWJlbCwgbmV3X2VoX3JlZ2lvbl9lbnRyeSwgZmluZF9mdW5jX3JlZ2lvbiwKCWNsZWFyX2Z1bmN0aW9uX2VoX3JlZ2lvbiwgcHJvY2Vzc19uZXN0aW5mbyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShnZXRfcmVnX2Zvcl9oYW5kbGVyKTogSGlkZSBkZWZpbml0aW9uLgoJKHByb2Nlc3NfbmVzdGluZm8pOiBJbml0aWFsaXplIHZhcmlhYmxlIGBleHRyYV9oYW5kbGVycycuCgoJKiBleHByLmggKGV4cGFuZF9idWlsdGluX2xvbmdqbXApOiBBZGQgZXh0ZXJuIHByb3RvdHlwZS4KCgkqIGZpbmFsLmMgKGZpbmFsX2FkZHJfdmVjX2FsaWduLCBhbGlnbl9mdXp6KTogQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoKCSogZnVuY3Rpb24uYyAocHJlcGFyZV9mdW5jdGlvbl9zdGFydCk6IExpa2V3aXNlLgoJKHBvcF9mdW5jdGlvbl9jb250ZXh0X2Zyb20pOiBNYXJrIHBhcmFtZXRlciBgY29udGV4dCcgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShwdXNoX3RlbXBfc2xvdHNfZm9yX2Jsb2NrLCBmbHVzaF9hZGRyZXNzb2YpOiBIaWRlIGRlZmluaXRpb24uCgoJKiBnY292LmMgKGluaXRfYXJjLCByZXZlcnNlX2FyY3MsIGNyZWF0ZV9wcm9ncmFtX2Zsb3dfZ3JhcGgsCglzb2x2ZV9wcm9ncmFtX2Zsb3dfZ3JhcGgsIGNhbGN1bGF0ZV9icmFuY2hfcHJvYnMsCglmdW5jdGlvbl9zdW1tYXJ5LCBtYWluLCBmYW5jeV9hYm9ydCk6IEFkZCBwcm90b3R5cGVzLgoKCSogZ2VuLXByb3Rvcy5jIChhZGRfaGFzaCwgcGFyc2VfZm5fcHJvdG8sIG1haW4pOiBMaWtld2lzZS4KCShhZGRfaGFzaCk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBnZ2MtY29tbW9uLmMgKGdnY19tYXJrX3J0eF9wdHIsIGdnY19tYXJrX3RyZWVfcHRyLAoJZ2djX21hcmtfdHJlZV92YXJyYXlfcHRyLCBnZ2NfbWFya190cmVlX2hhc2hfdGFibGVfcHRyLAoJZ2djX21hcmtfc3RyaW5nX3B0ciwgZ2djX21hcmtfdHJlZV9oYXNoX3RhYmxlX2VudHJ5KTogQWRkIHByb3RvdHlwZXMuCgoJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbl9laF9sYWJlbG1hcCk6IExpa2V3aXNlLgoKCSogbGlzdHMuYyAoZnJlZV9saXN0LCB6YXBfbGlzdHMpOiBMaWtld2lzZS4KClN1biBPY3QgIDMgMTI6MDU6MjggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWxpYXMuYyAobm9ubG9jYWxfcmVmZXJlbmNlX3ApOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCgkqIGJpdG1hcC5jIChiaXRtYXBfZWxlbWVudF9hbGxvY2F0ZSk6IFByb3RvdHlwZSBhcmdzIGluIGZ1bmN0aW9uCglwb2ludGVyIGNhc3QuCgoJKiBidWlsdGlucy5jIChzdGFiaWxpemVfdmFfbGlzdCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKGV4cGFuZF9idWlsdGluX3ZhX2FyZyk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBjLWxleC5jIChnZXRjaCwgcHV0X2JhY2ssIGV4dGVuZF90b2tlbl9idWZmZXJfdG8sCglyZWFkX2xpbmVfbnVtYmVyLCB0b2tlbl9nZXRjaCwgdG9rZW5fcHV0X2JhY2spOiBBZGQgc3RhdGljCglwcm90b3R5cGVzLgoKCSogYy1wYXJzZS5ncGVyZiAoaGFzaCwgaXNfcmVzZXJ2ZWRfd29yZCk6IExpa2V3aXNlLgoKCSogY2NjcC5jIChpc19kaXJfc2VwYXJhdG9yKTogTGlrZXdpc2UuCgpTYXQgT2N0ICAyIDE2OjA3OjU2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdyYXBoLmg6IE5ldyBmaWxlIHRvIHByb3RvdHlwZSBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgZ3JhcGguYy4KCgkqIE1ha2VmaWxlLmluIChncmFwaC5vLCB0b3BsZXYubyk6IERlcGVuZCBvbiBncmFwaC5oLgoKCSogZ3JhcGguYzogSW5jbHVkZSBncmFwaC5oLgoKCSogdG9wbGV2LmM6IExpa2V3aXNlLiAgUmVtb3ZlIHJlZHVuZGFudCBwcm90b3R5cGVzLgoKU2F0IE9jdCAgMiAxMToyODozMyAxOTk5ICBLcmlzdGVyIFdhbGZyaWRzc29uIDxjYXRvQGRmLmx0aC5zZT4KCgkqIGludm9rZS50ZXhpOiBSZW1vdmVkIGR1cGxpY2F0ZWQgZGVzY3JpcHRpb24gZm9yIC1RLgoKU2F0IE9jdCAgMiAxMToxNjowMCAxOTk5ICBKaW0gS2luZ2RvbiAgPGh0dHA6Ly9kZXZlbG9wZXIucmVkaGF0LmNvbT4KCgkqIGV4dGVuZC50ZXhpOiBHcmFtbWFyIGZpeCBpbiBfX2V4dGVuc2lvbl9fIHRleHQuCgpTYXQgT2N0ICAyIDExOjA2OjMxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtZC50ZXhpIChkZWZpbmVfcGVlcGhvbGUyKTogTmV3IHNlY3Rpb24uCgpTYXQgT2N0ICAyIDEwOjU3OjU2IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKG1vdj9pIHBhdHRlcm5zKTogRml4IGhhbmRsaW5nIG9mIFRBUkdFVF9VU0VfTU9WMAoJKG1vdiAkLTEgdG8gb3IgcGVlcGhvbGVyKTogRW5hYmxlIGZvciBwZW50aXVtIHdoZW4gb3B0aW1pemluZyBmb3IKCXNwZWVkLgoKU2F0IE9jdCAgMiAxMDo1NToyNSAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBidWlsdGlucy5jIChleHBhbmRfYnVpbHRpbl9zdHJsZW4pOiBGaXggYmVzdCBtb2RlIHNlYXJjaGluZyBsb29wLgoKU2F0IE9jdCAgMiAxMDo1MzoyMiAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2Lm1kIChmZnMgZXhwYW5kZXIpOiBFbWl0IFBlbnRpdW0gZnJpZW5kbHkgY29kZSBmb3IKCVRBUkdFVF9QRU5USVVNLgoKU2F0IE9jdCAgMiAwMjo0ODoyMSAxOTk5ICBNYXJrIFAuIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdHJlZS5jIChidWlsZCk6IERvbid0IGxvb2sgYXQgVFJFRV9TSURFX0VGRkVDVFMgb3IgVFJFRV9SQUlTRVMKCWZvciBub24tdHJlZXMuCgkoYnVpbGQxKTogTGlrZXdpc2UuCgpGcmkgT2N0ICAxIDE4OjAxOjExIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogaTM4NmVsZi5oIChUQVJHRVRfREVGQVVMVCk6IFVzZSBzeW1ib2xpYyBjb25zdGFudHMuCgpGcmkgT2N0ICAxIDEyOjQyOjUzIDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CgoJKiBjb25maWcvbTY4ay9tNjhrLmMgKHVzZV9yZXR1cm5faW5zbik6IFJldHVybiBmYWxzZSBpZiB0aGUgcGljCglyZWdpc3RlciBpcyBpbiB1c2UuCgpGcmkgT2N0ICAxIDEwOjU2OjA2IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogbWQudGV4aSAoTm8gQ29uc3RyYWludHMpOiBEZWxldGUgc2VjdGlvbi4KCSogTWFrZWZpbGUuaW4gKGdlbmF0dHJ0YWIubyk6IERvbid0IGRlcGVuZCBvbiAiaW5zbi1jb25maWcuaCIuCgkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IFdlIGFsd2F5cyBoYXZlIHJlZ2lzdGVyIGNvbnN0cmFpbnRzLgoJKiBnZW5hdHRydGFiLmM6IERvbid0IGluY2x1ZGUgImluc24tY29uZmlnLmgiLgoJKHdyaXRlX2F0dHJfY2FzZSk6IFdlIGFsd2F5cyBoYXZlIHJlZ2lzdGVyIGNvbnN0cmFpbnRzLgoJKiBnZW5jb25maWcuYyAocmVnaXN0ZXJfY29uc3RyYWludF9mbGFnKTogRGVsZXRlLgoJKHdhbGtfaW5zbl9wYXJ0KTogRG9uJ3QgY2hlY2sgd2hldGhlciB3ZSBoYXZlIHJlZ2lzdGVyIGNvbnN0cmFpbnRzLgoJKG1haW4pOiBEb24ndCB3cml0ZSBvdXQgIiNkZWZpbmUgUkVHSVNURVJfQ09OU1RSQUlOVFMiLgoJKiBnZW5vdXRwdXQuYyAoaGF2ZV9jb25zdHJhaW50cyk6IERlbGV0ZS4KCShtYWluKTogRG9uJ3Qgc2V0IGl0LgoJKG91dHB1dF9vcGVyYW5kX2RhdGEpOiBXZSBhbHdheXMgaGF2ZSBjb25zdHJhaW50cy4KCShzY2FuX29wZXJhbmRzKTogTGlrZXdpc2UuCgkoY29tcGFyZV9vcGVyYW5kcyk6IExpa2V3aXNlLgoJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IFdlIGFsd2F5cyBoYXZlIGNvbnN0cmFpbnRzLgoJKHJlcXVpcmVzX2lub3V0KTogQWx3YXlzIGNvbXBpbGUgdGhpcyBmdW5jdGlvbi4KCSogcmVjb2cuYyAoZXh0cmFjdF9pbnNuKTogV2UgYWx3YXlzIGhhdmUgY29uc3RyYWludHMuCgkoY29uc3RyYWluX29wZXJhbmRzLCByZWdfZml0c19jbGFzc19wKTogQWx3YXlzIGNvbXBpbGUgdGhlc2UKCWZ1bmN0aW9ucy4KCSogcmVjb2cuaCAoc3RydWN0IHJlY29nX2RhdGEpOiBEZWxldGUgbm9uLVJFR0lTVEVSX0NPTlNUUkFJTlRTCglmaWVsZHMuCgkoc3RydWN0IGluc25fb3BlcmFuZF9kYXRhKTogTGlrZXdpc2UuCgkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzKTogV2UgYWx3YXlzIGhhdmUgY29uc3RyYWludHMuCgkocmVjb3JkX3JlZ19jbGFzc2VzLCBjb3B5X2Nvc3QsIHJlY29yZF9hZGRyZXNzX3JlZ3MsCglhdXRvX2luY19kZWNfcmVnX3ApOiBBbHdheXMgY29tcGlsZSB0aGVzZSBmdW5jdGlvbnMuCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IFdlIGFsd2F5cyBoYXZlIGNvbnN0cmFpbnRzLgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogTGlrZXdpc2UuCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogTGlrZXdpc2UuCgkocmVsb2FkX2NzZV9zaW1wbGlmeV9vcGVyYW5kcyk6IExpa2V3aXNlLgoJKiBpODYwLmMgKG91dHB1dF9kZWxheV9pbnNuKTogTGlrZXdpc2UuCgpUaHUgU2VwIDMwIDIzOjA0OjQxIDE5OTkgIE1hcmsgUC4gTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBpcmlzNi5oIChCVUlMRF9WQV9MSVNUX1RZUEUpOiBEZWZpbmUuCgpUaHUgU2VwIDMwIDE4OjQ0OjUwIDE5OTkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIHJzNjAwMC5jIChyczYwMDBfYnVpbGRfdmFfbGlzdCk6IENyZWF0ZSBhIFRZUEVfREVDTCBub2RlCglmb3IgdGhlIHZhX2xpc3QgcmVjb3JkLgoKVGh1IFNlcCAzMCAxODozNDo1NCAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2LmMgKGl4ODZfYWRqdXN0X2Nvc3QpOiBJZ25vcmUgZmFsc2UgZWJwIGRlcGVuZGVuY2llcyBpbgoJcHJvbG9ndWVzLgoKVGh1IFNlcCAzMCAxODozMTozNiAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBhbGlhcy5jOiBJbmNsdWRlIGluc24tZmxhZ3MuaC4KCSogTWFrZWZpbGUuaW4gKGFsaWFzLm8pOiBVcGRhdGUuCgpUaHUgU2VwIDMwIDE4OjIxOjMwIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYuYyAoaXg4Nl9leHBhbmRfaW50X21vdmNjKTogQ29udmVydCBMRVUgYW5kIEdUVSBjb21wYXJpc29ucwoJdG8gTFRVIGFuZCBHRVUuICBIYW5kbGUgbW9yZSBjYXNlcyB1c2luZyBzYmIuCgpUaHUgU2VwIDMwIDE4OjE4OjM5IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKHRydW5jYXRleGZkZiBzcGxpdHRlcnMpOiBEbyBub3QgdXNlIHN1YnJlZy4KCShmb3AgWEZtb2RlIHBhdHRlcm5zKTogRml4IG1vZGUgaW4gb3BlcmFuZCB0ZXN0aW5nLgoKVGh1IFNlcCAzMCAxODowNDoxMyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSoganVtcC5jIChqdW1wX29wdGltaXplXzEpOiBBbWVuZCBsYXN0IGNoYW5nZSB0byB0ZXN0IG9ubHkgdGhlCglmb3JtIG9mIHRoZSBvcGVyYW5kLCBub3QgdGhlIGluc24uCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemVfMSkgW2NvbmRpdGlvbmFsX21vdmVdOiBVc2UgZ2VuZXJhbF9vcGVyYW5kCglub3QgcmVnaXN0ZXJfb3BlcmFuZCB0byBkZXRlcm1pbmUgd2hlbiBCIG1heSBuZWVkIHByZWxvYWRpbmcuCgpUaHUgU2VwIDMwIDE3OjM5OjE2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoKik6IFVzZSBub25pbW1lZGlhdGUgbm90IGdlbmVyYWxfb3BlcmFuZCBmb3IgU0VUX0RFU1QuCgkoZmZzZGkyLCBleHR4bCwgaW5zeGgsIG1za3hoKTogQWRkIG1pc3NpbmcgREltb2RlIHRvIFNFVF9TUkMuCgkoY2FsbC12YWx1ZSBwYXR0ZXJucyk6IE1vdmUgdG8gZW5kIG9mIGZpbGUuCgkoKik6IFJlbW92ZSBtb2RlIGZyb20gbGFiZWxfcmVmIGluIChwYykgY29udGV4dC4KCShtb3ZzdHJxaSk6IFVzZSBtZW1vcnkgbm90IGdlbmVyYWxfb3BlcmFuZCBmb3IgQkxLbW9kZSBvcGVyYW5kcy4KCShwcm9sb2d1ZV9zdGFja19wcm9iZV9sb29wLCBidWlsdGluX2xvbmdqbXApOiBBZGQgbWlzc2luZyBtb2RlCgl0byByZWdpc3Rlcl9vcGVyYW5kIG9wZXJhbmRzLgoJKHBlZXAyIHBhdHRlcm5zKTogQ29udmVydCBmcm9tIGNvbW1lbnRlZC1vdXQgcGVlcGhvbGUgcGF0dGVybnMuCgpUaHUgU2VwIDMwIDE0OjM5OjE3IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogdHJlZS5oIChlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uKTogUmVuYW1lIEJVSUxUX0lOX0RXQVJGX1JFR19TSVpFCgl0byBCVUlMVF9JTl9JTklUX0RXQVJGX1JFR19TSVpFUy4KCSogYnVpbHRpbnMuYyAoZXhwYW5kX2J1aWx0aW5zLCBjYXNlIEJVSUxUX0lOX0lOSVRfRFdBUkZfUkVHX1NJWkVTKToKCVJlbmFtZWQgZnJvbSBCVUlMVF9JTl9EV0FSRl9SRUdfU0laRTsgY2FsbAoJZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMuCgkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFJlcGxhY2UgX19idWlsdGluX2R3YXJmX3JlZ19zaXplCgl3aXRoIF9fYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplX3RhYmxlLgoJKiBkd2FyZjJvdXQuYyAoc3RydWN0IHJlZ19zaXplX3JhbmdlKTogRGVsZXRlLgoJKGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9idWlsdGluX2R3YXJmX3JlZ19zaXplKTogRGVsZXRlLgoJKiBleGNlcHQuaCAoZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMpOiBEZWNsYXJlLgoJKGV4cGFuZF9idWlsdGluX2R3YXJmX3JlZ19zaXplKTogRG9uJ3QgZGVjbGFyZS4KCSogbGliZ2NjMi5jIChkd2FyZl9yZWdfc2l6ZV90YWJsZV9pbml0aWFsaXplZCk6IE5ldy4KCShkd2FyZl9yZWdfc2l6ZV90YWJsZSk6IE5ldy4KCShpbml0X3JlZ19zaXplX3RhYmxlKTogTmV3IGZ1bmN0aW9uLgoJKGNvcHlfcmVnKTogVXNlIGR3YXJmX3JlZ19zaXplX3RhYmxlLgoJKGVoX2NvbnRleHRfaW5pdGlhbGl6ZSk6IE1ha2Ugc3VyZSBkd2FyZl9yZWdfc2l6ZV90YWJsZSBpcyBpbml0aWFsaXplZAoJYmVmb3JlIHVzZS4KClRodSBTZXAgMzAgMDU6NDA6MzQgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyA8cmVhcm5zaGFAYXJtLmNvbT4KCgkqIGMtbGFuZy5jIChmaW5pc2hfZmlsZSBjYXNlIG5kZWYgQVNNX09VVFBVVF97Q09OLERFfVNUUlVDVE9SKToKCUNvcnJlY3RseSBidWlsZCBhcmd1bWVudCBsaXN0IHRvIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGZ1bmN0aW9ucy4KClRodSBTZXAgMzAgMDA6MTM6MjcgMTk5OSAgRGlyayBab2xsZXIgIDxkdXpAcnRzZmZtLmNvbT4KCgkqIGMtdHJlZS5oICh3YXJuX2Zsb2F0X2VxdWFsKTogRGVjbGFyZS4KCSogYy1kZWNsLmMgKHdhcm5fZmxvYXRfZXF1YWwpOiBEZWZpbmUuCgkoY19kZWNvZGVfb3B0aW9uKTogUmVjb2duaXplIC1XW25vLV1mbG9hdC1lcXVhbC4KCSogYy10eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wKTogQ29uZGl0aW9uYWxseSB3YXJuCglhYm91dCBlcXVhbGl0eSB0ZXN0cyBvZiBmbG9hdGluZyBwb2ludCB0eXBlcy4KCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuX29wdGlvbnMpOiBBZGQgLVdbbm8tXWZsb2F0LWVxdWFsLgoJKiBpbnZva2UudGV4aTogQWRkIGRvY3MgZm9yIC1XZmxvYXQtZXF1YWwgd2FybmluZy4KCldlZCBTZXAgMjkgMjM6NDM6MzkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaDgzMDAuaCAoSU5JVF9UQVJHRVRfT1BUQUJTKTogVXNlIGluaXRfb25lX29wdGFiIGluc3RlYWQgb2YKCWdlbmVyYXRpbmcgUlRMIGRpcmVjdGx5LgoJKiBtaXBzLmggKElOSVRfVEFSR0VUX09QVEFCUyk6IExpa2V3aXNlLgoJKiBtbjEwMjAwLmggKElOSVRfVEFSR0VUX09QVEFCUyk6IExpa2V3aXNlLgoKCSogZXhwci5oIChpbml0X21vdl9vcHRhYik6IERlbGV0ZSBkZWNsYXJhdGlvbgoKCSogaDgzMDAuYyAoV09SRF9SRUdfVVNFRCk6IFVwZGF0ZSB0byBhdm9pZCB1c2VsZXNzIHJlZ2lzdGVyCglzYXZlcyBpbiBpbnRlcnJ1cHQgZnVuY3Rpb25zIGFuZCBmdW5jdGlvbnMgd2hpY2ggbmV2ZXIgcmV0dXJuLgoKCSogY3NlLmMgKHN0cnVjdCBzZXQpOiBEZWxldGUgaW5uZXJfZGVzdF9sb2MgZmllbGQuCgkoY3NlX2luc24pOiBSZW1vdmUgYXNzaWdubWVudHMgdG8gaW5uZXJfZGVzdF9sb2MgZmllbGQuCgpXZWQgU2VwIDI5IDE2OjA2OjIwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZ2MtcGFnZS5jOiBEb24ndCBpbmNsdWRlIDx1bmlzdGQuaD4gZXRjIHRha2VuIGNhcmUgb2YKCWJ5ICJzeXN0ZW0uaCIuICBJbmNsdWRlIDxzeXMvbW1hbi5oPiBhZnRlcndhcmQuCgpXZWQgU2VwIDI5IDE2OjA1OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByczYwMDAuYyAocnM2MDAwX2VuY29kZV9zZWN0aW9uX2luZm8pOiBJZiBnZ2NfcCwgdXNlCglnZ2NfYWxsb2Nfc3RyaW5nLgoKVHVlIFNlcCAyOCAxNjo0NTo0MCAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiB4Y29mZm91dC5jICh4Y29mZm91dF9kZWNsYXJlX2Z1bmN0aW9uKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIHJzNjAwMC5jIChudW1faW5zbnNfY29uc3RhbnRfd2lkZSk6IFVzZSBUQVJHRVRfUE9XRVJQQzY0IG5vdAoJVEFSR0VUXzY0QklULiAgQ29tcGFyZSBjb25zdGFudCB0byAtMSwgbm90IGJpdCBwYXR0ZXJuLgoJKGVhc3lfZnBfY29uc3RhbnQpOiBVc2UgVEFSR0VUX1BPV0VSUEM2NCBub3QgVEFSR0VUXzY0QklULgoJKGV4cGFuZF9ibG9ja19tb3ZlKTogQWxsb3cgOCBESW1vZGUgbG9hZHMgZm9yIFBvd2VyUEM2NC4gIEZpeAoJZ2VuX21vdnNpIHR5cG9zLgoKVHVlIFNlcCAyOCAxNjo0MzoxNCAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGFkZF9hYnN0cmFjdF9vcmlnaW5fYXR0cmlidXRlKTogQWJvcnQgaWYKCW9yaWdpbl9kaWUgaXMgTlVMTC4KCShnZW5faW5saW5lZF9lbnVtZXJhdGlvbl90eXBlX2RpZSk6IERvIG5vdCBhYm9ydCBpZiB0aGUgdHlwZSBoYXMKCW5vdCBiZWVuIHdyaXRlZW4gb3V0LgoJKGdlbl9pbmxpbmVkX3N0cnVjdHVyZV90eXBlX2RpZSk6IERvIG5vdCBhYm9ydCBpZiB0aGUgdHlwZSBoYXMKCW5vdCBiZWVuIHdyaXRlZW4gb3V0LgoJKGdlbl9pbmxpbmVkX3VuaW9uX3R5cGVfZGllKTogRG8gbm90IGFib3J0IGlmIHRoZSB0eXBlIGhhcwoJbm90IGJlZW4gd3JpdGVlbiBvdXQuCgkoZ2VuX3RhZ2dlZF90eXBlX2luc3RhbnRpYXRpb25fZGllKTogRG8gbm90IGFib3J0IGlmIHRoZSB0eXBlCgloYXMgbm90IGJlZW4gd3JpdHRlbiBvdXQuCgpUdWUgU2VwIDI4IDE0OjMzOjQ3IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSWYgTURfSU5JVF9CVUlMVElOUyBpcyBkZWZpbmVkLAoJY2FsbCBpdC4KCSogcmVnLXN0YWNrLmMgKHN0cmFpZ2h0ZW5fc3RhY2spOiBDb3B5IGhhcmQgcmVnIHNldCB3aXRoCglDT1BZX0hBUkRfUkVHX1NFVC4KClR1ZSBTZXAgMjggMDE6MTE6MDUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGJ1aWx0aW5zLmMgKHN0YWJpbGl6ZV92YV9saXN0KTogU3RhYmlsaXplIGFycmF5IHR5cGUgdmFfbGlzdAoJdG8gYSBwb2ludGVyIHR5cGUsIG5vdCB0aGUgYmFzZSByZWNvcmQgdHlwZS4KCShleHBhbmRfYnVpbHRpbl92YV9jb3B5KTogRGVyZWZlcmVuY2UgdGhlIHBvaW50ZXJzIGV4cGxpY2l0bHk7Cgl1c2UgdGhlIGNvcnJlY3Qgc2l6ZSBmb3IgdGhlIGNvcHkuCgoJKiByczYwMDAuYyAocnM2MDAwX3ZhX3N0YXJ0KTogRGVyZWZlcmVuY2UgdmFsaXN0IHRvIGdldCB0byB0aGUgcmVjb3JkLgoJKHJzNjAwMF92YV9hcmcpOiBMaWtld2lzZS4KCk1vbiBTZXAgMjcgMjM6Mjc6MjEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJ0bC5oIChzdHJ1Y3QgcnR4X2RlZik6IE1vdmUgZ2NfbWFyayB0byBhbGlnbiBtb2RlIGZpZWxkLgoKTW9uIFNlcCAyNyAyMzoyMDoyOSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9kZWNsKTogVXNlIGBiY2xhc3MnLCBub3QgYGNsYXNzJywgaW4gbmFtZSBvZgoJZmllbGQuCgkoREVDTF9CVUlMVF9JTl9DTEFTUyk6IEFkanVzdCBhY2NvcmRpbmdseS4KCk1vbiBTZXAgMjcgMjM6MDM6MTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdnYy1wYWdlLmMgKEdHQ19NSU5fTEFTVF9BTExPQ0FURUQpOiBOZXcuCgkoaW5pdF9nZ2MpOiBVc2UgaXQgaW5zdGVhZCBvZiBhIGNvbnN0YW50LgoJKGdnY19jb2xsZWN0KTogQm91bmQgYWxsb2NhdGVkX2xhc3RfZ2MgYnkgaXQuCgpNb24gU2VwIDI3IDE5OjA2OjA0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeGluYy9maXhpbmMuaXJpeCAoc3RkaW8uaCk6IEhhY2sgc3RkaW8uaCB0byBhdm9pZCBwcm9ibGVtcwoJd2l0aCB2YV9saXN0LgoKTW9uIFNlcCAyNyAxOTo0MDoxNyBDRVNUIDE5OTkJTWFyYyBFc3BpZSA8ZXNwaWVAY3ZzLm9wZW5ic2Qub3JnPgoKCSogY29uZmlndXJlLmluIChtaXBzKmVsLSotb3BlbmJzZCopOiAgRG9uJ3QgZHVwbGljYXRlIGRlZmF1bHQgc2V0dGluZ3MuCgkobWlwcyotKi1vcGVuYnNkKik6ICBMZXQgYmlnIGVuZGlhbiBjb25maWd1cmF0aW9uIGJlIGEgZnJhZ21lbnQuCgkqIGNvbmZpZ3VyZTogIFJlZ2VuLgoJKiBjb25maWcvbWlwcy9vcGVuYnNkLmg6ICBOZXcsIE9wZW5CU0QgbGl0dGxlIGVuZGlhbiB0YXJnZXQuCgkqIGNvbmZpZy9taXBzL29wZW5ic2QtYmUuaDogIE5ldywgT3BlbkJTRCBiaWcgZW5kaWFuIHRhcmdldCBmcmFnbWVudC4KCSogY29uZmlnL21pcHMveG0tb3BlbmJzZC5oOiAgTmV3LCBPcGVuQlNEIGhvc3QuCgpNb24gU2VwIDI3IDEwOjI4OjQ4IDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CgoJKiBjb25maWcvbTY4ay9tNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwKCW91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IFVzZQoJY3VycmVudF9mdW5jdGlvbl91c2VzX3BpY19vZmZzZXRfdGFibGUgaW5zdGVhZCBvZiByZWdzX2V2ZXJfbGl2ZQoJdG8gZGVjaWRlIHdoZXRoZXIgdG8gc2F2ZS9yZXN0b3JlIHBpYyByZWdpc3Rlci4KCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogRG9uJ3QgbW9kaWZ5IHJlZ3NfZXZlcl9saXZlIGFueSBtb3JlLgoKU3VuIFNlcCAyNiAxMDo1NTozNiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIHhfZG9udF9zYXZlX3BlbmRpbmdfc2l6ZXNfcC4KCSogc3Rvci1sYXlvdXQuYyAodmFyaWFibGVfc2l6ZSk6IERvbid0IGFkZCBzaXplcyB0byB0aGUgcGVuZGluZwoJc2l6ZXMgbGlzdCBpZiB4X2RvbnRfc2F2ZV9wZW5kaW5nX3NpemVzX3AgaXMgc2V0LgoKU3VuIFNlcCAyNiAxNjozNjo1MiAxOTk5ICBSb2JlcnQgTGlwZSAgKHJvYmVydGxpcGVAdXNhLm5ldCkKCgkqIGNvbmZpZy9pMzg2L2RndXguaCAoU0VMRUNUX1JUWF9TRUNUSU9OKTogUHJvdmlkZSBkdW1teSBhcmd1bWVudAoJZm9yIHN5bWJvbGljX29wZXJhbmQoKS4KCSogY29uZmlnL2kzODYvc2NvNS5oIChTRUxFQ1RfUlRYX1NFQ1RJT04pOiBMaWtld2lzZS4KClN1biBTZXAgMjYgMDc6Mzc6MTEgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29tYmluZS5jIChnZW5fcnR4X2NvbWJpbmUpOiBBZGQgbWlzc2luZyBjYWxsIHRvIHZhX2VuZCgpLgoKCSogZmluYWwuYyAoYXNtX2ZwcmludGYpOiBMaWtld2lzZS4KCgkqIGdlbmF0dHJ0YWIuYyAoYXR0cl9ydHgpOiBMaWtld2lzZS4KClNhdCBTZXAgMjUgMTM6MTE6MDcgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3NlLmM6IFVwZGF0ZSBjb21tZW50cy4KCShjc2VfaW5zbik6IFdoZW4gY29udmVydGluZyBhIGNvbmRpdGlvbmFsL2NvbXB1dGVkIGp1bXAgaW50bwoJYW4gdW5jb25kaXRpb25hbCBqdW1wLCBhbHdheXMgbWFrZSBzdXJlIGEgQkFSUklFUiBpbW1lZGlhdGVseQoJZm9sbG93cyB0aGUgY29udmVydGVkIGp1bXAuICBEbyBub3QgZGVsZXRlIHVucmVhY2hhYmxlIGNvZGUuCgkoY3NlX2Jhc2ljX2Jsb2NrKTogRG8gbm90IGRlbGV0ZSB1bnJlYWNoYWJsZSBjb2RlLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IE1vdmUgY2FsbCB0bwoJZGVsZXRlX3RyaXZpYWxseV9kZWFkX2luc25zIGFmdGVyIHRoZSBjb25kaXRpb25hbCBjYWxsIHRvCglqdW1wX29wdGltaXplLgoKU2F0IFNlcCAyNSAwOTowMzoxNyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb2xsZWN0Mi5jIChtYWtlX3RlbXBfZmlsZSk6IERvbid0IHByb3RvdHlwZS4KCgkqIGdjYy5jIChtYWtlX3RlbXBfZmlsZSk6IExpa2V3aXNlLgoKCSogbWlwcy5jIChtaXBzX21ha2VfdGVtcF9maWxlKTogUmVuYW1lZCBmcm9tIGBtYWtlX3RlbXBfZmlsZScuCgpTYXQgU2VwIDI1IDEzOjQyOjE1IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiB2YXJhc20uYyAoYXNtX2VtaXRfdW5pbml0aWFsaXNlZCk6IE5ldyBmdW5jdGlvbjogR2VuZXJhdGUKCXRoZSBhc3NlbWJsZXIgc3RhdGVtZW50cyBuZWNlc3NhcnkgdG8gZGVjbGFyZSBhbiB1bmluaXRpYWxpemVkCgl2YXJpYWJsZS4KCShBU01fRU1JVF9MT0NBTCk6IE5ldyBtYWNybzogRW1pdCBhIGxvY2FsLCB1bmluaXRpYWxpemVkCgl2YXJpYWJsZS4KCShBU01fRU1JVF9CU1MpOiBOZXcgbWFjcm86IEVtaXQgYW4gZW50cnkgaW4gdGhlIGJzcyBzZWN0aW9uLgoJKEFTTV9FTUlUX0NPTU1PTik6IE5ldyBtYWNybzogRW1pdCBhbiBlbnRyeSBpbiB0aGUgY29tbW9uCglzZWN0aW9uLgoJKGFzc2VtYmxlX3ZhcmlhYmxlKTogVXNlIGFzbV9lbWl0X3VuaW5pdGlhbGlzZWQgdG8gZW1pdCBhbgoJdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCkZyaSBTZXAgMjQgMTc6MTA6NTYgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfY29tcGFyaXNvbik6IENvcGUgd2l0aCBkb3duc2hpZnRpbmcgYSAzMiBiaXQKCWNvbnN0YW50IG9uIGEgNjQgYml0IGhvc3QuICBQYXRjaCBzdXBwbGllZCBieSBHZW9mZnJleSBLZWF0aW5nCgk8Z2VvZmZrQGN5Z251cy5jb20+LgoKRnJpIFNlcCAyNCAxMDo0ODoxMCAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGJ1aWx0aW5zLmMgKGV4cGFuZF9idWlsdGluKTogVXNlIE1EX0VYUEFORF9CVUlMVElOIGlmIGRlZmluZWQuCgkqIGMtY29tbW9uLmggKGJ1aWx0aW5fZnVuY3Rpb24pOiBEb24ndCBkZWNsYXJlLgoKCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFVzZSBERUNMX0JVSUxUX0lOX0NMQVNTIHJhdGhlciB0aGFuCglERUNMX0JVSUxUX0lOLgoJKHB1c2hkZWNsKTogTGlrZXdpc2UuCgkoZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCShidWlsdGluX2Z1bmN0aW9uKTogTmV3IGFyZyBDTEFTUy4gIEFyZyBGVU5DVElPTl9DT0RFIG5vdyBvZiB0eXBlCglpbnQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJU2V0IHRoZSBidWlsdGluJ3MgREVDTF9CVUlMVF9JTl9DTEFTUy4KCSogdHJlZS5oIChlbnVtIGJ1aWx0X2luX2NsYXNzKTogTmV3LgoJKGVudW0gYnVpbHRfaW5fZnVuY3Rpb24pOiBEZWxldGUgTk9UX0JVSUxUX0lOLgoJKERFQ0xfRlVOQ1RJT05fQ09ERSk6IFRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIHRyZWVfZGVjbCBpcyBub3cKCWluIGEgdW5pb24uCgkoREVDTF9TRVRfRlVOQ1RJT05fQ09ERSk6IExpa2V3aXNlLgoJKERFQ0xfQlVJTFRfSU5fQ0xBU1MpOiBOZXcgbWFjcm8uCgkoREVDTF9CVUlMVF9JTik6IFVzZSBERUNMX0JVSUxUX0lOX0NMQVNTLgoJKHN0cnVjdCB0cmVlX2RlY2wpOiBTcGxpdCBidWlsdGluIGZ1bmN0aW9uIGNvZGUgZmllbGQgaW50byBhCglzdHJ1Y3QuCgkoYnVpbHRpbl9mdW5jdGlvbik6IERlY2xhcmUuCgpGcmkgU2VwIDI0IDAxOjQ1OjA1IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBvcHRhYnMuYyAoaW5pdF90cmFwcyk6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgoKRnJpIFNlcCAyNCAwMToxMDoxMSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbik6IFVwZGF0ZSBjb21tZW50LgoKRnJpIFNlcCAyNCAxMTo1NzowNiAxOTk5ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9lbGYuaCAoQVNNX09VVFBVVF9BTElHTkVEX0JTUyk6IFB1dCB0aGUgc3ltYm9sCglpbiAuc2JzcyBpZiBhcHByb3ByaWF0ZS4KCShFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyk6IEFkZCBzYnNzLgoJKFNCU1NfU0VDVElPTl9BU01fT1ApOiBOZXcgbWFjcm8uCgkqIGNvbmZpZy9taXBzL2xpbnV4LmggKEVYVFJBX1NFQ1RJT05fRlVOQ1RJT05TKTogQWRkIHNic3MuCgkoRVhUUkFfU0VDVElPTlMpOiBBZGQgaW5fc2Jzcy4KCSogY29uZmlnL21pcHMvbWlwcy5oOiBQcm90b3R5cGUgc2Jzc19zZWN0aW9uLgoKVGh1IFNlcCAyMyAxODoxODo1NSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3RtdC5jIChleHBhbmRfc3RhcnRfYmluZGluZ3MpOiBEb24ndCBhbGxvdyBjbGVhbnVwIGluc3RydWN0aW9ucwoJdG8gZGlzYXBwZWFyLgoKVGh1IFNlcCAyMyAxODowNzowMSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogb3B0YWJzLmMgKGluaXRfdHJhcHMpOiBSZWdpc3RlciB0cmFwX3J0eCBhcyBhIEdDIHJvb3QuCgpUaHUgU2VwIDIzIDE3OjQxOjQ3IDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGxzZC5pYy51bmljYW1wLmJyPgoKCSogY29uZmlnL21pcHMvbWlwcy5jIChmdW5jdGlvbl9hcmdfcGFzc19ieV9yZWZlcmVuY2UpOiBEZWZpbmUKCXVuY29uZGl0aW9uYWxseSwgc2luY2UgaXQncyBjYWxsZWQgdW5jb25kaXRpb25hbGx5LgoKVGh1IFNlcCAyMyAxMzo0MDowMiAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBBZGQgLWZzaG9ydC13Y2hhci4KCSogYy1kZWNsLmMgKGNfZGVjb2RlX29wdGlvbik6IExpa2V3aXNlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSWYgLWZzaG9ydC13Y2hhciwgdXNlICdzaG9ydCB1bnNpZ25lZCBpbnQnCglmb3Igd2NoYXJfdC4KCSogYy1jb21tb24uYywgYy1sZXguYzogR2V0IFdDSEFSX1RZUEVfU0laRSBmcm9tIHdjaGFyX3R5cGVfbm9kZS4KCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogSWYgLWZzaG9ydC13Y2hhciwKCW92ZXJyaWRlIF9fV0NIQVJfVFlQRV9fLgoJKiB0bS50ZXhpIChDIERpYWxlY3QgT3B0aW9ucyk6IEFkZCAtZnNob3J0LXdjaGFyLgoKCSogZHdhcmYyb3V0LmMgKG91dHB1dF9hcmFuZ2VzKTogVXNlIERXX0FUX2xvY2F0aW9uIHRvIGZpbmQgdGhlCglzeW1ib2wgZm9yIGEgdmFyaWFibGUuCgoJKiBjcHBsaWIuaCAoQ1BQX1BSRVBST0NFU1NFRCk6IE5ldyBtYWNyby4KCSogY3BwbGliLmMgKGhhbmRsZV9kaXJlY3RpdmUpOiBEb24ndCBjb21wbGFpbiBhYm91dCBgIyBOVU1CRVInIGlmCgl3ZSdyZSBzZWVpbmcgdGhpcyBpbnB1dCBmb3IgYSBzZWNvbmQgdGltZS4KClRodSBTZXAgMjMgMTI6NTQ6NDkgMTk5OSAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGVtaXQtcnRsLmMgKGluaXRfZW1pdF9vbmNlKTogSW5pdGlhbGl6ZSBtb2RlcyBmaXJzdC4KClN1biBTZXAgMTkgMDE6MjM6MjMgMTk5OSAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNvbmZpZy9pMzg2L2kzODYuYyAocGljX2xhYmVsX25hbWUpOiBDaGFuZ2UgdG8gY2hhciBwb2ludGVyLgoJKGdsb2JhbF9vZmZzZXRfdGFibGUpOiBOZXcgdmFyaWFibGUuCgkobG9hZF9waWNfcmVnaXN0ZXIpOiBGaWxsIGdsb2JhbF9vZmZzZXRfdGFibGUgaWYgaXQgaGFzbid0CglhbHJlYWR5IGJlZW4gZG9uZS4gIEFsbG9jYXRlIHBpY19sYWJlbF9uYW1lIGR5bmFtaWNhbGx5LgoJKiBnZ2MuaCAoZW1wdHlfc3RyaW5nKTogTmV3IHZhcmlhYmxlLgoJKiBnZ2Mtc2ltcGxlLmMgKGVtcHR5X3N0cmluZyk6IExpa2V3aXNlLgoJKGluaXRfZ2djKTogQWxsb2NhdGUgZW1wdHlfc3RyaW5nIGFuZCBhZGQgYXMgcm9vdC4KCSogc3RtdC5jIChkaWdpdF9zdHJpbmdzKTogTmV3IHZhcmlhYmxlLgoJKGluaXRfc3RtdCk6IEFkZCBsYXN0X2Jsb2NrX2VuZF9ub3RlIGFzIHJvb3QuICBBbGxvY2F0ZSBhbmQKCWluaXRpYWxpemUgZGlnaXRfc3RyaW5ncy4KCShleHBhbmRfYXNtX29wZXJhbmRzKTogVXNlIGVtcHR5X3N0cmluZyBpbnN0ZWFkIG9mIHN0cmluZwoJY29uc3RhbnQuICBVc2UgZGlnaXRfc3RyaW5ncyBpbnN0ZWFkIG9mIHN0cmluZyBjb25zdGFudHMuCgkqIHByb2ZpbGUuYyAoaW5pdF9hcmNfcHJvZmlsZXIpOiBBbGxvY2F0ZSBzdHJpbmcgd2l0aAoJZ2djX2FsbG9jX3N0cmluZyBpbnN0ZWFkIG9mIHhtYWxsb2MuCgkob3V0cHV0X2Z1bmNfc3RhcnRfcHJvZmlsZXIpOiBMaWtld2lzZS4KCSogYy10eXBlY2suYyAoZGlnZXN0X2luaXQpOiBDaGVjayBpZiBpbml0IGlzIGVycm9yX21hcmtfbm9kZS4KClRodSBTZXAgMjMgMTI6NTk6MTQgMTk5OSAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2djLXBhZ2UuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChnZ2MtcGFnZS5vKTogTmV3LgoKVGh1IFNlcCAyMyAxMzo1NToyMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpbnZva2UudGV4aTogRG9jdW1lbnQgLWZkZWxldGUtbnVsbC1wb2ludGVyLWNoZWNrcwoJKiB0b3BsZXYuYyAoZmxhZ19kZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrcyk6IE5ldy4KCShmX29wdGlvbnMpOiBBZGQgZW50cnkgZm9yIC1mZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3MuCgkocmVzdF9vZl9jb21waWxhdGlvbik6IENvbmRpdGlvbmFsaXplIG51bGwgcG9pbnRlciBjaGVjawoJZWxpbWluYXRpb24gb24gZmxhZ19kZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrcy4KCShtYWluKTogSWYgLU8yIG9yIGdyZWF0ZXIsIGVuYWJsZSAtZmRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzCgoxOTk5LTA5LTIzIDEwOjU2IC0wNzAwICBaYWNrIFdlaW5iZXJnICA8emFja0BiaXRtb3Zlci5jb20+CgoJKiBpc282NDYuaCwgc3RkYXJnLmgsIHN0ZGJvb2wuaCwgc3RkZGVmLmgsIHZhcmFyZ3MuaDogQWRkCgljb3B5cmlnaHQgbm90aWNlIGFuZCBzcGVjaWFsIGV4Y2VwdGlvbiB0byBHUEwuCgpUaHUgU2VwIDIzIDEzOjQwOjIzIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFiaTY0LmggKG1pcHNfZnVuY3Rpb25fdmFsdWUpOiBBZGQgcHJvdG90eXBlIGFyZ3VtZW50cy4KCgkqIG1pcHMtcHJvdG9zLmg6IE5ldyBmaWxlIHdpdGggbWlwcyBwcm90b3R5cGVzLgoKCSogbWlwcy5jOiBJbmNsdWRlICJ0bV9wLmgiLgoJKG1rdGVtcCwgbG9va3VwX25hbWUpOiBBZGQgcHJvdG90eXBlIGFyZ3VtZW50cy4KCShleHRlcm5fbGlzdCwgc3RyaW5nX2NvbnN0YW50LCBtaXBzX2ZpbGxfZGVsYXlfc2xvdCwKCW1pcHNfb3V0cHV0X2V4dGVybmFsLCBtaXBzX291dHB1dF9leHRlcm5hbF9saWJjYWxsLAoJbWlwc19vdXRwdXRfZmlsZW5hbWUsIG1pcHNfZGVjbGFyZV9vYmplY3QsIGZ1bmN0aW9uX3Byb2xvZ3VlLAoJbWlwc19leHBhbmRfcHJvbG9ndWUsIGZ1bmN0aW9uX2VwaWxvZ3VlLCBtaXBzMTZfY29uc3RhbnQsCglidWlsZF9taXBzMTZfZnVuY3Rpb25fc3R1YiwgbWlwc19vdXRwdXRfY29uZGl0aW9uYWxfYnJhbmNoKToKCUNvbnN0aWZ5IGEgY2hhciouCgkobWlwc192YV9zdGFydCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHUnLgoJKG1pcHNfdmFfYXJnKTogQ2FzdCB2YWx1ZSB0byB1bnNpZ25lZCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCSh0cmFjZSk6IERlbGV0ZS4KCShzYXZlX3Jlc3RvcmVfaW5zbnMsIG1pcHNfZXhwYW5kX3Byb2xvZ3VlKTogQWRkIG1pc3NpbmcgYXJnIGluCgljYWxsIHRvIGBsYXJnZV9pbnQnLgoKCSogbWlwcy5oOiBNb3ZlIHByb3RvdHlwZXMgdG8gbWlwcy1wcm90b3MuaC4KCShkYXRhX3NlY3Rpb24sIG1lbW9yeV9hZGRyZXNzX3AsIHJkYXRhX3NlY3Rpb24sCglyZWFkb25seV9kYXRhX3NlY3Rpb24sIHNpbXBsZV9lcGlsb2d1ZV9wLCB0ZXh0X3NlY3Rpb24pOiBEZWxldGUKCXByb3RvdHlwZXMgZGVsY2FyZWQgZWxzZXdoZXJlLgoJKG1pcHNfZXBpbG9ndWVfZGVsYXlfc2xvdHMsIHByaW50X29wdGlvbnMpOiBEZWxldGUgdW51c2VkIGRlY2xzLgoJKHRyYWNlKTogRGVsZXRlLgoJKEdPX1BSSU5URiwgR09fUFJJTlRGMik6IENhbGwgZnByaW50Ziwgbm90IHRyYWNlLgoKCSogbWlwcy5tZDogRGVsZXRlIGV4dHJhIGFyZ3MgaW4gY2FsbCB0byBgbWlwc19tb3ZlXzJ3b3JkcycuCgoJKiB4bS1pcmlzNi5oIChhbGxvY2EpOiBBZGQgcHJvdG90eXBlIGFyZ3VtZW50LgoKCSogZ2VucGVlcC5jOiBJbmNsdWRlICJ0bV9wLmgiIGluIGdlbmVyYXRlZCBvdXRwdXQgZmlsZS4KClRodSBTZXAgMjMgMTA6MzY6NTUgRURUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGJhc2ljLWJsb2NrLmggKGZpbmRfZWRnZV9pbmRleCk6IENoYW5nZSBwYXJhbWV0ZXJzLgoJKiBmbG93LmMgKHZlcmlmeV9lZGdlX2xpc3QpOiBQYXNzIGJhc2ljX2Jsb2NrIHBhcmFtZXRlcnMgdG8KCWZpbmRfZWRnZV9pbmRleCBpbnN0ZWFkIG9mIGludGVnZXJzLgoKVGh1IFNlcCAyMyAxNTo1NDoxMiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29tYmluZS5jIChzaW1wbGlmeV9jb21wYXJpc29uKTogVXNlIGFuIHVuc2lnbmVkIHNoaWZ0IHRvIGFkanVzdAoJdGhlIGNvbnN0YW50LgoKVGh1IFNlcCAyMyAwODo0NjoyMSAxOTk5ICBHdXkgSGFycmlzICA8Z3V5QG5ldGFwcC5jb20+CgoJKiBnY2MuMTogRml4IGEgZm9ybWF0dGluZyBlcnJvci4KCldlZCBTZXAgMjIgMTY6MTA6MjEgMTk5OSAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogaW5zdGFsbC50ZXhpIChDb25maWd1cmF0aW9ucyk6IFJlbW92ZSBweXJhbWlkLiBBZGQgZnIzMCwgaTY4NiwKCWk3ODYsIG1uMTAyMDAsIG1uMTAzMDAsIHBkcDExLCB2ODUwLgoKVGh1IFNlcCAyMyAwNzozNzoxMyAxOTk5ICBEYW4gTmljb2xhZXNjdSAgPGRhbm5AaWNzLnVjaS5lZHU+CgoJKiBsaWJnY2MyLmMgKG51bV9kaWdpdHMpOiBBZGQgcHJvdG90eXBlIHdpdGgKCV9fYXR0cmlidXRlX18oKGNvbnN0KSkuCgkoX190ZXJtaW5hdGUpOiBBZGQgcHJvdG90eXBlLgoKVGh1IFNlcCAyMyAwNTozMjowNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYnVpbHRpbnMuYywgZGJ4b3V0LmMsIHZhcmFzbS5jOiBJbmNsdWRlIHRtX3AuaC4KCgkqIGFscGhhL2FscGhhLmMgKHByaW50X29wZXJhbmQpOiBGaXggdHlwZSBvZiBgY29kZScuCgkoYWxwaGFfb3V0cHV0X2ZpbGVuYW1lKTogQ29uc3RpZnkuCgkqIGFscGhhL2FscGhhLmg6IE1vdmUgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAuLi4KCSogYWxwaGEvYWxwaGEtcHJvdG9zLmg6IC4uLiBoZXJlLiAgTmV3IGZpbGUuCgkqIGFscGhhL2VsZi5oIChDT05TVF9TRUNUSU9OX0ZVTkNUSU9OKTogUHJvdG90eXBlIHRoZSBmdW5jdGlvbi4KCShTRUNUSU9OX0ZVTkNUSU9OX1RFTVBMQVRFKTogTGlrZXdpc2UuCgpUaHUgU2VwIDIzIDExOjE1OjM2IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZXhwbWVkLmMgKGRvX2NtcF9hbmRfanVtcCk6IFBhc3MgY2NwX2p1bXAgdG8gY2FuX2NvbXBhcmVfcC4KCSogZXhwci5jIChleHBhbmRfZXhwcik6IExpa2V3aXNlLgoJKGRvX2p1bXApOiBMaWtld2lzZS4KCShkb19zdG9yZV9mbGFnKTogUGFzcyBjY3Bfc3RvcmVfZmxhZyB0byBjYW5fY29tcGFyZV9wLgoJKiBleHByLmggKGVudW0gb3B0YWJfaW5kZXgpOiBBZGQgY2JyYW5jaCwgY21vdiwgY3N0b3JlIG9wdGFicyBhbmQKCWFjY2Vzc29yIG1hY3Jvcy4KCShlbnVtIGNhbl9jb21wYXJlX3B1cnBvc2UpOiBOZXcuCgkoY2FuX2NvbXBhcmVfcCk6IEFkanVzdCBwcm90b3R5cGUuCgkocHJlcGFyZV9jbXBfaW5zbiwgcHJlcGFyZV9vcGVyYW5kKTogRGVjbGFyZS4KCSogZ2Vub3Bpbml0LmMgKG9wdGFicyk6IEFkZCBjYnJhbmNoX29wdGFiLCBjbW92X29wdGFiLCBjc3RvcmVfb3B0YWIuCgkqIG9wdGFicy5jIChjbXBfYXZhaWxhYmxlX3ApOiBEZWxldGVkLgoJKGV4cGFuZF9hYnMpOiBQYXNzIGNjcF9qdW1wIHRvIGNhbl9jb21wYXJlX3AuCgkoY2FuX2NvbXBhcmVfcCk6IE5ldyBhcmcgUFVSUE9TRS4gIENoZWNrIGZvciBjb21iaW5lZCBvcHRhYnMuCgkocHJlcGFyZV9jbXBfaW5zbik6IE5vIGxvbmdlciBzdGF0aWMuICBBZGQgYXJnIFBVUlBPU0UuCglDYWxsIGNhbl9jb21wYXJlX3AgcmF0aGVyIHRoYW4gY21wX2F2YWlsYWJsZV9wLgoJKHByZXBhcmVfb3BlcmFuZCk6IE5vIGxvbmdlciBzdGF0aWMuCgkoZW1pdF9jbXBfYW5kX2p1bXBfaW5zbik6IENoZWNrIGZvciBhbmQgdXNlIGNicmFuY2ggcGF0dGVybnMuCgkoZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMpOiBQYXNzIGNjcF9qdW1wIHRvIHByZXBhcmVfY21wX2luc24uCgkoZXhwYW5kX2Zsb2F0KTogRml4IGEgc2xpZ2h0bHkgYnJva2VuIGVtaXRfY21wX2luc24vZW1pdF9qdW1wX2luc24KCXNlcXVlbmNlIHRvIHVzZSBlbWl0X2NtcF9hbmRfanVtcF9pbnNucy4KCShpbml0X29wdGFicyk6IEluaXRpYWxpemUgY2JyYW5jaF9vcHRhYiwgY21vdl9vcHRhYiwgY3N0b3JlX29wdGFiLgoKV2VkIFNlcCAyMiAxNzo1ODowMSAxOTk5ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIG1pcHMuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogRG9uJ3QgYWNjZXB0IGxhcmdlCglyZWdpc3RlciBvZmZzZXRzOyBsZXQgTEVHSVRJTUlaRV9BRERSRVNTIGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLgoJKExFR0lUSU1JWkVfQUREUkVTUyk6IFVzZSBwbHVzX2NvbnN0YW50IHRvIGF2b2lkCgkocGx1cyAocmVnKSAoY29uc3RfaW50IDApKQoJKiBtaXBzLm1kIChjYWxsX2ludGVybmFsM2MpOiBOZXcgcGF0dGVybiBmb3IgLW1pcHMxNiAtbWxvbmctY2FsbHMuCgpXZWQgU2VwIDIyIDE3OjU1OjMxIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChleHBhbmRfYmxvY2tfbW92ZSk6IERJbW9kZSBsb2FkcyBhbmQgc3RvcmVzIHJlcXVpcmUKCXdvcmQtYWxpZ25lZCBkaXNwbGFjZW1lbnRzLiAgSW5jcmVtZW50IGFkZHJlc3MgcmVnaXN0ZXJzIHdpdGgKCWFkZGRpMyBvbiA2NC1iaXQgcGxhdGZvcm0uICBVc2UgVEFSR0VUX1BPV0VSUEM2NCBub3QgVEFSR0VUXzY0QklULgoKV2VkIFNlcCAyMiAxNzozNTo1NSAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChiYXNlX3R5cGVfZGllKTogVXNlIHRoZSBuYW1lIF9fdW5rbm93bl9fIGlmIHRoZXJlCglpcyBubyBuYW1lIGZvciB0aGUgYmFzZSB0eXBlLCByYXRoZXIgdGhhbiBzZWdmYXVsdC4gIElmIHdlIGFyZQoJd3JpdGluZyBvdXQgYSBjb21wbGV4IGludGVnZXIgdHlwZSwgdXNlIERXX0FURV9sb191c2VyLgoKCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogSWYgd2UgYXJlIGNvcHlpbmcgYSBjb21wbGV4IHRoYXQgZml0cwoJaW4gb25lIHdvcmQgb3IgbGVzcyAoY29tcGxleCBjaGFyLCBjb21wbGV4IHNob3J0LCBvciBvbiA2NCBiaXQKCXN5c3RlbXMgY29tcGxleCBmbG9hdCkgdG8vZnJvbSBhIGhhcmQgcmVnaXN0ZXIsIGNvcHkgaXQgdGhyb3VnaAoJbWVtb3J5IGluc3RlYWQgb2YgZHlpbmcgaW4gZ2VuX3tyZWFsLGltYWd9cGFydC4gIElmIHdlIGhhdmUgYQoJc2hvcnQgY29tcGxleCB0eXBlLCBwcmV2ZW50IGlubGluaW5nIHNpbmNlIGl0IGFsbG9jYXRlcyBzdGFjawoJbWVtb3J5LgoKCSogdHJlZS5jIChidWlsZF9jb21wbGV4X3R5cGUpOiBJZiB3ZSBhcmUgd3JpdGluZyBkd2FyZjIgb3V0cHV0LAoJZ2VuZXJhdGUgYSBuYW1lIGZvciBjb21wbGV4IGludGVnZXIgdHlwZXMuCgpXZWQgU2VwIDIyIDExOjM0OjA4IEVEVCAxOTk5ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBiYXNpYy1ibG9jay5oIChhZGRfbm9yZXR1cm5fZmFrZV9leGl0X2VkZ2VzKTogVXNlIGNvcnJlY3QgbmFtZS4KCSogZmxvdy5jIChyZW1vdmVfZWRnZSk6IFJlbW92ZSBleHRyYSB3aGl0ZXNwYWNlLgoJKHJlbW92ZV9mYWtlX2VkZ2VzKTogRml4IGNvbW1lbnQuCgkoYWRkX25vcmV0dXJuX2Zha2VfZXhpdF9lZGdlcyk6IFVzZSB0aGUgY29ycmVjdCBuYW1lLgoKV2VkIFNlcCAyMiAxNjoxMjo0MCBCU1QgMTk5OSAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIE1ha2VmaWxlLmluIChJTlRMX01PU1RMWUNMRUFOLCBJTlRMX0NMRUFOKTogTmV3IHZhcmlhYmxlcy4KCShtb3N0bHljbGVhbik6IERlcGVuZCBvbiBJTlRMX01PU1RMWUNMRUFOLgoJKGNsZWFuKTogRGVwZW5kIG9uIElOVExfQ0xFQU4uCgkobWFpbnRhaW5lci1jbGVhbik6IEFkanVzdC4KCldlZCBTZXAgMjIgMTA6MTg6NTYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlndXJlLmluIChBQ19QUkVSRVEpOiBCdW1wIHRvIDIuMTMuCgkoQUNfQ19TVFJJTkdJWkUpOiBDYWxsIHRoaXMgaW5zdGVhZCBvZiB1c2luZyBhIGN1c3RvbSBtYWNyby4KCgkqIGdhbnNpZGVjbC5oIChIQVZFX1NUUklOR0laRSk6IERlZmluZSwgaWYgc3RhZ2UyIGdjYyAmJiBfX1NURENfXy4KCgkqIHN5c3RlbS5oIChIQVZFX1NUUklOR0laRSk6IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIEhBVkVfQ1BQX1NUUklOR0lGWS4KCgkqIGFjY29uZmlnLmggKEhBVkVfQ1BQX1NUUklOR0lGWSk6IERlbGV0ZS4KCgkqIGFscGhhL3htLXZtcy5oIChIQVZFX0NQUF9TVFJJTkdJRlkpOiBEZWxldGUuCgkoSEFWRV9TVFJJTkdJWkUpOiBEZWZpbmUuCgpXZWQgU2VwIDIyIDA2OjI1OjE1IDE5OTkgIEppbSBLaW5nZG9uICA8aHR0cDovL2RldmVsb3Blci5yZWRoYXQuY29tPgoKCSogYy1wYXJzZS5pbjogc2F2ZSBhbmQgcmVzdG9yZSB3YXJuX3BvaW50ZXJfYXJpdGggb24gX19leHRlbnNpb25fXwoJYWxvbmcgd2l0aCBwZWRhbnRpYy4KCShTQVZFX1dBUk5fRkxBR1MsIFJFU1RPUkVfV0FSTl9GTEFHUyk6IEFkZGVkLgoJU2V0IHRoZSB0eXBlIG9mIGV4dGVuc2lvbiB0byBpdHlwZSByYXRoZXIgdGhhbiAkPGl0eXBlPjEga2x1ZGdlLgoJKiBleHRlbmQudGV4aSAoQWx0ZXJuYXRlIEtleXdvcmRzKTogQWRqdXN0IGRvY3VtZW50YXRpb24uCgkqIGMtcGFyc2UuYywgYy1wYXJzZS55LCBvYmpjLXBhcnNlLmMsIG9iamMtcGFyc2UueTogUmVidWlsdC4KCldlZCBTZXAgMjIgMDY6MDY6NTcgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYywgcGEuaCwgcGEubWQ6IFN1cHBvcnQgbXVsdGlwbGUgYXNzZW1ibGVyIGRpYWxlY3RzIGluCgltb3N0IGFzc2VtYmxlciB0ZW1wbGF0ZXMuCgoJKiBwYS5jIChocHBhX2xlZ2l0aW1pemVfYWRkcmVzcyk6IEhhbmRsZSBmdWxsIG9mZnNldHMgZm9yIFBBMi4wCglGUCBsb2FkcyBhbmQgc3RvcmVzLgoJKGZvbGxvd2luZ19jYWxsKTogQWx3YXlzIHJldHVybiB6ZXJvIGZvciB0aGUgUEE4MDAwLgoJKiBwYS5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBIYW5kbGUgZnVsbCBvZmZzZXRzIGZvciBQQTIuMAoJRlAgbG9hZHMgYW5kIHN0b3Jlcy4KCShMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogU2ltaWxhcmx5LgoKCSogcGEuaCAoQlJBTkNIX0NPU1QpOiBEZWZpbmUuCgoJKiBwYS5tZCAocmV0dXJuLCByZXR1cm5faW50ZXJuYWwpOiBVc2UgYnZlIGZvciBQQTIuMC4KCgkqIHBhLm1kIChmdXNlZCBtdWx0aXBseSk6IEFkZCB2YXJpYW50cyB3aGljaCByZWR1Y2UgaGVpZ2h0IGZvciB0aGUKCWZ1c2VkIG11bHRpcGx5LCBidXQgd2hpY2ggc3RpbGwgZ2VuZXJhdGUgMiBpbnNucy4KCShmbmVnYWJzKTogU2ltaWxhcmx5LgoKCSogcGEubWQgKHN1YnNpMyk6IFR1cm4gaW50byBhbiBleHBhbmRlci4gIENyZWF0ZSB0d28gYW5vbnltb3VzCglwYXR0ZXJucy4gIE9uZSBmb3IgUEEyLjAgb25lIGZvciBQQTEueC4gIFVzZSBtdHNhcmNtIGZvciBQQTIuMC4KCSogcGEuaCAoRVhUUkFfQ09OU1RSQUlOVCk6IEhhbmRsZSAnUycuCgoJKiBwYS5tZCAoZmxvYXR1bnNzaXNmMiwgZmxvYXR1bnNzaWRmMik6IEdlbmVyYXRlIGRpZmZlcmVudCBSVEwKCWZvciBUQVJHRVRfUEFfMjAuCgkoZmxvYXR1bnNzaWRmMl9wYTIwLCBmbG9hdHVuc3Npc2YyX3BhMjApOiBOZXcgcGF0dGVybnMgZm9yIFBBMi4wCgljb2RlIGdlbmVyYXRpb24uCgkoZmxvYXR1bnNkaXNmMiwgZmxvYXR1bnNkaWRmMiwgZml4dW5zX3RydW5jc2ZzaTIpOiBMaWtld2lzZS4KCShmaXh1bnNfdHJ1bmNkZnNpMiwgZml4dW5zX3RydW5jc2ZkaTIsIGZpeHVuc190cnVuY2Rmc2kyKTogTGlrZXdpc2UuCgoJKiByZWdjbGFzcy5jIChpbml0X3JlZ3MpOiBBZGQgInRvcF9vZl9zdGFjayIgYXMgYSBnYXJiYWdlCgljb2xsZWN0aW9uIHJvb3QuCgoJKiBmbG93LmMgKHJlY29yZF9hY3RpdmVfZWhfcmVnaW9ucyk6IFRlcm1pbmF0ZSBsb29wIGFmdGVyIGZpbmRpbmcKCXRoZSBsYXN0IGluc24gaW4gdGhlIGxhc3QgYmFzaWMgYmxvY2suCgpXZWQgU2VwIDIyIDIwOjI1OjAwIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kOiBEZWxldGUgcGFyYWxsZWwgaW5zdHJ1Y3Rpb24gcGVlcGhvbGVzLgoKV2VkIFNlcCAyMiAxOTo1OToxOSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfYWRkX2djX3Jvb3RzKTogQWRkIHRyZWUgcm9vdHMuCgpXZWQgU2VwIDIyIDE5OjU2OjI1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9wcm9jZXNzX2FmdGVyX3JlbG9hZCk6IFJld29yayBtYWNoZGVwIGluc24KCXNwbGl0dGluZyB0byBub3QgdXNlIG91dHB1dCB0ZW1wbGF0ZS4KCldlZCBTZXAgMjIgMTk6NTA6MTIgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoRVhQQU5EX0JVSUxUSU5fVkFfU1RBUlQpOiBDYWxsIGM0eF92YV9zdGFydC4KCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X3ZhX3N0YXJ0KTogTmV3IGZ1bmN0aW9uLgoKVHVlIFNlcCAyMSAxODo0MDowMSAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBnZW5yZWNvZy5jIChub3RfYm90aF90cnVlKTogSGFuZGxlIGNvcnJlY3RseSBjYXNlcyB3aGVuIGNhbGxlZCBmb3IKCXRlc3RzIHdpdGggZGlmZmVyZW50IHBvc2l0aW9ucyBpbiB0aGUgaW5zbi4KClR1ZSBTZXAgMjEgMTg6Mjk6MTEgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWFjaG1vZGUuaCAoSE9TVF9QVFJfUFJJTlRGKTogTW92ZSBmcm9tIGhlcmUgLi4uCgoJKiBzeXN0ZW0uaCAoSE9TVF9QVFJfUFJJTlRGKTogLi4uIHRvIGhlcmUuCgoJKiBtaXBzLXRmaWxlLmM6IERvbid0IGluY2x1ZGUgbWFjaG1vZGUuaC4KCgkqIE1ha2VmaWxlLmluIChNQUNITU9ERV9IKTogTmV3IHZhcmlhYmxlLiAgVXBkYXRlIHRvIHVzZSBpdC4KCShtaXBzLXRmaWxlLm8pOiBEb24ndCBkZXBlbmQgb24gbWFjaG1vZGUuaC4KClR1ZSBTZXAgMjEgMTg6Mjc6MzQgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZSk6IFJlbmFtZSBsb2NhbCB2YXJpYWJsZSBgcmVnaW9uJyB0bwoJYXZvaWQgY29uZmxpY3RzIHdpdGggdHlwZWRlZiBzdHJ1Y3QgYHJlZ2lvbicgYXQgdGhlIHRvcCBsZXZlbCBzY29wZS4KClR1ZSBTZXAgMjEgMTQ6MTQ6NTAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGJhc2ljLWJsb2NrLmggKGJhc2ljX2Jsb2NrKTogQWRkIGVoX2JlZywgZWhfZW5kLgoJKiBmbG93LmMgKGVudHJ5X2V4aXRfYmxvY2tzKTogVXBkYXRlLgoJKGZpbmRfYmFzaWNfYmxvY2tzKTogRG9uJ3QgYWxsb2NhdGUgYmJfZWhfZW5kLCBvciBwYXNzIGl0IGFyb3VuZC4KCUNhbGwgbmV3IGZ1bmN0aW9ucy4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG9uJ3QgcmVjb3JkIGVoX2xpc3QgYXQgZWFjaCBiYi4gIFVzZQoJbGlzdHMuYyBmdW5jdGlvbnMgdG8gYWxsb2NhdGUgaW5zbiBsaXN0cy4KCShtYWtlX2VkZ2VzKTogVXNlIGVoX2JlZytlaF9lbmQsIG5vdCB0aGUgbGlzdHMuICBTcGxpdCBvdXQgRUgKCWVkZ2UgY3JlYXRpb24gLi4uCgkobWFrZV9laF9lZGdlKTogLi4uIGhlcmUuICBOZXcuCgkobW92ZV9zdHJheV9laF9yZWdpb25fbm90ZXMpOiBOZXcuCgkocmVjb3JkX2FjdGl2ZV9laF9yZWdpb25zKTogTmV3LgoJKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBTcGxpdCBvdXQgYmxvY2sgbWVyZ2luZyAuLi4KCSh0cnlfbWVyZ2VfYmxvY2tzKTogLi4uIGhlcmUuICBOZXcuCgkobWVyZ2VfYmxvY2tzX21vdmVfcHJlZGVjZXNzb3Jfbm9qdW1wcyk6IFJlbW92ZSBlZGdlIGFyZy4KCUR1bXAgZGVidWdnaW5nIGRhdGEuCgkobWVyZ2VfYmxvY2tzX21vdmVfc3VjY2Vzc29yX25vanVtcHMpOiBMaWtld2lzZS4KCShtZXJnZV9ibG9ja3MpOiBVc2UgZWhfYmVnK2VoX2VuZCB0byB2YWxpZGF0ZSBibG9jayBtb3ZlbWVudC4KClR1ZSBTZXAgMjEgMTE6MTU6MDMgMTk5OSAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZXh0ZW5kLnRleGkgKEJvdW5kIG1lbWJlciBmdW5jdGlvbnMpOiBEb2N1bWVudCB1bmJvdW5kIHBtZgoJY29udmVyc2lvbi4KClR1ZSBTZXAgMjEgMTQ6NTU6MTEgRURUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoc3BsaXRfZWRnZSk6IEhhbmRsZSBpbnNlcnRpb24gb24gYSBmYWxsdGhyb3VnaCBlZGdlIHdoaWNoCgloYXMgdGhlIEVYSVRfQkxPQ0sgYXMgYSBkZXN0LgoKVHVlIFNlcCAyMSAxNDo1MToyMyBFRFQgMTk5OSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChyZW1vdmVfZWRnZSk6IE5ldyBmdW5jdGlvbiB0byByZW1vdmUgYW4gZWRnZSBmcm9tIHRoZQoJZmxvdyBncmFwaC4KCShyZW1vdmVfZmFrZV9zdWNjZXNzb3JzKTogTmV3IGZ1bmN0aW9uIHRvIHJlbW92ZSBmYWtlIHN1Y2Nlc3NvciBlZGdlcy4KCShyZW1vdmVfZmFrZV9lZGdlcyk6IE5ldyBmdW5jdGlvbiB0byByZW1vdmUgYWxsIGZha2UgZWRnZXMgZnJvbSB0aGUKCWZsb3cgZ3JhcGguCgkoYWRkX2Zha2VfZXhpdF9lZGdlcyk6IE5ldyBmdW5jdGlvbiB0byBhZGQgZmFrZSBlZGdlcyBmcm9tIGFsbCBibG9ja3MKCXdpdGggbm8gc3VjY2Vzc29ycyB0byB0aGUgZXhpdCBibG9jay4KCSogYmFzaWMtYmxvY2suaCAocmVtb3ZlX2Zha2VfZWRnZXMsIGFkZF9mYWtlX2V4aXRfZWRnZXMpOiBBZGQKCXByb3RvdHlwZXMgZm9yIG5ldyBmdW5jdGlvbnMuCgpUdWUgU2VwIDIxIDE0OjQ5OjUzIEVEVCAxOTk5ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9lbGY2NC5oIChBU01fT1VUUFVUX0NPTlNUUlVDVE9SLCBBU01fT1VUUFVUX0RFU1RSVUNUT1IpOgoJVXNlIFBtb2RlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIG91dHB1dCAuZHdvcmQgb3IgLndvcmQuCgpUdWUgU2VwIDIxIDExOjA0OjM0IDE5OTkgIEFsZXggU2FtdWVsICA8c2FtdWVsQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmMgKGJ1aWx0X2luX2ZpbGVuYW1lKTogTmV3IHZhcmlhYmxlLgoJKEJVSUxUX0lOX0ZJTEVOQU1FKTogTmV3IG1hY3JvLgoJKGluaXRfdHJlZV9jb2Rlcyk6IEFsbG9jYXRlIGJ1aWx0X2luX2ZpbGVuYW1lLgoJKG1ha2Vfbm9kZSk6IFVzZSBidWlsdF9pbl9maWxlbmFtZSBpbnN0ZWFkIG9mIHN0cmluZyBjb25zdGFudC4KClR1ZSBTZXAgMjEgMTQ6MTM6MjcgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGZyMzAgdGFyZ2V0LgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgkqIGNvbmZpZy9mcjMwOiBOZXcgZGlyZWN0b3J5LgoJKiBjb25maWcvZnIzMC9jcnRpLmFzbTogTmV3IGZpbGUuCgkqIGNvbmZpZy9mcjMwL2ZyMzAuYzogTmV3IGZpbGUuCgkqIGNvbmZpZy9mcjMwL2NydG4uYXNtOiBOZXcgZmlsZS4KCSogY29uZmlnL2ZyMzAvZnIzMC5oOiBOZXcgZmlsZS4KCSogY29uZmlnL2ZyMzAvZnIzMC5tZDogTmV3IGZpbGUuCgkqIGNvbmZpZy9mcjMwL2xpYjFmdW5jcy5hc206IE5ldyBmaWxlLgoJKiBjb25maWcvZnIzMC90LWZyMzA6IE5ldyBmaWxlLgoJKiBjb25maWcvZnIzMC94bS1mcjMwLmg6IE5ldyBmaWxlLgoKVHVlIFNlcCAyMSAwNjo0NTozMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKG1lcmdlX2Jsb2Nrc19tb3ZlX3N1Y2Nlc3Nvcl9ub2p1bXBzKTogRGVsZXRlIHRoZQoJQkFSUklFUiBhdCB0aGUgZW5kIG9mIHRoZSBzdWNjZXNzb3IsIG5vdCB0aGUgQkFSUklFUiBiZWZvcmUKCXRoZSBzdWNjZXNzb3IuCgoJKiBwYS5jIChwYV9hZGRfZ2Nfcm9vdHMpOiBGaXggdGhpbmtvIGluIGxhc3QgY2hhbmdlLgoKVHVlIFNlcCAyMSAwNToyOToxNyAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm0uY29tKQoKCSogc3RtdC5jIChhbnlfcGVuZGluZ19jbGVhbnVwcyk6IERvbid0IGNyYXNoIHdoZW4KCWN1cnJlbnRfZnVuY3Rpb24tPnN0bXQgaXMgdW5zZXQuCgpUdWUgU2VwIDIxIDAwOjU5OjQ5IDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGxzZC5pYy51bmljYW1wLmJyPgoKCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBJbml0aWFsaXplIGNvbnN0X2ludF9ydHggYmVmb3JlCglvdGhlciBpbml0aWFsaXphdGlvbnMgdGhhdCBtYXkgdXNlIGl0IGZvciByZWxhdGl2ZSBvZmZzZXRzLgoKTW9uIFNlcCAyMCAyMTo0MzoyNSAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBsc2QuaWMudW5pY2FtcC5icj4KCgkqIGNvbmZpZy9pMzg2L3NvbDIuaCAoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogVXNlIHN0YWJzLgoJKEFTTV9TUEVDKTogTW92ZWQgZnJvbSBzb2wyZGJnLmguICBBZGRlZCB3b3JrLWFyb3VuZCBmb3IgZ2FzLgoJKiBjb25maWcvaTM4Ni9zb2wyZGJnLmg6IFJlbW92ZWQuCgkqIGNvbmZpZy9pMzg2L3NvbDJnYXMuaDogTmV3IGZpbGUsIHRvIGVuYWJsZSBnYXMgd29yay1hcm91bmQuCgkqIGNvbmZpZ3VyZS5pbjogVXNlIGkzODYvc29sMmdhcy5oIG9uIFNvbGFyaXMveDg2IC0td2l0aC1nYXMuCglEb24ndCB1c2Ugc29sMmRiZy5oLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpNb24gU2VwIDIwIDEzOjI5OjQxIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBpbnZva2UudGV4aSAoLWZ0aGlzLWlzLXZhcmlhYmxlKTogUmVtb3ZlIGRvY3VtZW50YXRpb24uCgpNb24gU2VwIDIwIDEyOjU5OjE2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBiYXNpYy1ibG9jay5oIChjb21wdXRlX2JiX2Zvcl9pbnNuKTogRGVjbGFyZS4KCSogZmxvdy5jIChjb21wdXRlX2JiX2Zvcl9pbnNuKTogRXhwb3J0LiAgRG9uJ3QgYWNjZXB0IHRoZSB2YXJyYXkKCXRvIHVzZTsgc2V0IHNpemUgb2YgYmFzaWNfYmxvY2tfZm9yX2luc24gZGlyZWN0bHkuCgkoZmluZF9iYXNpY19ibG9ja3MpOiBVcGRhdGUuCgpNb24gU2VwIDIwIDE1OjExOjU0IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGZsb3cuYyAodmVyaWZ5X2Zsb3dfaW5mbyk6IEZpeCB0eXBvLCAiYWJvcnQ7IiAtPiAiYWJvcnQgKCk7Ii4KCk1vbiBTZXAgMjAgMTQ6NTY6MzQgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3J0c3R1ZmYuYyAoT05fRVhJVCk6IERlbGV0ZSBlbXB0eSBtYWNybyBkZWZpbml0aW9uLgoJKF9fZG9fZ2xvYmFsX2N0b3JzX2F1eCk6IENhbGwgYXRleGl0KCksIG5vdCBPTl9FWElUKCkuCgpNb24gU2VwIDIwIDE1OjI1OjM1IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogRXh0ZW5kIGNvbW1lbnQuCgpNb24gU2VwIDIwIDE0OjQzOjM3IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAocHJvZ25hbWUpOiBNYWtlICdjb25zdCBjaGFyIConCgkoZmxhZ19wcmludF9tZW0pOiBNb3ZlIG91dCBvZiBtYWluLgoJKHZlcnNpb25fZmxhZyk6IE1vdmUgb3V0IG9mIG1haW4uCgkoZmlsZW5hbWUpOiBNb3ZlIG91dCBvZiBtYWluLgoJKGRlYnVnX2FyZ3MpOiBSZW1vdmUgZyBwcmVmaXggZnJvbSBvcHRpb25zLgoJKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogUmVtb3ZlIGNwcGxpYiBzcGVjaWZpYyBvcHRpb25zLgoJKGRpc3BsYXlfaGVscCk6IEFkZCBnIHByZWZpeCB0byBkZWJ1ZyBvcHRpb25zLgoJKGNoZWNrX2xhbmdfb3B0aW9uKTogRGVsZXRlIHRoaXMgZnVuY3Rpb24uCgkoZGVjb2RlX2Rfb3B0aW9uKTogTmV3IGZ1bmN0aW9uOiBEZWNvZGUgLWQuLi4gb3B0aW9uLgoJKGRlY29kZV9mX29wdGlvbik6IE5ldyBmdW5jdGlvbjogRGVjb2RlIC1mLi4uIG9wdGlvbi4KCShkZWNvZGVfV19vcHRpb24pOiBOZXcgZnVuY3Rpb246IERlY29kZSAtVy4uLiBvcHRpb24uCgkoZGVjb2RlX2dfb3B0aW9uKTogTmV3IGZ1bmN0aW9uOiBEZWNvZGUgLWcuLi4gb3B0aW9uLgoJKGluZGVwZW5kZW50X2RlY29kZV9vcHRpb24pOiBOZXcgZnVuY3Rpb246IERlY29kZSBhIGxhbmd1YWdlCglpbmRlcGVuZGVudCBjb21tYW5kIGxpbmUgb3B0aW9uLgoJKG1haW4pOiBJbnZva2UgbGFuZ19kZWNvZGVfb3B0aW9uIGFuZCB0aGVuCglpbmRlcGVuZGVudF9kZWNvZGVfb3B0aW9uIG9uIGVhY2ggY29tbWFuZCBsaW5lIG9wdGlvbiBpbgoJdHVybi4KCk1vbiBTZXAgMjAgMDU6NDE6MzYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCVJldmVydCB0aGlzIGNoYW5nZS4gIEdhdmluJ3MgcGF0Y2ggdG8gb3BlcmFuZF9lcXVhbF9wIGlzIGEgYmV0dGVyIGZpeC4KCSAqIGZvbGQtY29uc3QuYyAoZm9sZF9yYW5nZV90ZXN0KTogRG8gbm90IHRyeSB0byBmb2xkIHRoZSByYW5nZQoJIHRlc3QgaWYgdGhlIHJocyBvciBsaHMgaGFzIHNpZGUgZWZmZWN0cy4KCgkqIGJhc2ljLWJsb2NrLmggKGNvbXB1dGVfZmxvd19kb21pbmF0b3JzKTogRGVjbGFyZS4KCgkqIGdjc2UuYyAoYWxsb2NfY29kZV9ob2lzdF9tZW0pOiBOZXcgZnVuY3Rpb24uCgkoZnJlZV9jb2RlX2hvaXN0X21lbSwgY29tcHV0ZV9jb2RlX2hvaXN0X3ZiZWlub3V0KTogTGlrZXdpc2UuCgkoY29tcHV0ZV9jb2RlX2hvaXN0X2RhdGEsIGhvaXN0X2V4cHJfcmVhY2hlc19oZXJlX3ApOiBMaWtld2lzZS4KCShob2lzdF9jb2RlLCBvbmVfY29kZV9ob2lzdGluZ19wYXNzKTogTGlrZXdpc2UuCgkoZ2NzZV9tYWluKTogSWYgb3B0aW1pemluZyBmb3Igc2l6ZSwgdGhlbiBob2lzdCBleHByZXNzaW9ucwoJY29tcHV0ZWQgaW4gbXVsdGlwbGUgZG9taW5hdGVkIGJhc2ljIGJsb2Nrcy4KCgkqIGdjc2UuYyAoaW52YWxpZF9ub25udWxsX2luZm8pOiBOZXcgZnVuY3Rpb24uCgkoZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3MpOiBMaWtld2lzZS4KCSogcnRsLmggKGRlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzKTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIGRlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzLgoKCSogZmxvdy5jIChtZXJnZV9ibG9ja3NfbW92ZV9wcmVkZWNlc3Nvcl9ub2p1bXBzKTogTmV3IGZ1bmN0aW9uLgoJKG1lcmdlLWJsb2Nrc19tb3ZlX3N1Y2Nlc3Nvcl9ub2p1bXBzKTogTGlrZXdpc2UuCgkobWVyZ2VfYmxvY2tzKTogQWxsb3cgbWVyZ2luZyBvZiBzb21lIGJsb2NrcywgZXZlbiBpZiBpdCByZXF1aXJlcwoJcGh5c2ljYWwgbW92ZW1lbnQgb2YgdGhlIGJsb2NrcywgYnV0IG5vdCBpZiBpdCByZXF1aXJlcyBuZXcganVtcHMuCgoJKiBiaXRtYXAuYyAoZGVidWdfYml0bWFwX2ZpbGUpOiBSZW5tYWVkIGZyb20gYml0bWFwX2RlYnVnX2ZpbGUuCglDYWxsZXJzIGFuZCBwcm90b3R5cGUgY2hhbmdlZC4KCSogYml0bWFwLmg6IEZpeCBkZWJ1Z19iaXRtYXAgYW5kIGRlYnVnX2JpdG1hcF9maWxlIHByb3RvdHlwZXMuCgpNb24gU2VwIDIwIDA2OjU2OjMyIDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGxzZC5pYy51bmljYW1wLmJyPgoKCSogY29uZmlnL3NwYXJjL3NvbDIuaCAoTElOS19TUEVDKTogQXZvaWQgdGhlIGR1cGxpY2F0aW9uIG9mCgktWVAgd2hlbiBib3RoIC1wIGFuZCAtcGcgYXJlIHByZXNlbnQuICBGcm9tIGkzODYvc29sMi5oLgoKTW9uIFNlcCAyMCAxMDo0OTowNSAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBEZWxldGUgdG1fcC5oLgoJKiBjb25maWd1cmUuaW46IENyZWF0ZSBhIG5ldyBmaWxlLCAidG1fcC5oIiwgZnJvbSBhIGxpc3QgaW4KCSJ0bV9wX2ZpbGUiLiBGb3IgaXg4NiBzeXN0ZW1zLCBzZXQgdXAgInRtX3BfZmlsZSIgdG8gaW5jbHVkZQoJImkzODYvaTM4Ni1wcm90b3MuaCIuCgoJKiBhbGlhcy5jOiBJbmNsdWRlICJ0bV9wLmgiLgoJKiBjLXR5cGVjay5jOiBMaWtld2lzZS4KCSogY2FsbHMuYzogTGlrZXdpc2UuCgkqIGNzZS5jOiBMaWtld2lzZS4KCSogZW1pdC1ydGwuYzogTGlrZXdpc2UuCgkqIGV4cGxvdy5jOiBMaWtld2lzZS4KCSogZXhwbWVkLmM6IExpa2V3aXNlLgoJKiBleHByLmM6IExpa2V3aXNlLgoJKiBmaW5hbC5jOiBMaWtld2lzZS4KCSogZmxvdy5jOiBMaWtld2lzZS4KCSogZm9sZC1jb25zdC5jOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYzogTGlrZXdpc2UuCgkqIGdjc2UuYzogTGlrZXdpc2UuCgkqIGdsb2JhbC5jOiBMaWtld2lzZS4KCSogaGFpZmEtc2NoZWQuYzogTGlrZXdpc2UuCgkqIGludGVncmF0ZS5jOiBMaWtld2lzZS4KCSoganVtcC5jOiBMaWtld2lzZS4KCSogbG9jYWwtYWxsb2MuYzogTGlrZXdpc2UuCgkqIGxvb3AuYzogTGlrZXdpc2UuCgkqIG9wdGFicy5jOiBMaWtld2lzZS4KCSogcmVjb2cuYzogTGlrZXdpc2UuCgkqIHJlZy1zdGFjay5jOiBMaWtld2lzZS4KCSogcmVnY2xhc3MuYzogTGlrZXdpc2UuCgkqIHJlZ21vdmUuYzogTGlrZXdpc2UuCgkqIHJlbG9hZC5jOiBMaWtld2lzZS4KCSogcmVsb2FkMS5jOiBMaWtld2lzZS4KCSogcmVvcmcuYzogTGlrZXdpc2UuCgkqIHJlc291cmNlLmM6IExpa2V3aXNlLgoJKiBzdG10LmM6IExpa2V3aXNlLgoJKiBzdG9yLWxheW91dC5jOiBMaWtld2lzZS4KCSogdG9wbGV2LmM6IExpa2V3aXNlLgoJKiB0cmVlLmM6IExpa2V3aXNlLgoJKiB1bnJvbGwuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHJ0YWIuYyAobWFpbik6IE1ha2UgZ2VuZXJhdGVkIGZpbGUgaW5jbHVkZSAidG1fcC5oIi4KCSogZ2VuZW1pdC5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbnJlY29nLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGkzODYuaDogRGVsZXRlIGFsbCBwcm90b3R5cGVzLgoJKiBpMzg2LmM6IEluY2x1ZGUgInRtX3AuaCIuCgkoaXg4Nl9hdHRyX2xlbmd0aF9kZWZhdWx0KTogQ2FsbCBjb25zdGFudF9jYWxsX2FkZHJlc3Nfb3BlcmFuZAoJd2l0aCBjb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuCgkqIGkzODYtcHJvdG9zLmg6IE5ldyBmaWxlLgoJKiBpMzg2Lm1kICh1bm5hbWVkIHBhdHRlcm5zKTogQ2FsbCBjb25zdGFudF9jYWxsX2FkZHJlc3Nfb3BlcmFuZAoJd2l0aCBjb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuCgkoZXhjZXB0aW9uX3JlY2VpdmVyKTogQ2FsbCBsb2FkX3BpY19yZWdpc3RlciB3aXRoIGNvcnJlY3QgbnVtYmVyCglvZiBhcmd1bWVudHMuCgpTdW4gU2VwIDE5IDE0OjE4OjM5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjLXByYWdtYS5jIChtYXJrX2FsaWduX3N0YWNrKTogRGVyZWZlcmVuY2UgdGhlIHZvaWQqIHByb3Blcmx5LgoKU3VuIFNlcCAxOSAwOTowMzo0MCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcnRsLmggKGluc25zX3NhZmVfdG9fbW92ZV9wKTogTmV3IGZ1bmN0aW9uLgoJKiBsb29wLmMgKGZpbmRfYW5kX3ZlcmlmeV9sb29wcyk6IFVzZSBpdC4KCSogcnRsYW5hbC5jIChpbnNuc19zYWZlX3RvX21vdmVfcCk6IERlZmluZSBpdC4KClN1biBTZXAgMTkgMDI6NTQ6MzMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtcHJhZ21hLmM6IEluY2x1ZGUgZ2djLmguCgkqIE1ha2VmaWxlLmluIChjLXByYWdtYS5vKTogVXBkYXRlLgoKU2F0IFNlcCAxOCAxNjowMToxOCAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBsc2QuaWMudW5pY2FtcC5icj4KCgkqIGNvbmZpZy9pMzg2L3NvbDIuaCAoQ1BQX1NQRUMpOiBTdXBwb3J0IC1bcF10aHJlYWRzCgkoTElCX1NQRUMpOiBMaWtld2lzZS4KCShMSU5LX1NQRUMpOiBEbyBub3QgYXNzZXJ0IC16IHRleHQgd2l0aCAtc2hhcmVkIC1taW1wdXJlLXRleHQuCglSZWluZGVudCAtWVAvLXAvLXBnLgoJQ29waWVkIGZyb20gY29uZmlnL3NwYXJjL3NvbDIuaC4KClNhdCBTZXAgMTggMTE6NTI6NDMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtcHJhZ21hLmMgKG1hcmtfYWxpZ25fc3RhY2spOiBOZXcuCgkoaW5pdF9wcmFnbWEpOiBOZXcuCgkqIGMtcHJhZ21hLmggKGluaXRfcHJhZ21hKTogRGVjbGFyZSBpdC4KCSogYy1sZXguYyAoaW5pdF9wYXJzZSk6IENhbGwgaXQuCgpTYXQgU2VwIDE4IDE1OjIwOjM4IDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGxzZC5pYy51bmljYW1wLmJyPgoKCSogY29uZmlndXJlLmluOiBQaWNrIHVwIHRocmVhZCBsaWJyYXJ5IG9uIFNvbGFyaXMveDg2IGp1c3QKCWxpa2Ugb24gU29sYXJpcy9zcGFyYy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU2F0IFNlcCAxOCAxMToxNTo1OCAxOTk5ICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogcnRsLmggKGdsb2JhbF9ydHhfaW5kZXgpOiBOZXcgZW51bS4KCShnbG9iYWxfcnRsKTogQ2hhbmdlIHRvIGFycmF5IG9mIHJ0eC4KCShwY19ydHgsIGNjMF9ydHgpOiBSZWRlZmluZSBhY2NvcmRpbmdseS4KCShjYzBfcnR4LCBzdGFja19wb2ludGVyX3J0eCwgZnJhbWVfcG9pbnRlcl9ydHgpOiBMaWtld2lzZS4KCShoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4LCBhcmdfcG9pbnRlcl9ydHgpOiBMaWtld2lzZS4KCSh2aXJ0dWFsX2luY29taW5nX2FyZ3NfcnR4LCB2aXJ0dWFsX3N0YWNrX3ZhcnNfcnR4KTogTGlrZXdpc2UuCgkodmlydHVhbF9vdXRnb2luZ19hcmdzX3J0eCwgdmlydHVhbF9jZmEpOiBMaWtld2lzZS4KCShjb25zdF9pbnRfcnR4KTogQ2hhbmdlIHRvIGFycmF5IG9mIHJ0eC4KCShjb25zdDBfcnR4LCBjb25zdDFfcnR4LCBjb25zdDJfcnR4LCBjb25zdG0xX3J0eCk6IFJlZGVmaW5lCglhY2NvcmRpbmdseS4KCSogZW1pdC1ydGwuYyAoZ2xvYmFsX3J0bCk6IENoYW5nZSB0byBhcnJheSBvZiBydHguCgkoY29uc3RfaW50X3J0eCk6IENoYW5nZSB0byBhcmF5IG9mIHJ0eC4KCShnZW5fcnR4X0NPTlNUX0lOVCk6IFJlZGVmaW5lIGFjY29yZGluZ2x5LgoJKGluaXRfZW1pdF9vbmNlKTogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZ2xvYmFsX3J0bC4gIExpa2V3aXNlCglmb3IgY29uc3RfaW50X3J0eC4gIEFkZCBib3RoIGFzIEdDIHJvb3RzLgoJKiBnZW5hdHRydGFiLmMgKGdsb2JhbF9ydGwpOiBVcGRhdGUgZGVjbGFyYXRpb24uCgoxOTk5LTA5LTE3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlIChVU0VSX0gpOiBBZGQgaXNvNjQ2LmggYmFjay4KClNhdCBTZXAgMTggMDE6MDc6MjEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZSk6IFVzZSBmcmVlX0lOU05fTElTVF9saXN0IGluc3RlYWQgb2YKCXphcHBpbmcgdGhlIExPR19MSU5LUyBvZiBzY2hlZF9iZWZvcmVfbmV4dF9jYWxsLgoKCSogcGEuaCAoSU5TTl9TRVRTX0FSRV9ERUxBWUVEKTogRGVsZXRlLgoJKiBwYS5jIChpbnNuX3JlZnNfYXJlX2RlbGF5ZWQpOiBSZW5hbWVkIGZyb20KCWluc25fc2V0c19hbmRfcmVmc19hcmVfZGVsYXllZC4KCkZyaSBTZXAgMTcgMTU6MTk6MDEgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGZ1bmN0aWlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBBZGQgeF93aG9sZV9mdW5jdGlvbl9tb2RlX3AuCgkocmV0cm9maXRfYmxvY2spOiBEZWNsYXJlLgoJKiBmdW5jdGlvbi5jIChyZXRyb2ZpdF9ibG9jayk6IE5ldyBmdW5jdGlvbi4KCShpZGVudGlmeV9ibG9ja3MpOiBBZGQgYXNzZXJ0aW9ucy4gIEFsbG93IGFuIGluY29tcGxldGUgc2V0IG9mCglibG9jayBub3RlcyBpZiB3ZSdyZSBzdGlsbCBnZW5lcmF0aW5nIGNvZGUgZm9yIHRoZSBmdW5jdGlvbi4KCSogaW50ZWdyYXRlLmM6IEluY2x1ZGUgbG9vcC5oLgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDYWxsIGZpbmRfbG9vcF90cmVlX2Jsb2NrcyB0byBtYXAgYmxvY2sKCW5vdGVzIHRvIGJsb2NrcyB3aGVuIGluIHdob2xlLWZ1bmN0aW9uIG1vZGUuICBVc2UgcmV0cm9maXRfYmxvY2sKCXRvIGluc2VydCBuZXcgQkxPQ0tzIGZvciB0aGUgaW5saW5lZCBmdW5jdGlvbiwgcmF0aGVyIHRoYW4KCWluc2VydF9ibG9jay4KCSogc3RtdC5jIChleHBhbmRfZml4dXApOiBMaWtld2lzZS4gIERvbid0IHVzZSBwdXNobGV2ZWwvcG9sZXZlbC4KCSogTWFrZWZpbGUuaW4gKGludGVncmF0ZS5vKTogRGVwZW5kIG9uIGxvb3AuaC4KCkZyaSBTZXAgMTcgMTU6MTE6MjAgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRyZWUuaCAod2Fybl9hYm91dF91bnVzZWRfdmFyaWFibGVzKTogRGVjbGFyZS4KCSogc3RtdC5jICh3YXJuX2Fib3V0X3VudXNlZF92YXJpYWJsZXMpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dAoJZnJvbSAuLi4KCShleHBhbmRfZW5kX2JpbmRpbmdzKTogSGVyZS4KCkZyaSBTZXAgMTcgMTU6MDc6MzcgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHN0bXQuYyAocHJlc2VydmVfc3ViZXhwcmVzc2lvbnNfcCk6IERvbid0IGNyYXNoIHdoZW4KCWN1cnJlbnRfZnVuY3Rpb24tPnN0bXQgaXMgdW5zZXQuCgpGcmkgU2VwIDE3IDE1OjAzOjE2IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9zdGFydF9iaW5kaW5ncyk6IEFsbG93IGNhbGxlcnMgdG8gcGFzcyBhIGZsYWcKCWluZGljYXRpbmcgdGhhdCBubyBOT1RFX0lOU05fQkxPQ0tfQkVHIG5vdGUgaXMgcmVxdWlyZWQuCgkoZXhwYW5kX3N0YXJ0X3RhcmdldF90ZW1wcyk6IFVzZSBpdC4KCSogZXhjZXB0LmMgKGV4cGFuZF9laF9yZWdpb25fc3RhcnRfZm9yX2RlY2wpOiBMaWtld2lzZS4KCSogZXhwci5jIChleHBhbmRfZXhwcik6IExpa2V3aXNlLgoKRnJpIFNlcCAxNyAxNTowNToyNyAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGZvbGQtY29uc3QuYyAob3BlcmFuZF9lcXVhbF9wKTogUGF5IGF0dGVudGlvbiB0byBzaWRlIGVmZmVjdHMuCgpGcmkgU2VwIDE3IDExOjE0OjE3IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxpYmdjYzIuYyAoTF9leGl0KTogQ2hlY2sgZm9yIE9OX0VYSVQsIG5vdCBIQVZFX09OX0VYSVQuCgkqIHNwYXJjL3N1bm9zNC5oIChIQVZFX09OX0VYSVQpOiBSZW1vdmUuCgoJKiB0bGluay5jIChzY2FuX2xpbmtlcl9vdXRwdXQpOiBMb29rIGZvciBrZXl3b3JkcyBiZWZvcmUgYWNjZXB0aW5nCglhIG1hbmdsZWQgbmFtZSBpbiBxdW90ZXMuCgpUaHUgU2VwIDE2IDE2OjQ3OjA4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS9hbHBoYS1pbnRlcml4LmggKERXQVJGMl9VTldJTkRfSU5GTyk6IERlZmluZSB0byB6ZXJvLgoJKiBhbHBoYS9vc2Yyb3IzLmggKERXQVJGMl9VTldJTkRfSU5GTyk6IExpa2V3aXNlLgoKVGh1IFNlcCAxNiAxNjozNTo0MSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQ6IFJldmVydCBUaHUgTm92IDI2IGNoYW5nZSB0aGF0IGNhbWUgaW4gdGhyb3VnaCB0aGUKCWxhc3QgZ2NjMiBtZXJnZTogcmVpbnN0YXRlIChwbHVzIChwbHVzIC4uLikpIHJlbG9hZCBwYXR0ZXJucy4KCUF2b2lkIGVhcmx5Y2xvYmJlciB3aGVuIHBvc3NpYmxlLgoKVGh1IFNlcCAxNiAxODo0NDo0OCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsaWJnY2MyLmMgKF9fZG9fZ2xvYmFsX2N0b3JzKTogQ2FsbCBhdGV4aXQgd2l0aCBvbmUgYXJnLgoKCSogc3BhcmMvc3Vub3M0LmggKG9uX2V4aXQpOiBXcmFwIHByb3RvdHlwZSBwYXJhbWV0ZXJzIGluIFBBUkFNUygpLgoJRGVmaW5lIEhBVkVfT05fRVhJVC4KClRodSBTZXAgMTYgMTg6MDY6MzUgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3lzdGVtLmggKENUWVBFX0NPTlYsIFRPVVBQRVIsIFRPTE9XRVIpOiBOZXcgbWFjcm9zLiAgVXNlCglDVFlQRV9DT05WIGluIGFsbCBjdHlwZSBtYWNyb3MuCgoJKiBjY2NwLmMgKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBVc2UgdXBwZXJjYXNlIGN0eXBlIG1hY3JvCglmcm9tIHN5c3RlbS5oLgoKCSogY2V4cC55IChpbml0aWFsaXplX3JhbmRvbV9qdW5rKTogTGlrZXdpc2UuCgoJKiBjNHguYyAoYzR4X2ludGVycnVwdF9mdW5jdGlvbl9wLCBjNHhfaGFuZGxlX3ByYWdtYSk6IExpa2V3aXNlLgoKCSogaTM3MC5jIChoYW5kbGVfcHJhZ21hKTogTGlrZXdpc2UuCgoJKiBpMzcwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYsIEFTTV9PVVRQVVRfQVNDSUkpOiBMaWtld2lzZS4KCgkqIHY4NTAuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IExpa2V3aXNlLgoKCSogZG9wcmludC5jIChfZG9wcm50KTogTGlrZXdpc2UuCgoJKiBmaXhpbmMvZml4aW5jbC5jIChtYWluLCBxdW90ZWRfZmlsZV9leGlzdHMsIGV4dHJhY3RfcXVvdGVkX2ZpbGVzKToKCUxpa2V3aXNlLgoKCSogZml4aW5jL3NlcnZlci5jIChsb2FkX2RhdGEpOiBMaWtld2lzZS4KCgkqIGZvbGQtY29uc3QuYyAocmVhbF9oZXhfdG9fZik6IExpa2V3aXNlLgoKCSogZ2VuYXR0ci5jICh3cml0ZV91cGNhc2UsIGdlbl9hdHRyKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRydGFiLmMgKGNvbnZlcnRfY29uc3Rfc3ltYm9sX3JlZiwgZXZhbHVhdGVfZXFfYXR0ciwKCXdyaXRlX3VwY2FzZSk6IExpa2V3aXNlLgoKCSogZ2VuZW1pdC5jIChwcmludF9jb2RlKTogTGlrZXdpc2UuCgoJKiBnZW5vcGluaXQuYyAoZ2VuX2luc24pOiBMaWtld2lzZS4KCgkqIGdlbnBlZXAuYyAocHJpbnRfY29kZSk6IExpa2V3aXNlLgoKCSogZ2VucmVjb2cuYyAocHJpbnRfY29kZSk6IExpa2V3aXNlLgoKCSogb3B0YWJzLmMgKGluaXRfbGliZnVuY3MpOiBMaWtld2lzZS4KClRodSBTZXAgMTYgMTQ6MDM6MzIgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emUpOiBLZWVwIHRoZSBsaXN0IG9mIG5vdGVzIG9yZ2FuaXplZAoJaW4gcGFpcnMuCgkocmVlbWl0X25vdGVzKTogTGlrZXdpc2UuCgpUaHUgU2VwIDE2IDExOjUwOjUyIDE5OTkgIEFsZXggU2FtdWVsICA8c2FtdWVsQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBnZ2MuaCAoZ2djX3Jvb3QpOiBNb3ZlIHRvIGdnYy1jb21tb24uYy4KCShyb290cyk6IFJlbW92ZS4KCShnZ2NfbWFya19ydHgsIGdnY19tYXJrX3RyZWUpOiBDaGFuZ2UgdG8gbWFjcm8uCgkoZ2djX21hcmtfcnR2ZWMsIGdnY19tYXJrX3RyZWVfdmFycmF5KTogRGVjbGFyZSBleHRlcm4uCgkoZ2djX21hcmtfdHJlZV9oYXNoX3RhYmxlLCBnZ2NfbWFya19zdHJpbmcsIGdnY19tYXJrKTogTGlrZXdpc2UuCgkoZ2djX21hcmtfcm9vdHMsIGdnY19tYXJrX3J0eF9jaGlsZHJlbiwgZ2djX21hcmtfdHJlZV9jaGlsZHJlbik6IE5ldy4KCSogZ2djLWNvbW1vbi5jIChnZ2Nfcm9vdCk6IE1vdmUgZnJvbSBnZ2MuaC4KCShyb290cyk6IERlY2xhcmUsIHN0YXRpYy4KCShnZ2NfbWFya19ydHgsIGdnY19tYXJrX3RyZWUpOiBSZW5hbWVkIHRvLi4uCgkoZ2djX21hcmtfcnR4X2NoaWxkcmVuLCBnZ2NfbWFya190cmVlX2NoaWxkcmVuKTogRG9uJ3QgY2hlY2sgZm9yCgludWxsIG9yIGNoZWNrL3NldCBtYXJrIGJpdC4KCShnZ2NfbWFya19yb290cyk6IE5ldy4KCSogZ2djLXNpbXBsZS5jIChnZ2NfY29sbGVjdCk6IENhbGwgZ2djX21hcmtfcm9vdHMuCgpUaHUgU2VwIDE2IDExOjM3OjMyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtMzJyLmM6IEluY2x1ZGUgdG9wbGV2LmguCgkoKik6IEFkZCBBVFRSSUJVVEVfVU5VU0VEIGFzIG5lZWRlZCB0byBhcmd1bWVudHMuCgkoZ2VuX2NvbXBhcmUpOiBSZW5hbWUgc3dhcF9wIHRvIG11c3Rfc3dhcCB0byBtYXRjaCB1c2VzLgoJQWRkIGRlZmF1bHQgYWJvcnQgY2FzZS4KCShtMzJyX291dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzLgoJKG0zMnJfcHJpbnRfb3BlcmFuZCk6IFVzZSBIT1NUX1dJREVfSU5UX1BSSU5UX0hFWC4KCSogbTMyci5oIChQUk9UTywgU1RESU9fUFJPVE8pOiBSZW5hbWUgWFBST1RPOyB1bmNvbmRpdGlvbmFsbHkKCWRlZmluZSB0byBlbXB0eSBwYXJhbWV0ZXIgbGlzdC4gIFVwZGF0ZSBhbGwgdXNlcy4KCShwcmVkaWNhdGUgZGVjbHMpOiBVc2UgZW51bSBtYWNoaW5lX21vZGUgbm90IGludC4KCSogbTMyci5tZCAobW92c2kpOiBDYWxsIGFib3J0LCBub3QgZmF0YWxfaW5zbi4KCSh6ZXJvX2JyYW5jaF9pbnNuLCByZXZfemVyb19icmFuY2hfaW5zbik6IEFkZCBkZWZhdWx0IGFib3J0IGNhc2UuCgoxOTk5LTA5LTE0ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKG1vdnNpX3Vzdyk6IGlmIG9wZXJhbmQgMSBpcyBjb25zdF9pbnQgMCwKCXVzZSAkMCBpbnN0ZWFkIG9mIDAuCgpUaHUgU2VwIDE2IDEwOjUzOjM2IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChvcmRlcl9yZWdzX2Zvcl9yZWxvYWQpOiBNb3ZlIGhhcmRfcmVnX25fdXNlcwoJY29tcHV0YXRpb24gb3V0IG9mIGxvb3Agb3ZlciBoYXJkIHJlZ3MuCgpXZWQgU2VwIDE1IDIxOjM3OjA2IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBmdW5jdGlvbi5jIChpZGVudGlmeV9ibG9ja3MpOiBEb24ndCBzaGFkb3cgYSB2YXJpYWJsZSBpbiBhbgoJb3V0ZXIgc2NvcGUuCgkqIGludGVncmF0ZS5jIChpbnRlZ3JhdGVfZGVjbF90cmVlKTogRG9uJ3QgdXNlIHB1c2hsZXZlbCwKCXB1c2hkZWNsLCBvciBwb3BsZXZlbCB0byBidWlsZCB1cCB0aGUgbmV3IEJMT0NLIHRyZWUuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGludGVncmF0ZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgpXZWQgU2VwIDE1IDIxOjIwOjM4IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjLXR5cGVjay5jIChxdWFsaWZ5X3R5cGUpOiBNZXJnZSBxdWFsaWZpZXJzIGZyb20gYm90aCB0eXBlcy4KCjE5OTktMDktMTUgIEJyYWQgTHVjaWVyICA8bHVjaWVyQG1hdGgucHVyZHVlLmVkdT4KCgkqIHRvcGxldi5jOiBBbGxvdyAtZltuby1dbWF0aC1lcnJubyB0byBzZXQgKGNsZWFyKSBmbGFnX2Vycm5vX21hdGgKCSogaW52b2tlLnRleGk6IERvY3VtZW50IHRoaXMgY2hhbmdlLgoKV2VkIFNlcCAxNSAxNzo1NjowMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAoZnJlZV9lbWl0X3N0YXR1cyk6IERvbid0IGNoZWNrIERFQ0xfREVGRVJfT1VUUFVULgoJRnJlZSB0aGUgc3RydWN0LgoJKG1hcmtfZW1pdF9zdGF0dXMpOiBSZW5hbWVkIGZyb20gbWFya19lbWl0X3N0YXRlLgoJKiBleGNlcHQuYyAobWFya19laF9zdGF0dXMpOiBSZW5hbWVkIGZyb20gbWFya19laF9zdGF0ZS4KCUNoZWNrIG5vdCBudWxsIGJlZm9yZSBtYXJraW5nLgoJKGZyZWVfZWhfc3RhdHVzKTogTmV3LgoJKiBleHByLmMgKG1hcmtfZXhwcl9zdGF0dXMsIGZyZWVfZXhwcl9zdGF0dXMpOiBOZXcuCgkqIGZ1bmN0aW9uLmMgKGZyZWVfbWFjaGluZV9zdGF0dXMpOiBOZXcuCgkoZnJlZV9hZnRlcl9wYXJzaW5nKTogTmV3LgoJKGZyZWVfYWZ0ZXJfY29tcGlsYXRpb24pOiBNb3ZlIGJpdHMgdG8gZnJlZV9hZnRlcl9wYXJzaW5nOyBjYWxsCglmcmVlX2VoX3N0YXR1cywgZnJlZV9leHByX3N0YXR1czsgemVybyB0aGUgbWFya2VkIG1lbWJlcnMgb2YgdGhlCglmdW5jdGlvbiBzdGF0ZS4KCShwcmVwYXJlX2Z1bmN0aW9uX3N0YXJ0KTogTm8gY2FuX2dhcmJhZ2VfY29sbGVjdC4KCUNhbGwgaW5pdF9laF9mb3JfZnVuY3Rpb24uCgkoZXhwYW5kX2R1bW15X2Z1bmN0aW9uX2VuZCk6IEZyZWUgdXAgY3VycmVudF9mdW5jdGlvbiBzdGF0ZS4KCShtYXJrX2Z1bmN0aW9uX3N0YXR1cyk6IFJlbmFtZWQgZnJvbSBtYXJrX2Z1bmN0aW9uX3N0YXRlLgoJKG1hcmtfZnVuY3Rpb25fY2hhaW4pOiBObyBjYW5fZ2FyYmFnZV9jb2xsZWN0LiAgQ2FsbCBtYXJrX2V4cHJfc3RhdHVzLgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBObyBjYW5fZ2FyYmFnZV9jb2xsZWN0LgoJKGZyZWVfbWFjaGluZV9zdGF0dXMsIGZyZWVfYWZ0ZXJfcGFyc2luZyk6IERlY2xhcmUuCgkoZnJlZV9laF9zdGF0dXMsIGZyZWVfZXhwcl9zdGF0dXMpOiBEZWNsYXJlLgoJKiBnZ2MuaCAobWFya19leHByX3N0YXR1cyk6IERlY2xhcmUuCgkqIHN0bXQuYyAoZnJlZV9zdG10X3N0YXR1cyk6IEZyZWUgdGhlIHN0cnVjdC4KCShtYXJrX3N0bXRfc3RhdHVzKTogUmVuYW1lZCBmcm9tIG1hcmtfc3RtdF9zdGF0ZS4KCShpbml0X3N0bXQpOiBEb24ndCBjYWxsIGluaXRfZWguCgkoaW5pdF9zdG10X2Zvcl9mdW5jdGlvbik6IERvbid0IGNhbGwgaW5pdF9laF9mb3JfZnVuY3Rpb24uCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGluaXRfZWguCgkocmVzdF9vZl9jb21waWxhdGlvbik6IEZyZWUgYmFzaWMgYmxvY2sgaW5mbyBiZWZvcmUgZ2djX2NvbGxlY3QuCglDYWxsIGZyZWVfYWZ0ZXJfcGFyc2luZzsgY29uZGl0aW9uYWxseSBjYWxsIGZyZWVfYWZ0ZXJfY29tcGlsYXRpb24uCgkqIHZhcmFzbS5jIChtYXJrX3ZhcmFzbV9zdGF0dXMpOiBSZW5hbWVkIGZyb20gbWFya192YXJhc21fc3RhdGUuCglDaGVjayBub3QgbnVsbCBiZWZvcmUgbWFya2luZy4KCShmcmVlX3ZhcmFzbV9zdGF0dXMpOiBEb24ndCBjaGVjayBERUNMX0RFRkVSX09VVFBVVC4gIEZyZWUgdGhlIHN0cnVjdC4KCldlZCBTZXAgMTUgMTc6NTM6MTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogSW5pdGlhbGl6ZSB3YXJuLgoKV2VkIFNlcCAxNSAxODozNTozOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBQcm9wZXJseSBzZXQgdGhlIG1vZGUgb2YgdGhlIHNjcmF0Y2gKCXJlZ2lzdGVyIHdoZW4gcGVyZm9ybWluZyBzZWNvbmRhcnkgcmVsb2FkcyBmb3IgdGhlIFNBUiByZWdpc3Rlci4KCldlZCBTZXAgMTUgMTU6NTE6NTIgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHJ0bC5oIChOT1RFX0JMT0NLX05VTUJFUik6IFJlcGxhY2Ugd2l0aCAuLi4KCShOT1RFX0JMT0NLKTogTmV3IG1hY3JvLgoJKE5PVEVfQkxPQ0tfTElWRV9SQU5HRV9CTE9DSyk6IFJlbW92ZS4KCSogZnVuY3Rpb24uaCAoaWRlbnRpZnlfYmxvY2tzKTogQ2hhbmdlIHByb3RvdHlwZS4KCSogZnVuY3Rpb24uYyAoaWRlbnRpZnlfYmxvY2tzKTogU2ltcGxpZnkuCgkocmVvcmRlcl9ibG9ja3MpOiBMaWtld2lzZS4KCSogZ2djLWNvbW1vbi5jIChnZ2NfbWFya19ydHgpOiBNYXJrIHRoZSBCTE9DSyBhc3NvY2lhdGVkIHdpdGggYQoJTk9URV9JTlNOX0JMT0NLX3tCRUcsRU5EfS4KCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZSk6IERvbid0IHB1dCBOT1RFX0JMT0NLX05VTUJFUiBvbgoJdGhlIGxpc3Qgb2Ygc2F2ZWQgbm90ZXMgaWYgdGhlIG5vdGUgaXNuJ3QgYQoJTk9URV9JTlNOX0JMT0NLX3tCRUcsRU5EfS4KCShtb3ZlX2luc24xKTogVXNlIE5PVEVfRUhfSEFORExFUiBpbiBjb21tZW50LCByYXRoZXIgdGhhbgoJTk9URV9CTE9DS19OVU1CRVIuCgkocmVlbWl0X25vdGVzKTogQWRqdXN0IHJlY3JlYXRpb24gb2Ygbm90ZXMgdG8gcmVmbGVjdCBuZXcgc2F2ZWQKCW5vdGUgc3RydWN0dXJlLgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogUHJpbnQgdGhlIGFkZHJlc3Mgb2YgdGhlIEJMT0NLIHdoZW4KCXByaW50aW5nIGEgYmxvY2sgbm90ZS4KCSogc3RtdC5jIChibG9ja192ZWN0b3IpOiBSZW1vdmUuCgkoZmluZF9sb29wX3RyZWVfYmxvY2tzKTogU2ltcGxpZnkuCgkodW5yb2xsX2Jsb2NrX3RyZWVzKTogTGlrZXdpc2UuCgkqIHRyZWUuaCAocmVvcmRlcl9ibG9jayk6IENoYW5nZSBwcm90b3R5cGUuCgpXZWQgU2VwIDE1IDE0OjM5OjM1IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGdibC1jdG9ycy5oOiBMb3NlIEhBVkVfQVRFWElULiAgRG9uJ3QgZGVmaW5lIE9OX0VYSVQuCgkqIGxpYmdjYzIuYzogTG9zZSBvYnNvbGV0ZSBkZWZuIG9mIFdFQUtfQUxJQVMuCgkoX19iYl9pbml0X2Z1bmMsIF9fYmJfaW5pdF9wcmcpOiBVc2UgYXRleGl0IGluc3RlYWQgb2YgT05fRVhJVC4KCShfX2RvX2dsb2JhbF9kdG9ycyk6IExpa2V3aXNlLiAgRG9uJ3QgbWVzcyB3aXRoIF9leGl0X2R1bW15X2RlY2wuCgkoYXRleGl0LCBleGl0KTogU2ltcGxpZnkuCgkqIHRtLnRleGk6IERvY3VtZW50IE5FRURfQVRFWElUIGFuZCBPTl9FWElULiAgUmVtb3ZlIEhBVkVfQVRFWElULgoJKiBjb25maWcvbG90czogUmVtb3ZlIGRlZm5zIG9mIEhBVkVfQVRFWElULgoKV2VkIFNlcCAxNSAxMDoyNToxMiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2FsbHMuYyAocHJlY29tcHV0ZV9hcmd1bWVudHMpOiBGaXggdHlwbyBpbiBjb21tZW50LgoJKiBleHByLmMgKHByZWV4cGFuZF9jYWxscyk6IERvbid0IHByZWV4cGFuZCB0aGUgY2xlYW51cCBpbiBhCglUQVJHRVRfRVhQUi4KCldlZCBTZXAgMTUgMDk6NTk6NTkgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRzcDE2eHguYyAob3ZlcnJpZGVfb3B0aW9ucyk6IEZpeCB0eXBvcyBpbiBHQyByb290IHJlZ2lzdHJhdGlvbi4KCldlZCBTZXAgMTUgMTU6MjM6MjggMTk5OSAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oIChNQUtFX0RFQ0xfT05FX09OTFkpOiBDb3B5IGRlZmluaXRpb24KCWZyb20gY29uZmlnL3N2cjQuaC4KCShVTklRVUVfU0VDVElPTl9QLCBVTklRVUVfU0VDVElPTik6IExpa2V3aXNlLgoJKEZVTkNUSU9OX1BST0ZJTEVSKTogUmVkZWZpbmUgYXBwcm9wcmlhdGVseSBmb3IgTGludXguCgkoQ0MxX1NQRUMpOiBMaWtld2lzZS4KCldlZCBTZXAgMTUgMTA6MDk6NDggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2VuYXR0ci5jIChtYWluKTogQWRkIGV4dGVybiBwcm90b3R5cGUuICBDYWxsIHJldHVybiwgbm90IGV4aXQuCgkqIGdlbmF0dHJ0YWIuYyAobWFpbik6IExpa2V3aXNlLgoJKiBnZW5jaGVjay5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbmNvZGVzLmMgKG1haW4pOiBMaWtld2lzZS4KCSogZ2VuY29uZmlnLmMgKG1haW4pOiBMaWtld2lzZS4KCSogZ2VuZW1pdC5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbmV4dHJhY3QuYyAobWFpbik6IExpa2V3aXNlLgoJKiBnZW5mbGFncy5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbmdlbnJ0bC5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbm9waW5pdC5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbnBlZXAuYyAobWFpbik6IExpa2V3aXNlLgoJKiBnZW5yZWNvZy5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRyLmMgKGdldF9pbnNuX25hbWUpOiBNYXJrIHBhcmFtZXRlciB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkqIGdlbmF0dHJ0YWIuYyAoZ2V0X2luc25fbmFtZSk6IExpa2V3aXNlLgoJKiBnZW5jb2Rlcy5jIChnZXRfaW5zbl9uYW1lKTogTGlrZXdpc2UuCgkqIGdlbmNvbmZpZy5jIChnZXRfaW5zbl9uYW1lKTogTGlrZXdpc2UuCgkqIGdlbmVtaXQuYyAoZ2V0X2luc25fbmFtZSk6IExpa2V3aXNlLgoJKiBnZW5leHRyYWN0LmMgKGdldF9pbnNuX25hbWUpOiBMaWtld2lzZS4KCSogZ2VuZmxhZ3MuYyAoZ2V0X2luc25fbmFtZSk6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYyAoZ2V0X2luc25fbmFtZSk6IExpa2V3aXNlLgoJKiBnZW5wZWVwLmMgKGdldF9pbnNuX25hbWUpOiBMaWtld2lzZS4KCgkqIGdlbmNoZWNrLmMgKHVzYWdlKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkqIGdlbmV4dHJhY3QuYyAocHJpbnRfcGF0aCk6IENvbnN0aWZ5IGEgY2hhciouCgkqIGdlbm9waW5pdC5jIChvcHRhYnMpOiBMaWtld2lzZS4KCSogZ2Vub3V0cHV0LmMgKG9wZXJhbmRfZGF0YSwgZGF0YSwgb3V0cHV0X3ByZWRpY2F0ZV9kZWNscywKCWNvbXBhcmVfb3BlcmFuZHMpOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYyAod3JpdGVfdHJlZSk6IEFkZCBkZWZhdWx0IGNhc2UgaW4gc3dpdGNoLgoKV2VkIFNlcCAxNSAwOTo1OToxNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBydGwuaCAoZ2V0X2luc25fbmFtZSwgcHJpbnRfcnRsX3dpdGhfYmIpOiBBZGQgcHJvdG90eXBlcy4KCgkqIHByaW50LXJ0bC5jIChnZXRfaW5zbl9uYW1lKTogUmVtb3ZlIHByb3RvdHlwZS4KCgkqIHRvcGxldi5oIChwcm9nbmFtZSk6IERlY2xhcmUgY29uc3QuCgoJKiB0b3BsZXYuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcsIGluaXRfb2JzdGFja3MsIGluaXRfdHJlZV9jb2RlcywKCWluaXRfcmVncywgaW5pdF9vcHRhYnMsIGluaXRfc3RtdCwgaW5pdF9yZWdfc2V0cywgZHVtcF9mbG93X2luZm8sCglkdW1wX3NjaGVkX2luZm8sIGR1bXBfbG9jYWxfYWxsb2MsIHJlZ3NldF9yZWxlYXNlX21lbW9yeSwKCXByaW50X3J0bCwgcHJpbnRfcnRsX3dpdGhfYmIsIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiwKCWVycm9yX3dpdGhfZmlsZV9hbmRfbGluZSwgZXJyb3Jfd2l0aF9kZWNsLCBlcnJvcl9mb3JfYXNtLCBlcnJvciwKCWZhdGFsLCB3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSwgd2FybmluZ193aXRoX2RlY2wsIHdhcm5pbmcsCglwZWR3YXJuLCBwZWR3YXJuX3dpdGhfZGVjbCwgcGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUsIHNvcnJ5KToKCVJlbW92ZSByZWR1bmRhbnQgcHJvdG90eXBlcy4KCgkobm90aWNlLCBjaGVja19sYW5nX29wdGlvbiwgcmVwb3J0X2ZpbGVfYW5kX2xpbmUsIHZub3RpY2UsCgltYXJrX2ZpbGVfc3RhY2spOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShzZXRfZmF0YWxfZnVuY3Rpb24pOiBBZGQgcHJvdG90eXBlLgoJKHZub3RpY2UsIHJlcG9ydF9maWxlX2FuZF9saW5lLCBzZXRfZmF0YWxfZnVuY3Rpb24sCgljaGVja19sYW5nX29wdGlvbik6IENvbnN0aWZ5IGEgY2hhciouCgkobWFpbik6IFByb3RvdHlwZS4gIENhbGwgcmV0dXJuLCBub3QgZXhpdC4KCldlZCBTZXAgMTUgMDk6NTA6MTggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWNsb2NhbC5tNCAoQUNfR0NDX0NfTE9OR19ET1VCTEUpOiBOZXcgbWFjcm8uCgoJKiBjb25maWd1cmUuaW4gKEFDX0dDQ19DX0xPTkdfRE9VQkxFKTogQ2FsbCBpdC4KCgkqIGdhbnNpZGVjbC5oIChIQVZFX0xPTkdfRE9VQkxFKTogRGVmaW5lIGlmIGdjYyBmb3Igc3RhZ2UyLgoKCSogZ2djLXNpbXBsZS5jIChIQVZFX0xPTkdfRE9VQkxFKTogVGVzdCBiZWZvcmUgdXNpbmcgbG9uZyBkb3VibGUuCgpXZWQgU2VwIDE1IDExOjA0OjQzIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogRGVsZXRlIGFyZyBTRUNPTkRfVElNRS4gIERvbid0IHRlc3QgaXQsCgliZWhhdmUgYXMgaWYgaXQncyB6ZXJvIGluIGFsbCBjYXNlcy4KCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBBZGp1c3QgY2FsbCB0byBhc3NpZ25fcGFybXMuCgkqIHRyZWUuaCAoYXNzaWduX3Bhcm1zKTogQWRqdXN0IHByb3RvdHlwZS4KCSogb2JqYy9vYmpjLWFjdC5jIChoYWNrX21ldGhvZF9wcm90b3R5cGUpOiBBZGp1c3QgY2FsbCB0bwoJYXNzaWduX3Bhcm1zLgoKVHVlIFNlcCAxNCAyMTo0NzowNiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjc2UuYyAoRklYRURfQkFTRV9QTFVTX1ApOiBEbyBub3QgY29uc2lkZXIgcmVmZXJuZWNlcyB0bwoJYXJnX3BvaW50ZXJfcnR4IGZpeGVkIGlmIHRoZSBhcmd1bWVudCBwb2ludGVyIHJlZ2lzdGVyIGlzCglub3QgZml4ZWQuCgkoTk9OWkVST19CQVNFX1BMVVNfUCk6IExpa2V3aXNlLgoKVHVlIFNlcCAxNCAyMDoyNjowMiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnRsLmRlZiAobWF0Y2hfaW5zbiwgbWF0Y2hfaW5zbjIpOiBSZW1vdmUgbWF0Y2hfaW5zbjsgcmVuYW1lCgltYXRjaF9pbnNuMiB0byBtYXRjaF9pbnNuLgoJKiBnZW5yZWNvZy5jIChhZGRfdG9fc2VxdWVuY2UpOiBSZW5hbWUgTUFUQ0hfSU5TTjIuCgpUdWUgU2VwIDE0IDIwOjEwOjI5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoVVNFUl9IKTogUmVtb3ZlIHZhLWZvby5oLgoKCSogZ2luY2x1ZGUve3ZhLWFscGhhLmgsdmEtYXJjLmgsdmEtYzR4LmgsdmEtY2xpcHBlci5oLHZhLWg4MzAwLmgsCgl2YS1pODYwLmgsdmEtaTk2MC5oLHZhLW0zMnIuaCx2YS1tODhrLmgsdmEtbWlwcy5oLHZhLW1uMTAyMDAuaCwKCXZhLW1uMTAzMDAuaCx2YS1wYS5oLHZhLXBwYy5oLHZhLXB5ci5oLHZhLXNoLmgsdmEtc3BhcmMuaCwKCXZhLXNwdXIuaCx2YS12ODUwLmh9OiBSZW1vdmUuCgpUdWUgU2VwIDE0IDE5OjQzOjE2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzcGFyYy9zcGFyYy5tZCAoZWxpZ2libGVfZm9yX3JldHVybl9kZWxheSk6IE5ldyBhdHRyaWJ1dGUuCgkoaW5fcmV0dXJuX2RlbGF5KTogVXNlIGl0IGluc3RlYWQgb2YgbWF0Y2hfaW5zbi4KClR1ZSBTZXAgMTQgMjM6MDU6MzcgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAbHNkLmljLnVuaWNhbXAuYnI+CgoJKiBjb25maWcvYWxwaGEvdmFfbGlzdC5oICh2YS1hbHBoYS5oKTogRG8gbm90IGluY2x1ZGUuCgkoX19nbnVjX3ZhX2xpc3QpOiBUeXBlZGVmIGFzIGluIHZhcmFyZ3MuaC4KClR1ZSBTZXAgMTQgMTg6MTQ6MDMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdnYy1jb21tb24uYyAoZ2djX21hcmtfdHJlZSk6IE1hcmsgREVDTF9TT1VSQ0VfRklMRSBhbmQKCURFQ0xfTElWRV9SQU5HRV9SVEwuCgpUdWUgU2VwIDE0IDE2OjQ3OjA4IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2VoX3JlZ2lvbl9zdGFydF9mb3JfZGVjbCk6IFVzZSBOT1RFX0VIX0hBTkRMRVIsCglub3QgTk9URV9CTE9DS19OVU1CRVIuCgkoZXhwYW5kX2VoX3JlZ2lvbl9lbmQpOiBMaWtld2lzZS4KCShmaW5kX2V4Y2VwdGlvbl9oYW5kbGVyX2xhYmVscyk6IExpa2V3aXNlLgoJKHNjYW5fcmVnaW9uKTogTGlrZXdpc2UuCgkoZXhjZXB0aW9uX29wdGltaXplKTogTGlrZXdpc2UuCgkodXBkYXRlX3JldGhyb3dfcmVmZXJlbmNlcyk6IExpa2V3aXNlLgoJKHNldF9pbnNuX2VoX3JlZ2lvbik6IExpa2V3aXNlLgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBMaWtld2lzZS4KCSogZmxvdy5jIChtYWtlX2VkZ2VzKTogTGlrZXdpc2UuCgkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBMaWtld2lzZS4KClR1ZSBTZXAgMTQgMTY6MzA6MTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdpbmNsdWRlL3N0ZGFyZy5oLCBnaW5jbHVkZS92YXJhcmdzLmg6IEltcGxlbWVudCBpbgoJdGVybXMgb2YgYnVpbHRpbiBmdW5jdGlvbnMgYW5kIHR5cGVzLgoKCSogbWlwcy5jIChtaXBzX2J1aWxkX3ZhX2xpc3QpOiBOZXcuCgkobWlwc192YV9zdGFydCwgbWlwc192YV9hcmcpOiBOZXcuCgkqIG1pcHMuaCAoQlVJTERfVkFfTElTVF9UWVBFKTogTmV3LgoJKEVYUEFORF9CVUlMVElOX1ZBX1NUQVJULCBFWFBBTkRfQlVJTFRJTl9WQV9BUkcpOiBOZXcuCgoJKiBzaC5jIChzaF9idWlsdGluX3NhdmVyZWdzKTogVXNlIGdldF92YXJhcmdzX2FsaWFzX3NldC4KCShzaF9idWlsZF92YV9saXN0LCBzaF92YV9zdGFydCwgc2hfdmFfYXJnKTogTmV3LgoJKiBzaC5oIChCVUlMRF9WQV9MSVNUX1RZUEUpOiBOZXcuCgkoRVhQQU5EX0JVSUxUSU5fVkFfU1RBUlQsIEVYUEFORF9CVUlMVElOX1ZBX0FSRyk6IE5ldy4KClR1ZSBTZXAgMTQgMTY6MjA6MjQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlY29nLmggKHN0cnVjdCByZWNvZ19kYXRhKTogTWFrZSBkdXBfbnVtLCBvcGVyYW5kX2FkZHJlc3NfcCwKCW5fb3BlcmFuZHMsIG5fZHVwcywgbl9hbHRlcm5hdGl2ZXMgYGNoYXInIGluc3RlYWQgb2YgYHVuc2lnbmVkIGNoYXInLgoJKHN0cnVjdCBpbnNuX2RhdGEpOiBMaWtld2lzZSB3aXRoIG5fb3BlcmFuZHMsIG5fZHVwcywKCW5fYWx0ZXJuYXRpdmVzLCBvdXRwdXRfZm9ybWF0LgoJKiByZWdjbGFzcy5jIChzY2FuX29uZV9pbnNuKTogQ2FzdCBuX29wZXJhbmRzIHRvIGludCBiZWZvcmUKCWFyaXRobWV0aWMgaW5zaWRlIGNvbXBhcmlzb24uCgpUdWUgU2VwIDE0IDE1OjEzOjM2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoY29tcGlsZV9mdW5jdGlvbik6IFVuY29uZGl0aW9uYWxseSBlbWl0IG5vcC4KClR1ZSBTZXAgMTQgMTQ6NDE6NDcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogaGFpZmEtc2NoZWQuYyAoYWN0dWFsX2hhemFyZCk6IE1vdmUgZGVjbGFyYXRpb24gb2YgdmFyaWFibGUKCWB0aGlzX2Nvc3QnIGludG8gdGhlIHNjb3BlIHdoZXJlIGl0IGlzIHVzZWQuCgpUdWUgU2VwIDE0IDE0OjE0OjI4IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtcHJhZ21hLmMgKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiBXcmFwIHZhcmlhYmxlcyBgbmFtZScgYW5kCglgdmFsdWUnIGluIEhBTkRMRV9QUkFHTUFfV0VBSy4gIFdyYXAgdmFyaWFibGUgYGFsaWduJyBpbgoJSEFORExFX1BSQUdNQV9QQUNLfHxIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AuCgoJKiBnZW5yZWNvZy5jIChtYWtlX2luc25fc2VxdWVuY2UpOiBDYWxsIG1lbXNldCwgbm90IGJ6ZXJvLgoKCSoganVtcC5jIChmaW5kX2luc2VydF9wb3NpdGlvbik6IERvbid0IGRlY2xhcmUgb3IgZGVmaW5lIHVubGVzcwoJIUhBVkVfY29uZGl0aW9uYWxfYXJpdGhtZXRpYy4KCShyZXR1cm5qdW1wX3BfMSwgZGVsZXRlX3ByaW9yX2NvbXB1dGF0aW9uKTogQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoKCSogbWlwcy10ZHVtcC5jIChmYXRhbCwgZmFuY3lfYWJvcnQsIG1haW4pOiBBZGQgZXh0ZXJuIHByb3RvdHlwZXMuCgoJKiByZWNvZy5jIChvZmZzZXR0YWJsZV9hZGRyZXNzX3ApOiBQcm90b3R5cGUgZnVuY3Rpb24gcG9pbnRlci4KCShwcmVwcm9jZXNzX2NvbnN0cmFpbnRzKTogQ2FsbCBtZW1zZXQsIG5vdCBiemVyby4KCgkqIHRyZWUuYyAodHJlZV9ub2RlX2tpbmRfbmFtZXMpOiBDb25zdGlmeSBhIGNoYXIqLiAgTWFrZSBzdGF0aWMuCgkoZ2NjX29ic3RhY2tfaW5pdCk6IERvbid0IGRlY2xhcmUuCgkoZml4X3NpemV0eXBlKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkoZ2NjX29ic3RhY2tfaW5pdCk6IFVzZSBwcm90b3R5cGUgY2FzdHMgaW4gY2FsbCB0byBfb2JzdGFja19iZWdpbi4KCSh0cmVlX2NvbnMpOiBDYWxsIG1lbXNldCwgbm90IGJ6ZXJvLgoKCSogdmFyYXNtLmMgKHJlbW92ZV9mcm9tX3BlbmRpbmdfd2Vha19saXN0KTogV3JhcCBkZWNsYXJhdGlvbiBhbmQKCWRlZmluaXRpb24gaW4gbWFjcm8gQVNNX1dFQUtFTl9MQUJFTC4KCShtYXJrX2NvbnN0X2hhc2hfZW50cnkpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KClR1ZSBTZXAgMTQgMTI6MjI6NTAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1sZXguYyAoaGFuZGxlX2dlbmVyaWNfcHJhZ21hKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgYycuCgoJKiB1bnJvbGwuYyAoZmluZF9jb21tb25fcmVnX3Rlcm0sIHN1YnRyYWN0X3JlZ190ZXJtLAoJbG9vcF9maW5kX2VxdWl2X3ZhbHVlKTogQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoJKHVucm9sbF9sb29wKTogV3JhcCB2YXJpYWJsZSBgcHJldicgaW4gbWFjcm8gSEFWRV9jYzAuCgkoY29weV9sb29wX2JvZHkpOiBSZW1vdmUgdW5yZWFjaGFibGUgYnJlYWsgc3RhdGVtZW50LgoKCSogc3BhcmMuYyAoc3BhcmNfdmFfYXJnKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgdG1wJy4KCgkqIHNwYXJjLmggKHNwYXJjX3ZhX3N0YXJ0LCBzcGFyY192YV9hcmcpOiBBZGQgZXh0ZXJuIHByb3RvdHlwZXMuCgpUdWUgU2VwIDE0IDE1OjI4OjAwIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCVVuZG8gc29tZSBjaGFuZ2VzIGZyb20gdGhlIGdjYzIgbWVyZ2U6CgkqIHJ0bC5kZWYgKENPTlNUQU5UX1BfUlRYKTogRml4IHRoZSBjb21tZW50IGZvciB0aGlzIHJ0eCBjb2RlLgoJKiBlbWl0LXJ0bC5jIChnZW5fcnR4X1JFRyk6IERvbid0IHRlc3Qgc3BlY2lhbCByZWcgcnR4J3MgZm9yIG51bGwKCXBvaW50ZXJzLgoKCVVuZG8gdGhpcyBjaGFuZ2U6CglTYXQgT2N0ICAzIDA3OjIwOjI4IDE5OTggIFN0ZXBoZW4gTCBNb3NoaWVyICA8bW9zaGllckB3b3JsZC5zdGQuY29tPgoJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBEaXNhYmxlIG9wdGltaXphdGlvbiBvZgoJaW5pdGlhbGl6ZWQgZmxvYXQtaW50IHVuaW9uIGlmIHRoZSB2YWx1ZSBpcyBhIE5hTi4KClR1ZSBTZXAgMTQgMDQ6MDM6NDQgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBndGhyLXdpbjMyLmg6IE5ldyBmaWxlLgoKCSogaTM4Ni93aW5udC5jIChpMzg2X3BlX3ZhbGlkX2RlY2xfYXR0cmlidXRlX3ApOiBSZWNvZ25pemUKCXNoYXJlZCBhcyBhIHZhbGlkIGF0dHJpYnV0ZS4KCSogaTM4Ni9jeWd3aW4uaCAoQVNNX09VVFBVVF9TRUNUSU9OKTogSGFuZGxlIHNoYXJlZCBhdHRyaWJ1dGUuCgkqIGV4dGVuZC50ZXhpOiBEb2N1bWVudCBgc2hhcmVkJyB2YXJpYWJsZSBhdHRyaWJ1dGUuCgpUdWUgU2VwIDE0IDA0OjAxOjQ2IDE5OTkgIExvcmVuIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CgoJKiBjb25maWd1cmUuaW46IEhhbmRsZSAtLWVuYWJsZS10aHJlYWRzIG9uIEZyZWVCU0QuCgkqIGNvbmZpZ3VyZTogUmVidWl0LgoKVHVlIFNlcCAxNCAwMzo1ODo0NCAxOTk5ICBBbmRyZWFzIEphZWdlciAgPGFqQGFydGh1ci5yaGVpbi1uZWNrYXIuZGU+CgoJKiBjb25maWd1cmUuaW46IEFkZCBjcnRiZWdpblMubywgY3J0ZW5kUy5vIGZvciBtaXBzLWxpbnV4OyBhZGQKCXRocmVhZCBzdXBwb3J0LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpUdWUgU2VwIDE0IDAzOjQ3OjIzIDE5OTkgIEpvZWwgU2hlcnJpbGwgPGpvZWxAT0FSY29ycC5jb20+CgkJCSAgQ2hhcmxlcy1BbnRvaW5lIEdhdXRoaWVyIDxjaGFybGVzLmdhdXRoaWVyQGlpdC5ucmMuY2E+CgkJCSAgUm9zaW1pbGRvIERhU2lsdmEgPHJkYXNpbHZhQGNvbm5lY3R0ZWwuY29tPgoKCSogY29uZmlndXJlLmluIChtNjhrLSotcnRlbXNjb2ZmKik6IEFkZGVkLgoJKiBjb25maWd1cmUuaW4gKG1pcHM2NG9yaW9uLSotcnRlbXMqKTogQ29udmVydGVkIHRvIEVMRi4KCSogY29uZmlndXJlLmluIChzcGFyYy0qLXJ0ZW1zYW91dCopOiBBZGRlZCBhcyBhbGlhcyBmb3Igb2xkCglzcGFyYy1ydGVtcyBjb25maWd1cmF0aW9uLgoJKiBjb25maWd1cmUuaW4gKHNwYXJjLSotcnRlbXNlbGYqKTogQWRkZWQuCgkqIGNvbmZpZ3VyZS5pbiAoc3BhcmMtKi1ydGVtcyopOiBOb3cgRUxGIG5vdCBhLm91dC4KCSogY29uZmlnL2kzODYvcnRlbXMuaDogQWRkZWQgY29tbWVudC4KCSogY29uZmlnL3NwYXJjL3J0ZW1zZWxmLmg6IE5ldyBmaWxlLgoKCSogY29uZmlndXJlLmluIChtNjhrLXJ0ZW1zZWxmKTogQWRkZWQuCgkqIGNvbmZpZy9lbGZvcy5oOiBBZGRlZCBpZm5kZWYgd3JhcHBlciBmb3IgRFdBUkYyX0RFQlVHR0lOR19JTkZPCglhbmQgRFdBUkZfREVCVUdHSU5HX0lORk8uCgkqIGNvbmZpZy9tNjhrL2NydGkuczogTmV3IGZpbGUuCgkqIGNvbmZpZy9tNjhrL2NydG4uczogTmV3IGZpbGUuCgkqIGNvbmZpZy9tNjhrL3QtY3J0c3R1ZmY6IE5ldyBmaWxlLgoJKiBjb25maWcvbTY4ay9ydGVtc2VsZi5oOiBOZXcgZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAoaVtbMzQ1NjddXTg2LSotcnRlbXNlbGYqKTogTm93IHVzZXMgY3J0c3R1ZmYgZm9yCglnbG9iYWwgY3Rvci9kdG9yIGFuZCBDKysgZXhjZXB0aW9uIGhhbmRsaW5nLgoJKiBjb25maWcvaTM4Ni9ydGVtc2VsZi5oOiBOb3cgdXNlcyBjcnRzdHVmZiAoY3J0aS5vICsgY3J0YmVnaW4ubykKCWZvciBTVEFSVEZJTEVfU1BFQyBhbmQgY3J0c3R1ZmYgKGNydGVuZC5vICsgY3J0bi5vKSBmb3IKCUVOREZJTEVfU1BFQy4KCSogY29uZmlnL2kzODYvdC1ydGVtcy1pMzg2OiBOZXcgRmlsZS4KClR1ZSBTZXAgMTQgMDk6NDc6NDEgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogUmV0dXJuIHJpZ2h0IGF3YXkgaWYgdGhlIGNhc2Ugc3RhY2sgaXMKCWVtcHR5LgoKVHVlIFNlcCAxNCAwMTo0NzoxOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAodmVyc2lvbi5jKTogUmVtb3ZlIHJ1bGUgaW5jb3JyZWN0bHkgYnJvdWdodCBpbiBmcm9tCgl0aGUgZ2NjMiBtZXJnZS4KClR1ZSBTZXAgMTQgMDE6NDI6MjcgMTk5OSAgTWFyYyBFc3BpZSA8ZXNwaWVAY3ZzLm9wZW5ic2Qub3JnPgoKCSogTWFrZWZpbGUuaW46ICBQcmVwZW5kICQoU0hFTEwpIHRvIG1vdmUtaWYtY2hhbmdlIGNhbGxzLgoJKiBtc2Rvcy90b3Auc2VkOiAgVGFrZSBpbnRvIGFjY291bnQgYSBwcmVwZW5kZWQgJChTSEVMTCkgdG8KCW1vdmUtaWYtY2hhbmdlLgoJKiB3aW5udC9jb25maWctbnQuc2VkOiAgTGlrZXdpc2UuICBLaWxsIGJvZ3VzIHN1YnN0aXR1dGlvbi4KCgkqIG9iamMvTWFrZS1sYW5nLmluOiBQcmVwZW5kICQoU0hFTEwpIHRvIG1vdmUtaWYtY2hhbmdlIGNhbGxzLgoKVHVlIFNlcCAxNCAwMTozODo1MiAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdtb3ZlLmMgKGZpeHVwX21hdGNoXzEpOiBEb24ndCBjaGFuZ2UgYW4gdW5jaGFuZ2luZyByZWdpc3Rlci4KCShzdGFibGVfYnV0X2Zvcl9wKTogUmVuYW1lZCB0bzoKCShzdGFibGVfYW5kX25vX3JlZ3NfYnV0X2Zvcl9wKS4gIFJlamVjdCB1bmNoYW5naW5nIHJlZ2lzdGVycyB0b28uCglDaGFuZ2VkIGFsbCBjYWxsZXJzLgoKVHVlIFNlcCAxNCAwMTozMzoxNSAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEb24ndCBjYWxsIHJlZ191c2VkX2JldHdlZW5fcCBpZiB0aGUKCWluc24gZnJvbSBCTDIgaXMgYWZ0ZXIgdGhlIGluc24gZnJvbSBCTC4KCk1vbiBTZXAgMTMgMjE6MDY6MDEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlY29nLmggKElOU05fT1VUUFVUX0ZPUk1BVF8qKTogTmV3LgoJKHN0cnVjdCBpbnNuX2RhdGEpOiBNZXJnZSBgdGVtcGxhdGUnIGFuZCBgb3V0ZnVuJyBpbnRvIGBvdXRwdXQnLgoJQWRkIGBvdXRwdXRfZm9ybWF0Jy4KCSogZ2Vub3V0cHV0LmMgKElOU05fT1VUUFVUX0ZPUk1BVF8qKTogTmV3LgoJKHN0cnVjdCBkYXRhKTogUmVtb3ZlIGBvdXRmdW4nOyBhZGQgYG91dHB1dF9mb3JtYXQnLgoJKG5hbWVfZm9yX2luZGV4KTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKG91dHB1dF9pbnNuX2RhdGEpOiBIYW5kbGUgb3V0cHV0IGZvcm1hdHMuCgkocHJvY2Vzc190ZW1wbGF0ZSk6IEVtaXQgdGhlIGJhcmUgYXJyYXkgZm9yIEAuCgkoZ2VuX2V4cGFuZCwgZ2VuX3NwbGl0KTogU2V0IG91dHB1dF9mb3JtYXQgdG8gTk9ORS4KCSogb3V0cHV0LmggKGdldF9pbnNuX3RlbXBsYXRlKTogRGVjbGFyZS4KCSogZmluYWwuYyAoZ2V0X2luc25fdGVtcGxhdGUpOiBOZXcuCgkoZmluYWxfc2Nhbl9pbnNuKTogVXNlIGl0LgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogTGlrZXdpc2UuCgoJKiBjNHgvYzR4LmMgKGM0eF9wcm9jZXNzX2FmdGVyX3JlbG9hZCk6IExpa2V3aXNlLgoJKiBpODYwL2k4NjAuYyAob3V0cHV0X2RlbGF5ZWRfYnJhbmNoKTogTGlrZXdpc2UuCgkob3V0cHV0X2RlbGF5X2luc24pOiBMaWtld2lzZS4KCjE5OTktMDktMTMgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGxzZC5pYy51bmljYW1wLmJyPgoKCSogcnRsLmMgKG9ic3RhY2tfYWxsb2NfcnR4KTogUmVtb3ZlZC4KCjE5OTktMDktMTMgMTc6MDMgLTA3MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQGJpdG1vdmVyLmNvbT4KCgkqIGNvbmZpZy9nbWljcm8vZ21pY3JvLm1kOiBEaXNhYmxlIG1vdmUgREYtPkRJIGFub255bW91cyBwYXR0ZXJuLgoKTW9uIFNlcCAxMyAxNToyMTo0NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5jIChjYWxsX2luc25fb3BlcmFuZCk6IFJlamVjdCBjb25zdF9pbnQuCgkoZXhwYW5kZXJfY2FsbF9pbnNuX29wZXJhbmQpOiBVc2UgY2FsbF9pbnNuX29wZXJhbmQuCgpNb24gU2VwIDEzIDE3OjQ0OjI4IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdjYy5jIChnZXRydXNhZ2UpOiBXcmFwIHByb3RvdHlwZSBhcmd1bWVudHMgaW4gUFJPVE8oKS4KCjE5OTktMDktMTMgMTI6MTggLTA3MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQGJpdG1vdmVyLmNvbT4KCgkqIGNvbmZpZy9pMzcwL2kzNzAubWQgKG11bHNpLCBkaXZzaSwgbW9kc2kgYW5vbnltb3VzIGluc25zKToKCVVzZSBESW1vZGUgb3BlcmF0aW9uLgoKMTk5OS0wOS0xMyAxMjoxMyAtMDcwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogZ2NjLmM6IEluY2x1ZGUgc3lzL3Jlc291cmNlLmguCgkocmVwb3J0X3RpbWVzKTogTmV3IGZsYWcuCgkoZXhlY3V0ZSk6ICBJZiByZXBvcnRfdGltZXMgaXMgc2V0LCBjYWxjdWxhdGUgYW5kIHJlcG9ydCB0aGUKCUNQVSB0aW1lIGNvbnN1bWVkIGJ5IGVhY2ggc3VicHJvY2Vzcy4KCgkocnVzLCBwcnVzKTogTmV3IGdsb2JhbHMuCgkob3B0aW9uX21hcCk6IEFkZCAtLXRpbWUuCgkoZGlzcGxheV9oZWxwKTogRG9jdW1lbnQgLXRpbWUuCgkocHJvY2Vzc19jb21tYW5kKTogU2V0IHJlcG9ydF90aW1lcyBpZiAtdGltZSBpcyBnaXZlbi4KCVR1cm4gb2ZmIC1waXBlIGlmIC10aW1lIGlzIGdpdmVuLgoKCSogaW52b2tlLnRleGk6IERvY3VtZW50IG5ldyBvcHRpb24gLXRpbWUuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBnZXRydXNhZ2UuICBDaGVjayBpZiB3ZSBoYXZlIHRvCglwcm90b3R5cGUgZ2V0cnVzYWdlLgoJKiBhY2NvbmZpZy5oOiBBZGQgTkVFRF9ERUNMQVJBVElPTl9HRVRSVVNBR0UuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCSogY29uZmlnLmluOiBSZWdlbmVyYXRlLgoKTW9uIFNlcCAxMyAxMjo1NzowNiAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjcHBpbml0LmMgKGFwcGVuZF9pbmNsdWRlX2NoYWluKTogSW5pdGlhbGl6ZSAnbmV4dCcgYW5kICdhbGxvYycKCWZpZWxkcy4KCk1vbiBTZXAgMTMgMTA6MDE6MzMgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9mcC1iaXQuYzogRGVmaW5lIExfdGhlbmFuX3NmIG9yIExfdGhlbmFuX2RmIChhcwoJYXBwcm9wcmlhdGUpIGlmIEZJTkVfR1JBSU5FRF9MSUJSQVJJRVMgaXMgbm90IGRlZmluZWQuCgkobmFuKTogUmV0dXJuIF90aGVuYW5fc2Ygb3IgX3RoZW5hbl9kZiBhcyBhcHByb3ByaWF0ZS4KCShMX3RoZW5hbl9zZik6IERlZmluZSBfdGhlbmFuX3NmLgoJKExfdGhlbmFuX2RmKTogRGVmaW5lIF90aGVuYW5fZGYuCgoJKiBNYWtlZmlsZS5pbiAoRlBCSVRfRlVOQ1MpOiBBZGQgX3RoZW5hbl9zZi4KCShEUEJJVF9GVU5DUyk6IEFkZCBfdGhlbmFuX2RmLgoKTW9uIFNlcCAxMyAwOTozODo1MyAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogdHJlZS5jIChmaXhfc2l6ZXR5cGUpOiAgRXhjaGFuZ2UgdGhlIHR5cGVzIGZvciBUWVBFX1NJWkUgYW5kCglUWVBFX1NJWkVfVU5JVC4KClN1biBTZXAgMTIgMjM6Mjg6MjAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGdjYy5vLCBnY2NzcGVjLm8sIGNwcHNwZWMubyk6IERlcGVuZCBvbiBnY2MuaC4KCgkqIGdjYy5oOiBOZXcgZmlsZS4KCShsYW5nX3NwZWNpZmljX2RyaXZlcik6IERvbid0IHRha2UgYSBmdW5jdGlvbiBwb2ludGVyIHBhcmFtZXRlci4KCUFsbCBjYWxsZXJzIGNoYW5nZWQuCgoJKiBnY2MuYzogSW5jbHVkZSBnY2MuaC4KCShkb19zcGVjLCBmYW5jeV9hYm9ydCxsYW5nX3NwZWNpZmljX2RyaXZlcixsYW5nX3NwZWNpZmljX3ByZV9saW5rLAoJbGFuZ19zcGVjaWZpY19leHRyYV9vdXRmaWxlcywgZmF0YWwpOiBEb24ndCBkZWNsYXJlLgoJKG11bHRpbGliX2RlZmF1bHRzX3Jhdyk6IENvbnN0aWZ5LgoJKHJlYWRfc3BlY3MpOiBDYWxsIG1lbXNldCwgcmF0aGVyIHRoYW4gYnplcm8uCgkobWFpbik6IENhbGwgcmV0dXJuLCBub3QgZXhpdC4KCShsb29rdXBfY29tcGlsZXIpOiBDYWxsIG1lbWNweSwgbm90IGJjb3B5LgoJKGZhdGFsKTogTWFrZSBleHRlcm4uCgoJKiBjcHBzcGVjLmM6IEluY2x1ZGUgZ2NjLmguCgkobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBxdW90ZScuICBDb25zdGlmeSBhCgljaGFyKi4gIEFsbCBjYWxscyB0byB0aGUgZnVuY3Rpb24gcG9pbnRlciBwYXJhbWV0ZXIgbm93CglleHBsaWNpdGx5IGNhbGwgYGZhdGFsJy4KCgkqIGdjY3NwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBJbmNsdWRlIGdjYy5oLgoKU3VuIFNlcCAxMiAxOTo1MjoxMCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3IDxyZWFybnNoYUBhcm0uY29tPgoKCSogYXJtLmMgKG5vdGVfaW52YWxpZF9jb25zdGFudHMpOiBVc2UgcmVjb2dfZGF0YS5vcGVyYW5kX3R5cGUKCWZvciByZWNvZ19vcF90eXBlLgoKU3VuIFNlcCAxMiAxNTo1MzoyMCAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIHRyZWUuaCAoYnVpbGRfY29tbW9uX3RyZWVfbm9kZXMsIGJ1aWxkX2NvbW1vbl90cmVlX25vZGVzXzIpOgoJRGVjbGFyZS4KCgkqIHJlbG9hZC5oIChyZWxvYWRfaW4sIHJlbG9hZF9vdXQsIHJlbG9hZF9pbl9yZWcsIHJlbG9hZF9vdXRfcmVnLAoJcmVsb2FkX3JlZ19jbGFzcywgcmVsb2FkX2lubW9kZSwgcmVsb2FkX291dG1vZGUsIHJlbG9hZF9vcHRpb25hbCwKCXJlbG9hZF9ub25ncm91cCwgcmVsb2FkX2luYywgcmVsb2FkX29wbnVtLCByZWxvYWRfc2Vjb25kYXJ5X3AsCglyZWxvYWRfc2Vjb25kYXJ5X2luX3JlbG9hZCwgcmVsb2FkX3NlY29uZGFyeV9vdXRfcmVsb2FkLAoJcmVsb2FkX3NlY29uZGFyeV9pbl9pY29kZSwgcmVsb2FkX3NlY29uZGFyeV9vdXRfaWNvZGUsCglyZWxvYWRfcmVnX3J0eCwgcmVsb2FkX3doZW5fbmVlZGVkKTogRGVsZXRlIGRlY2xhcmF0aW9ucy4KCShzdHJ1Y3QgcmVsb2FkKTogTmV3IHN0cnVjdHVyZS4KCShybGQpOiBEZWNsYXJlIG5ldyBhcnJheS4KCSogcmVsb2FkLmMgKHJlbG9hZF9pbiwgcmVsb2FkX291dCwgcmVsb2FkX2luX3JlZywgcmVsb2FkX291dF9yZWcsCglyZWxvYWRfcmVnX2NsYXNzLCByZWxvYWRfaW5tb2RlLCByZWxvYWRfb3V0bW9kZSwgcmVsb2FkX29wdGlvbmFsLAoJcmVsb2FkX25vbmdyb3VwLCByZWxvYWRfaW5jLCByZWxvYWRfb3BudW0sIHJlbG9hZF9zZWNvbmRhcnlfcCwKCXJlbG9hZF9zZWNvbmRhcnlfaW5fcmVsb2FkLCByZWxvYWRfc2Vjb25kYXJ5X291dF9yZWxvYWQsCglyZWxvYWRfc2Vjb25kYXJ5X2luX2ljb2RlLCByZWxvYWRfc2Vjb25kYXJ5X291dF9pY29kZSwKCXJlbG9hZF9yZWdfcnR4LCByZWxvYWRfd2hlbl9uZWVkZWQpOiBEZWxldGUgZGVmaW5pdGlvbnMuCgkocmxkKTogTmV3IGFycmF5LgoJKHdob2xlIGZpbGUpOiBSZXBsYWNlIHVzZXMgb2YgdGhlIGRlbGV0ZWQgYXJyYXlzIHdpdGggdXNlcyBvZiBybGQuCgkqIHJlbG9hZDEuYyAod2hvbGUgZmlsZSk6IFJlcGxhY2UgdXNlcyBvZiB0aGUgZGVsZXRlZCBhcnJheXMgd2l0aAoJdXNlcyBvZiBybGQuCgkoY2hvb3NlX3JlbG9hZF9yZWdzKTogQ29weSBpbi9vdXQgb2Ygc2F2ZV9yZWxvYWRfcmVnX3J0eCB3aXRoCglleHBsaWNpdCBsb29wcywgbm90IHdpdGggYmNvcHkuCgpTdW4gU2VwIDEyIDA1OjAwOjI0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWNvZy5oIChpbnNuX3RlbXBsYXRlLCBpbnNuX291dGZ1biwgaW5zbl9uX29wZXJhbmRzLCBpbnNuX25fZHVwcywKCWluc25fbl9hbHRlcm5hdGl2ZXMsIGluc25fb3BlcmFuZF9jb25zdHJhaW50LCBpbnNuX29wZXJhbmRfYWRkcmVzc19wLAoJaW5zbl9vcGVyYW5kX21vZGUsIGluc25fb3BlcmFuZF9zdHJpY3RfbG93LCBpbnNuX29wZXJhbmRfcHJlZGljYXRlLAoJaW5zbl9uYW1lKTogRGVsZXRlIGFuZCBjb25zb2xpZGF0ZSBpbnRvIG5ldyBzdHJ1Y3R1cmVzLgoJKGluc25fb3BlcmFuZF9wcmVkaWNhdGVfZm4pOiBOZXcuCgkoaW5zbl9vdXRwdXRfZm4pOiBOZXcuCgkoaW5zbl9nZW5fZm4pOiBOZXcuCgkoc3RydWN0IGluc25fb3BlcmFuZF9kYXRhKTogTmV3LgoJKHN0cnVjdCBpbnNuX2RhdGEpOiBOZXcuCgkoaW5zbl9kYXRhKTogTmV3LgoJKE9VVF9GQ04pOiBVcGRhdGUgZm9yIGluc25fZGF0YSBjaGFuZ2UuCgkqIGJ1aWx0aW5zLmMgKGV4cGFuZF9idWlsdGluX3N0cmxlbik6IExpa2V3aXNlLgoJKGV4cGFuZF9idWlsdGluX21lbWNtcCk6IExpa2V3aXNlLgoJKiBjb21iaW5lLmMgKG1ha2VfZXh0cmFjdGlvbiwgc2ltcGxpZnlfY29tcGFyaXNvbik6IExpa2V3aXNlLgoJKiBjc2UuYyAoY2Fub25fcmVnLCBjc2VfaW5zbik6IExpa2V3aXNlLgoJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSwgcHJvYmVfc3RhY2tfcmFuZ2UpOiBMaWtld2lzZS4KCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCwgZXh0cmFjdF9iaXRfZmllbGQpOiBMaWtld2lzZS4KCShlbWl0X3N0b3JlX2ZsYWcpOiBMaWtld2lzZS4KCSogZXhwci5jIChjb252ZXJ0X21vdmUsIGVtaXRfYmxvY2tfbW92ZSk6IExpa2V3aXNlLgoJKGNsZWFyX3N0b3JhZ2UsIGVtaXRfcHVzaF9pbnNuLCBleHBhbmRfaW5jcmVtZW50KTogTGlrZXdpc2UuCgkoZG9fc3RvcmVfZmxhZyk6IExpa2V3aXNlLgoJKiBleHByLmggKEdFTl9GQ04pOiBMaWtld2lzZS4KCShpbnNuX2dlbl9mdW5jdGlvbik6IERpZS4KCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogVXBkYXRlIGZvciBpbnNuX2RhdGEgY2hhbmdlLgoJKG91dHB1dF9hc21fbmFtZSk6IExpa2V3aXNlLgoJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc18xKTogTGlrZXdpc2UuCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogTGlrZXdpc2UuCgkqIG9wdGFicy5jIChleHBhbmRfYmlub3AsIGV4cGFuZF90d292YWxfYmlub3ApOiBMaWtld2lzZS4KCShleHBhbmRfdW5vcCwgZXhwYW5kX2NvbXBsZXhfYWJzLCBlbWl0X3Vub3BfaW5zbik6IExpa2V3aXNlLgoJKHByZXBhcmVfY21wX2luc24sIHByZXBhcmVfb3BlcmFuZCwgZW1pdF9pbmRpcmVjdF9qdW1wKTogTGlrZXdpc2UuCgkoZW1pdF9jb25kaXRpb25hbF9tb3ZlLCBnZW5fYWRkMl9pbnNuLCBnZW5fc3ViMl9pbnNuKTogTGlrZXdpc2UuCgkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4XzEsIGV4dHJhY3RfaW5zbik6IExpa2V3aXNlLgoJKiByZWdtb3ZlLmMgKGdlbl9hZGQzX2luc24pOiBMaWtld2lzZS4KCSogcmVsb2FkLmMgKHB1c2hfc2Vjb25kYXJ5X3JlbG9hZCwgY29tYmluZV9yZWxvYWRzKTogTGlrZXdpc2UuCgkoZmluZF9yZWxvYWRzLCBmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogTGlrZXdpc2UuCgkoZGVidWdfcmVsb2FkX3RvX3N0cmVhbSk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zLCBnZW5fcmVsb2FkKTogTGlrZXdpc2UuCgkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBMaWtld2lzZS4KCgkqIGM0eC9jNHguYyAoYzR4X3Byb2Nlc3NfYWZ0ZXJfcmVsb2FkKTogTGlrZXdpc2UuCgkqIGk4NjAvaTg2MC5jIChvdXRwdXRfZGVsYXllZF9icmFuY2gsIG91dHB1dF9kZWxheV9pbnNuKTogTGlrZXdpc2UuCgoJKiBwcmludC1ydGwuYyAoaW5zbl9uYW1lX3B0cik6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCShnZXRfaW5zbl9uYW1lKTogRGVjbGFyZS4KCShwcmludF9ydHgpOiBVc2UgaXQuCgkqIGdlbm91dHB1dC5jIChpbnNuX25hbWVfcHRyKTogUmVtb3ZlLgoJKG5leHRfb3BlcmFuZF9udW1iZXIpOiBOZXcuCgkoc3RydWN0IG9wZXJhbmRfZGF0YSk6IE5ldy4KCShudWxsX29wZXJhbmQsIG9kYXRhLCBvZGF0YV9lbmQpOiBOZXcuCgkoc3RydWN0IGRhdGEpOiBVc2Ugc3RydWN0IG9wZXJhbmRfZGF0YS4KCShpZGF0YSwgaWRhdGFfZW5kKTogUmVuYW1lZCBmcm9tIGluc25fZGF0YSBhbmQgZW5kX29mX2luc25fZGF0YS4KCShnZXRfaW5zbl9uYW1lKTogUmVuYW1lZCBmcm9tIG5hbWVfZm9yX2luZGV4LgoJKG91dHB1dF9wcm9sb2d1ZSk6IERlZmluZSBOT19NRF9QUk9UT1RZUEVTLgoJKG91dHB1dF9wcmVkaWNhdGVfZGVjbHMpOiBCcmVhayBvdXQgZnJvbSBvdXRwdXRfZXBpbG9ndWUuCglJdGVyYXRlIG92ZXIgdGhlIG9wZXJhbmRzIGxpc3QuCgkob3V0cHV0X29wZXJhbmRfZGF0YSk6IEJyZWFrIG91dCBmcm9tIG91dHB1dF9lcGlsb2d1ZS4gIEVtaXQKCWp1c3QgdGhlIG9wZXJhbmRzIGxpc3QuCgkob3V0cHV0X2luc25fZGF0YSk6IEJyZWFrIG91dCBmcm9tIG91dHB1dF9lcGlsb2d1ZS4gIEVtaXQganVzdAoJdGhlIGluc24gZGF0YS4KCShvdXRwdXRfZXBpbG9ndWUpOiBSZW1vdmUuCgkob3V0cHV0X2dldF9pbnNuX25hbWUpOiBOZXcuCgkoY29uc3RyYWludHMsIG9wX25fYWx0ZXJuYXRpdmVzLCBwcmVkaWNhdGVzLCBhZGRyZXNzX3ApOiBEaWUuCgkobW9kZXMsIHN0cmljdF9sb3csIHNlZW4pOiBEaWUuCgkoc2Nhbl9vcGVyYW5kcyk6IFRha2UgbmV3IHBhcmFtIGBkJyBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8KCXNldmVuIGdsb2JhbCB2YXJpYWJsZXMuCgkoY29tcGFyZV9vcGVyYW5kcyk6IE5ldy4KCShwbGFjZV9vcGVyYW5kcyk6IE5ldy4KCSh2YWxpZGF0ZV9pbnNuX2FsdGVybmF0aXZlcyk6IFVwZGF0ZSBmb3Igc3RydWN0IGRhdGEgY2hhbmdlLgoJKGdlbl9pbnNuKTogRG9uJ3QgemVybyBvciBjb3B5IDcgZ2xvYmFsIGFycmF5cy4gIFVwZGF0ZSBmb3IKCXNjYW5fb3BlcmFuZHM7IGNhbGwgcGxhY2Vfb3BlcmFuZHMuCgkoZ2VuX3BlZXBob2xlLCBnZW5fZXhwYW5kLCBnZW5fc3BsaXQpOiBMaWtld2lzZS4KCShtYWluKTogVXBkYXRlIGZvciBuZXcgb3V0cHV0IHJvdXRpbmVzLgoKCSogZ2VuYXR0ci5jIChpbnNuX25hbWVfcHRyKTogUmVtb3ZlLgoJKGdldF9pbnNuX25hbWUpOiBOZXcgZnVuY3Rpb24uCgkqIGdlbmF0dHJ0YWIuYywgZ2VuY29kZXMuYywgZ2VuY29uZmlnLmMsIGdlbmVtaXQuYzogTGlrZXdpc2UuCgkqIGdlbmV4dHJhY3QuYywgZ2VuZmxhZ3MuYywgZ2Vub3Bpbml0LmMsIGdlbnBlZXAuYzogTGlrZXdpc2UuCgkqIGdlbnJlY29nLmM6IExpa2V3aXNlLgoKCSogYWxwaGEubWQgKGFkZGRpMyk6IE1ha2UgYHBhdHRlcm4nIGFycmF5IHN0YXRpYy4KClN1biBTZXAgMTIgMjI6MDU6MjEgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoYzR4X3JwdHNfY3ljbGVzX3N0cmluZywKCWM0eF9jcHVfdmVyc2lvbl9zdHJpbmcpOiBDb25zdGlmeSBjaGFyICouCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9ycHRzX2N5Y2xlc19zdHJpbmcsCgljNHhfY3B1X3ZlcnNpb25fc3RyaW5nKTogTGlrZXdpc2UuCgpTYXQgU2VwIDExIDIzOjI4OjMzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHNhdmVfdHJlZV9zdGF0dXMpOiBSZXZlcnQgMTAgU2VwIGNoYW5nZS4KCShyZXN0b3JlX3RyZWVfc3RhdHVzKTogTGlrZXdpc2UuICBDYWxsIG9ic3RhY2tfZnJlZSB3aXRoIE5VTEwKCWJlZm9yZSBmcmVlaW5nIHRoZSBvYnN0YWNrIHByb3Blci4KClNhdCBTZXAgMTEgMjM6MjM6NDYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNzZS5jIChjc2VfbWFpbik6IElmIGdjJ2luZywgY29sbGVjdCBhcm91bmQgY3NlX2Jhc2ljX2Jsb2NrLgoKCSogZ2djLXNpbXBsZS5jIChnZ2NfcG9wX2NvbnRleHQpOiBGb2xkIG91dHN0YW5kaW5nIGJ5dGVzIGludG8KCXN1cnJvdW5kaW5nIGNvbnRleHQuCgpTYXQgU2VwIDExIDE5OjUyOjQzIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmMgKHR5cGVfaGFzaF9jYW5vbik6IFB1dCBhbGwgdHlwZXMgaW4gdGhlIGhhc2gtdGFibGUsIHdoZW4KCUdDJ2luZy4KClNhdCBTZXAgMTEgMTg6Mzc6MDQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlY29nLmggKHN0cnVjdCByZWNvZ19kYXRhLCByZWNvZ19kYXRhKTogTmV3LgoJKHJlY29nX2ZvbyB2YXJpYWJsZXMpOiBLaWxsLgoJKiByZWNvZy5jIChyZWNvZ19vcGVyYW5kLCByZWNvZ19vcGVyYW5kX2xvYyk6IEtpbGwuCgkocmVjb2dfZHVwX2xvYywgcmVjb2dfZHVwX251bSwgcmVjb2dfbl9vcGVyYW5kcyk6IEtpbGwuCgkocmVjb2dfbl9kdXBzLCByZWNvZ19uX2FsdGVybmF0aXZlcywgcmVjb2dfb3BlcmFuZF9tb2RlKTogS2lsbC4KCShyZWNvZ19jb25zdHJhaW50cywgcmVjb2dfb3BfdHlwZSwgcmVjb2dfb3BlcmFuZF9hZGRyZXNzX3ApOiBLaWxsLgoJKHJlY29nX2RhdGEpOiBEZWZpbmUuCgkoZXh0cmFjdF9pbnNuKTogVXBkYXRlIGFsbCByZWNvZ19mb28gcmVmZXJlbmNlcyB0byB1c2UgcmVjb2dfZGF0YS4KCShwcmVwcm9jZXNzX2NvbnN0cmFpbnRzLCBjb25zdHJhaW5fb3BlcmFuZHMpOiBMaWtld2lzZS4KCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuLCBjbGVhbnVwX3N1YnJlZ19vcGVyYW5kcyk6IExpa2V3aXNlLgoJKiBnZW5hdHRydGFiLmMgKG1haW4pOiBMaWtld2lzZS4KCSogZ2VuZXh0cmFjdC5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYyAod3JpdGVfc3Vicm91dGluZSwgbWFpbik6IExpa2V3aXNlLgoJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IExpa2V3aXNlLgoJKiByZWctc3RhY2suYyAocmVjb3JkX2FzbV9yZWdfbGlmZSwgc3Vic3RfYXNtX3N0YWNrX3JlZ3MpOiBMaWtld2lzZS4KCSogcmVnY2xhc3MuYyAoc2Nhbl9vbmVfaW5zbiwgcmVjb3JkX3JlZ19jbGFzc2VzKTogTGlrZXdpc2UuCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSwgZmluZF9tYXRjaGVzLCBmaXh1cF9tYXRjaF8xKTogTGlrZXdpc2UuCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMsIGZpbmRfcmVsb2Fkc190b3BsZXYpOiBMaWtld2lzZS4KCSogcmVsb2FkMS5jIChtYXliZV9maXhfc3RhY2tfYXNtcywgZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IExpa2V3aXNlLgoJKHJlbG9hZF9jc2Vfc2ltcGxpZnlfb3BlcmFuZHMpOiBMaWtld2lzZS4KCgkqIGFyYy9hcmMuYyAoYXJjX2ZpbmFsX3ByZXNjYW5faW5zbik6IExpa2V3aXNlLgoJKiBhcm0vYXJtLmMgKG5vdGVfaW52YWxpZF9jb25zdGFudHMsIGFybV9maW5hbF9wcmVzY2FuX2luc24pOiBMaWtld2lzZS4KCSogaDgzMDAvaDgzMDAuYyAobm90aWNlX3VwZGF0ZV9jYyk6IExpa2V3aXNlLgoJKiBpMzg2L2kzODYuYyAoaXg4Nl9hdHRyX2xlbmd0aF9kZWZhdWx0LCBpeDg2X2FnaV9kZXBlbmRhbnQpOiBMaWtld2lzZS4KCSogaTg2MC9pODYwLmMgKG91dHB1dF9kZWxheWVkX2JyYW5jaCwgb3V0cHV0X2RlbGF5X2luc24pOiBMaWtld2lzZS4KCSogbW4xMDIwMC9tbjEwMjAwLmMgKG5vdGljZV91cGRhdGVfY2MpOiBMaWtld2lzZS4KCSogbW4xMDMwMC9tbjEwMzAwLmMgKG5vdGljZV91cGRhdGVfY2MpOiBMaWtld2lzZS4KCSogcm9tcC9yb21wLmMgKHVwZGF0ZV9jYyk6IExpa2V3aXNlLgoJKiBzcGFyYy9zcGFyYy5jIChjaGVja19waWMpOiBMaWtld2lzZS4KCSogdjg1MC92ODUwLmMgKG5vdGljZV91cGRhdGVfY2MpOiBMaWtld2lzZS4KCgkqIGdlbmVtaXQuYyAobWFpbik6IERvbid0IGRlY2xhcmUgcmVjb2dfb3BlcmFuZC4KClNhdCBTZXAgMTEgMTI6NDE6NTUgMTk5OSAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGdnYy5oIChydHZlY19kZWYpOiBGb3J3YXJkIGRlY2xhcmUuCgkodHJlZV9ub2RlKTogTGlrZXdpc2UuCgkoZ2djX3Jvb3QpOiBEZWZpbmUuCgkocm9vdHMpOiBEZWNsYXJlLgoJKGdnY19zZXRfbWFya19ydHgpOiBBZGQgcHJvdG90eXBlLgoJKGdnY19zZXRfbWFya19ydHZlYyk6IExpa2V3aXNlLgoJKGdnY19zZXRfbWFya190cmVlKTogTGlrZXdpc2UuCgkqIGdnYy1zaW1wbGUuYyAoZ2djX3Jvb3QpOiBEb24ndCBkZWZpbmUuCgkocm9vdHMpOiBEb24ndCBkZWNsYXJlLgoJKGdnY19tYXJrX3J0eCk6IFJlbW92ZS4KCShnZ2NfbWFya19ydHZlYyk6IExpa2V3aXNlLgoJKGdnY19tYXJrX3RyZWUpOiBMaWtld2lzZS4KCShnZ2NfbWFya192YXJyYXkpOiBMaWtld2lzZS4KCShnZ2NfbWFya190cmVlX2hhc2hfdGFibGVfZW50cnkpOiBMaWtld2lzZS4KCShnZ2NfbWFya190cmVlX2hhc2hfdGFibGUpOiBMaWtld2lzZS4KCShnZ2Nfc2V0X21hcnRfcnR4KTogTmV3IGZ1bmN0aW9uLgoJKGdnY19zZXRfbWFya19ydHZlYyk6IExpa2V3aXNlLgoJKGdnY19zZXRfbWFya190cmVlKTogTGlrZXdpc2UuCgkoZ2djX2FkZF9yb290KTogUmVtb3ZlLgoJKGdnY19hZGRfcnR4X3Jvb3QpOiBMaWtld2lzZS4KCShnZ2NfcmVtb3ZlX3RyZWVfcm9vdCk6IExpa2V3aXNlLgoJKGdnY19hZGRfc3RyaW5nX3Jvb3QpOiBMaWtld2lzZS4KCShnZ2NfYWRkX3RyZWVfdmFycmF5X3Jvb3QpOiBMaWtld2lzZS4KCShnZ2NfYWRkX3RyZWVfaGFzaF90YWJsZV9yb290KTogTGlrZXdpc2UuCgkoZ2djX2RlbF9yb290KTogTGlrZXdpc2UuCgkoZ2djX21hcmtfcnR4X3B0cik6IExpa2V3aXNlLgoJKGdnY19tYXJrX3RyZWVfcHRyKTogTGlrZXdpc2UuCgkoZ2djX21hcmtfc3RyaW5nX3B0cik6IExpa2V3aXNlLgoJKGdnY19tYXJrX3RyZWVfdmFycmF5X3B0cik6IExpa2V3aXNlLgoJKGdnY19tYXJrX3RyZWVfaGFzaF90YWJsZV9wdHIpOiBMaWtld2lzZS4KCSogZ2djLWNvbW1vbi5jOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgZ2djLWNvbW1vbi5vLgoJKGdnYy1jb21tb24ubyk6IExpc3QgZGVwZW5kZW5jaWVzLgoKMTk5OS0wOS0xMCAyMjozNyAtMDcwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogY3BwYWxsb2MuYyAoeHN0cmR1cCk6IFVzZSBtZW1jcHkuCgkqIGNwcGVycm9yLmMgKGNwcF9wcmludF9jb250YWluaW5nX2ZpbGVzKTogRG9uJ3QgdXNlCgljcHBfbm90aWNlLgoJKiBjcHBsaWIuYyAoY29uZGl0aW9uYWxfc2tpcCk6IFNldCB0ZW1wLT5saW5lbm8uCgkoZG9fZW5kaWYpOiBNYWtlIGVycm9yIG1lc3NhZ2UgbGVzcyBvYnNjdXJlLgoJKGlmX2RpcmVjdGl2ZV9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKGNwcF9nZXRfdG9rZW4gW2Nhc2UgRU9GXSk6IFVud2luZCB0aGUgaWYgc3RhY2sgYW5kIGdlbmVyYXRlCgllcnJvciBtZXNzYWdlcyBmb3IgZWFjaCB1bnRlcm1pbmF0ZWQgY29uZGl0aW9uYWwgaW4gdGhpcyBmaWxlLgoJKHBhcnNlX3N0cmluZyk6ICBEbyBub3QgYmVoYXZlIGRpZmZlcmVudGx5IGlmIC10cmFkaXRpb25hbC4KCkZyaSBTZXAgMTAgMTQ6MDQ6MDcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGJ1aWx0aW5zLmMgKGV4cGFuZF9idWlsdGluX3ZhX2FyZyk6IENvcGUgd2l0aCBhbiBhcnJheS10eXBlCgl2YV9saXN0IGRlY29tcG9zaW5nIHRvIHBvaW50ZXItdHlwZS4KCSogcnM2MDAwLmMgKHJzNjAwMF92YV9zdGFydCkgVW53cmFwIHRoZSBBUlJBWV9UWVBFIHRvIGdldCBhdCBmaWVsZHMuCgkocnM2MDAwX3ZhX2FyZyk6IExpa2V3aXNlLgoKRnJpIFNlcCAxMCAxMzoyMToyMSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoc3RhcnRfZHluYW1pY19oYW5kbGVyKTogQ29tcHV0ZSBzaXplIHVzaW5nCglTVEFDS19TQVZFQVJFQV9NT0RFLgoKRnJpIFNlcCAxMCAxNjowMToyMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBwcm90b2l6ZS5jOiBSZW1vdmUgdmFyaW91cyBfX1NURENfXyBhbmQgUE9TSVggaGFja3MuICBEb24ndAoJaW5jbHVkZSBkaXJlY3RvcnkgaGVhZGVycy4gIERvbid0IGRlZmluZSBzdHJyY2hyLiAgRG9uJ3QgcHJvdmlkZQoJbXlfKiByZXBsYWNlbWVudCBmdW5jdGlvbnMuICBQcmVmZXIgUFRSIG92ZXIgYHBvaW50ZXJfdHlwZScuCglEb24ndCBwcm90b3R5cGUgc3lzdGVtIGZ1bmN0aW9ucy4gIERvbid0IHJlZGVmaW5lIGdldG9wdC4KCgkoc2hvcnRwYXRoLCBmYW5jeV9hYm9ydCwgbm90aWNlLCBzYXZlc3RyaW5nLCBkdXBuc3RyLCBzdWJzdHIsCglzYWZlX3JlYWQsIHNhZmVfd3JpdGUsIHNhdmVfcG9pbnRlcnMsIHJlc3RvcmVfcG9pbnRlcnMsCglpc19pZF9jaGFyLCBpbl9zeXN0ZW1faW5jbHVkZV9kaXIsIGRpcmVjdG9yeV9zcGVjaWZpZWRfcCwKCWZpbGVfZXhjbHVkZWRfcCwgdW5leHBhbmRfaWZfbmVlZGVkLCBhYnNwYXRoLCBjaGVja19hdXhfaW5mbywKCWZpbmRfY29ycmVzcG9uZGluZ19scGFyZW4sIHJlZmVyZW5jZWRfZmlsZV9pc19uZXdlciwKCXNhdmVfZGVmX29yX2RlYywgbXVuZ2VfY29tcGlsZV9wYXJhbXMsIGdlbl9hdXhfaW5mb19maWxlLAoJcHJvY2Vzc19hdXhfaW5mb19maWxlLCBpZGVudGlmeV9saW5lbm8sIGNoZWNrX3NvdXJjZSwKCXNlZWtfdG9fbGluZSwgZm9yd2FyZF90b19uZXh0X3Rva2VuX2NoYXIsIG91dHB1dF9ieXRlcywKCW91dHB1dF9zdHJpbmcsIG91dHB1dF91cF90bywgb3RoZXJfdmFyaWFibGVfc3R5bGVfZnVuY3Rpb24sCglmaW5kX3JpZ2h0bW9zdF9mb3JtYWxzX2xpc3QsIGRvX2NsZWFuaW5nLCBjYXJlZnVsX2ZpbmRfbF9wYXJlbiwKCWRvX3Byb2Nlc3NpbmcsIGlzX3N5c2NhbGxzX2ZpbGUsIHJlbmFtZV9jX2ZpbGUsIGZpbmRfZXh0ZXJuX2RlZiwKCWZpbmRfc3RhdGljX2RlZmluaXRpb24sIGNvbm5lY3RfZGVmc19hbmRfZGVjcywgYWRkX2xvY2FsX2RlY2wsCglhZGRfZ2xvYmFsX2RlY2xzLCBuZWVkc190b19iZV9jb252ZXJ0ZWQsIHZpc2l0X2VhY2hfaGFzaF9ub2RlLAoJYWRkX3N5bWJvbCwgbG9va3VwLCBmcmVlX2RlZl9kZWMsIGZpbmRfZmlsZSwgcmV2ZXJzZV9kZWZfZGVjX2xpc3QsCgllZGl0X2ZuX2RlY2xhcmF0aW9uLCBlZGl0X2Zvcm1hbHNfbGlzdHMsIGVkaXRfZm5fZGVmaW5pdGlvbiwKCXNjYW5fZm9yX21pc3NlZF9pdGVtcywgZWRpdF9maWxlLCBzdHJpbmdfbGlzdF9jb25zKTogQWRkIHN0YXRpYwoJcHJvdG90eXBlcy4KCShzdGFuZGFyZF9leGVjX3ByZWZpeCwgdGFyZ2V0X21hY2hpbmUsIHRhcmdldF92ZXJzaW9uLAoJZGVmYXVsdF9zeXNjYWxsc19kaXIsIHN0cmluZ19saXN0LCBzdHJpbmdfbGlzdF9jb25zLCBmaW5kX2ZpbGUsCglkb19jbGVhbmluZyk6IENvbnN0aWZ5IGEgY2hhciouCgkoc2FmZV9yZWFkLCBzYWZlX3dyaXRlKTogVXNlIFBUUiwgbm90IGEgY2hhciouCgkoaXNfaWRfY2hhcik6IFRha2UgYW4gaW50LCBub3QgYSBjaGFyLgoJKG1haW4pOiBBZGQgcHJvdG90eXBlLiAgQ2FsbCByZXR1cm4sIG5vdCBleGl0LgoKRnJpIFNlcCAxMCAxNjo0ODoyNiAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAodHlwZV9oYXNoX2xvb2t1cCk6IENoZWNrIGZvciBlcXVhbCBUWVBFX0FMSUdOIGZpZWxkcwoJd2hlbiBjb21wYXJpbmcgdHlwZXMuCgpGcmkgU2VwIDEwIDA4OjQzOjMyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGJhc2ljX2luZHVjdGlvbl92YXIpOiBUeXBvIE5VTExfUlRYIC0+IE5VTEwuCgkoc3RyZW5ndGhfcmVkdWNlKTogUmVsZWFzZSB0aGUgdmFycmF5cyBmcm9tIHRoZSBuby1iaXZzIGVhcmx5IGV4aXQuCgoJKiByZWxvYWQxLmMgKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IEluaXQgaGFyZF9yZWdfbl91c2VzIGJlZm9yZQoJdGhlIGxvb3Agb3ZlciB0aGUgcmVnaXN0ZXJzLgoKCSogdHJlZS5jIChzYXZlX3RyZWVfc3RhdHVzKTogU2V0IG1heWJlcGVybWFuZW50X2ZpcnN0b2JqIE5VTEwKCWZvciBhIG5ldyBvYnN0YWNrLgoJKHJlc3RvcmVfdHJlZV9zdGF0dXMpOiBDaGVjayB0aGF0IGluc3RlYWQgd2hlbiBmcmVlaW5nIHRoZSBvYnN0YWNrLgoKV2VkIFNlcCAgOCAxNjoxMjowNCAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGFsaWFzLmMgKHJ0eF9lcXVhbF9mb3JfbWVtcmVmX3ApOiBBbGxvdyBDT05TVF9ET1VCTEVzIHRvIGJlIHVzZWQKCWFzIHBvaW50ZXJzLgoKRnJpIFNlcCAxMCAxMTo1ODo1NSAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGkzODYubWQgKGFzaGxxaTMpOiBGb3IgTk9OX1FJX1JFR19QIHJlZ3MsIHVzZSBzYWxsLiAgRml4IHNvbWUKCW9wZXJhbmQgc2l6ZSBtb2RpZmllcnMuCgpGcmkgU2VwIDEwIDEwOjMyOjMyIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogYy1jb21tb24uYyAoY19jb21tb25fbm9kZXNfYW5kX2J1aWx0aW5zKTogRG9uJ3QgYnVpbGQKCXZhX2xpc3RfdHlwZV9ub2RlLgoJKiBjLWNvbW1vbi5oIChlbnVtIGNfdHJlZV9pbmRleCBhbmQgcmVsYXRlZCBhY2Nlc29yIG1hY3Jvcyk6IFJlbW92ZQoJZXZlcnl0aGluZyBub3cgZGVjbGFyZWQgaW4gdHJlZS5oLgoJKiBjLWRlY2wuYyAoQ0hBUl9UWVBFX1NJWkUsIFNIT1JUX1RZUEVfU0laRSwgSU5UX1RZUEVfU0laRSwKCUxPTkdfVFlQRV9TSVpFLCBMT05HX0xPTkdfVFlQRV9TSVpFLCBXQ0hBUl9VTlNJR05FRCwgRkxPQVRfVFlQRV9TSVpFLAoJRE9VQkxFX1RZUEVfU0laRSwgTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogRG9uJ3QgcHJvdmlkZSBkZWZhdWx0cy4KCShlcnJvcl9tYXJrX25vZGUsIHZvaWRfdHlwZV9ub2RlLCBjaGFyX3R5cGVfbm9kZSwgaW50ZWdlcl90eXBlX25vZGUsCgl1bnNpZ25lZF90eXBlX25vZGUsIHB0cl90eXBlX25vZGUsIHZhX2xpc3RfdHlwZV9ub2RlLAoJaW50ZWdlcl96ZXJvX25vZGUsIG51bGxfcG9pbnRlcl9ub2RlLCBpbnRlZ2VyX29uZV9ub2RlKTogRGVsZXRlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ2FsbCBidWlsZF9jb21tb25fdHJlZV9ub2RlcyBhbmQKCWJ1aWxkX2NvbW1vbl90cmVlX25vZGVzXzIgaW5zdGVhZCBvZiBidWlsZGluZyB0aGVpciBub2RlcyBoZXJlLgoJRG9uJ3QgYWRkIHJvb3RzIGZvciB0aGVzZSBub2Rlcy4KCSogc3Rvci1sYXlvdXQuYyAoc2l6ZV96ZXJvX25vZGUsIHNpemVfb25lX25vZGUpOiBEZWxldGUuCgkoc2V0X3NpemV0eXBlKTogTWFrZSBhIG5ldyBub2RlIGZvciBiaXRzaXpldHlwZSBlYWNoIHRpbWUuCgkqIHRyZWUuYyAoZ2xvYmFsX3RyZWVzKTogTmV3IHZhcmlhYmxlLgoJKGluaXRfb2JzdGFja3MpOiBBZGQgYSBnYyByb290IGZvciBpdC4KCShDSEFSX1RZUEVfU0laRSwgU0hPUlRfVFlQRV9TSVpFLCBJTlRfVFlQRV9TSVpFLAoJTE9OR19UWVBFX1NJWkUsIExPTkdfTE9OR19UWVBFX1NJWkUsIEZMT0FUX1RZUEVfU0laRSwKCURPVUJMRV9UWVBFX1NJWkUsIExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IFByb3ZpZGUgZGVmYXVsdHMuCgkoYnVpbGRfY29tbW9uX3RyZWVfbm9kZXMpOiBOZXcgZnVuY3Rpb24uCgkoZml4X3NpemV0eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2NvbW1vbl90cmVlX25vZGVzXzIpOiBOZXcgZnVuY3Rpb24uCgkqIHRyZWUuaCAoZW51bSB0cmVlX2luZGV4KTogTmV3LgoJKGdsb2JhbF90cmVlcyk6IERlY2xhcmUuCglBZGQgYWNjZXNzb3IgbWFjcm9zIGZvciBhbGwgbm9kZXMgbm93IG1vdmVkIHRvIGdsb2JhbF90cmVlcy4KCURlbGV0ZSB0aGVpciBkZWNsYXJhdGlvbnMuCgpUaHUgU2VwICA5IDIwOjE1OjQ2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjLWRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogV2hlbiBwcm9jZXNzaW5nIGEgbmVzdGVkIGZ1bmN0aW9uLAoJcHVzaCBhbmQgcG9wIEdDIGNvbnRleHQgYXJvdW5kIHJlc3Rfb2ZfY29tcGlsYXRpb24uCgpUaHUgU2VwICA5IDE2OjQyOjA2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2LmMgKG92ZXJyaWRlX29wdGlvbnMpOiBSZW1vdmUgcHBybywgcGVudGl1bTIsIGFuZCBwMiBhcyBhbGlhc2VzLgoJRGVmYXVsdCBpeDg2X2FyY2ggdG8gUFJPQ0VTU09SX0kzODYuCgkqIGkzODYuaCAoQ0MxX0NQVV9TUEVDKTogRG9uJ3QgYWRkIC1tYXJjaD1mb28uICBSZW1vdmUgLW1uby1mb28uCgkoQ1BQXzQ4Nl9TUEVDLCBDUFBfNTg2X1NQRUMsIENQUF82ODZfU1BFQyk6IERlbGV0ZS4KCShDUFBfQ1BVX0RFRkFVTFRfU1BFQyk6IERlZmluZSB0byBfX3R1bmVfZm9vX18uCgkoQ0MxX0NQVV9TUEVDKTogTWFrZSAtbWFyY2g9Zm9vIGRlZmluZSBfX2Zvb19fLCBhbmQgcHJvdmlkZQoJX190dW5lX2Zvb19fIGlmIG5vIC1tY3B1LiAgTWFrZSAtbWNwdT1iYXIgZGVmaW5lIF9fdHVuZV9iYXJfXy4KCShFWFRSQV9TUEVDUyk6IFJlbW92ZSBkZWxldGVkIHNwZWNzLgoKVGh1IFNlcCAgOSAxNjowMzowNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsXzEpOiBBbGxvY2F0ZSBmcm9tCglmdW5jdGlvbi0+eF9mcmFtZV9vZmZzZXQsIG5vdCBmcmFtZV9vZmZzZXQuCgpUaHUgU2VwICA5IDE0OjM2OjMxIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBnZ2MuaCAobGFuZ19jbGVhbnVwX3RyZWUpOiBSZW1vdmUuCgkqIGdjYy1zaW1wbGUuYyAoZ2djX2ZyZWVfdHJlZSk6IERvbid0IGNhbGwgbGFuZ19jbGVhbnVwX3RyZWUuCgkqIGdnYy1jYWxsYmFja3MuYyAobGFuZ19jbGVhbnVwX3RyZWUpOiBSZW1vdmUuCgoJKiBjLWRlY2wuYyAoZmluaXNoX3N0cnVjdCk6IFVzZSBnZ2NfYWxsb2MgdG8gYWxsb2NhdGUKCVRZUEVfTEFOR19TUEVDSUZJQyB3aGVuIGdhcmJhZ2UgY29sbGVjdGluZy4KCShsYW5nX21hcmtfdHJlZSk6IE1hcmsgVFlQRV9MQU5HX1NQRUNJRklDLgoJKGxhbmdfY2xlYW51cF90cmVlKTogUmVtb3ZlLgoKVGh1IFNlcCAgOSAxNDoyMzowMiAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWZhdWx0cy5oIChFSF9GUkFNRV9TRUNUSU9OLCBFSF9GUkFNRV9TRUNUSU9OX0FTTV9PUCk6IERlZmluZSBoZXJlLgoJKiBjcnRzdHVmZi5jOiBOb3QgaGVyZS4KCSogZHdhcmYyb3V0LmM6IE9yIGhlcmUuCgkqIGxpYmdjYzIuYyAoX19kb19nbG9iYWxfY3RvcnMsIF9fZG9fZ2xvYmFsX2R0b3JzKTogSGFuZGxlIEVIIGZyYW1lCglpbmZvLgoKVGh1IFNlcCAgOSAwOTo0MDo1OCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZnVuY3Rpb24uaCAoZnJlZV9hZnRlcl9jb21waWxhdGlvbik6IFJlbW92ZSBkZWNsIHBhcmFtZXRlci4KCShmcmVlX3ZhcmFzbV9zdGF0dXMwOiBMaWtld2lzZS4KCShmcmVlX2VtaXRfc3RhdHVzKTogTGlrZXdpc2UuCgkoZnJlZV9zdG10X3N0YXR1cyk6IExpa2V3aXNlLgoJKGZyZWVfYWZ0ZXJfY29tcGlsYXRpb24pOiBMaWtld2lzZS4KCShpbml0X2xhbmdfc3RhdHVzKTogTmV3IHZhcmlhYmxlLgoJKGZyZWVfbGFuZ19zdGF0dXMpOiBMaWtld2lzZS4KCSogZW1pdC1ydGwuYyAoZnJlZV9lbWl0X3N0YXR1cyk6IE1ha2UgZGVjbCBwYXJhbWV0ZXIgaW1wbGljaXQuCgkqIGZ1bmN0aW9uLmMgKGluaXRfbGFuZ19zdGF0dXMpOiBOZXcgdmFyaWFibGUuCgkoZnJlZV9sYW5nX3N0YXR1cyk6IExpa2V3aXNlLgoJKHB1c2hfZnVuY3Rpb25fY29udGV4dF90byk6IERvbid0IHNldCBmdW5jdGlvbjo6ZGVjbCBoZXJlLgoJKGZyZWVfYWZ0ZXJfY29wbWlsYXRpb24pOiBNYWtlIGRlY2wgcGFyYW1ldGVyIGltcGxpY2l0LiAgQ2FsbAoJZnJlZV9sYW5nX3N0YXR1cyBpZiBkZWZpbmVkLgoJKHByZXBhcmVfZnVuY3Rpb25fc3RhcnQpOiBDYWxsIGluaXRfbGFuZ19zdGF0dXMgaWYgZGVmaW5lZC4KCShpbml0X2Z1bmN0aW9uX3N0YXJ0KTogU2V0IGZ1bmN0aW9uOjpkZWNsIGhlcmUuCgkqIHByb2ZpbGUuYyAob3V0cHV0X2Z1bmNfc3RhcnRfcHJvZmlsZXIpOiBEb24ndCBjYWxsIHB1c2hkZWNsCgl1bnRpbCB3ZSd2ZSBhY3R1YWxseSBzdGFydGVkIHRoZSBmdW5jdGlvbi4KCSogc3RtdC5jIChmcmVlX3N0bXRfc3RhdHVzKTogTWFrZSBkZWNsIHBhcmFtZXRlciBpbXBsaWNpdC4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBEb24ndCBwYXNzIGRlY2wgdG8KCWZyZWVfYWZ0ZXJfY29tcGlsYXRpb24uCgkqIHZhcmFzbS5jIChmcmVlX3ZhcmFzbV9zdGF0dXMpOiBMaWtld2lzZS4KClRodSBTZXAgIDkgMTc6MjM6MTkgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBleGNlcHQuYyAoY2FsbF9nZXRfZWhfY29udGV4dCk6IEFkZCByb290IHdoZW4gYWxsb2NhdGluZyBzdGF0aWMKCXRyZWUgdmFyaWFibGUuCgpUaHUgU2VwICA5IDE1OjI0OjU5IEJTVCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3IDxyZWFybnNoYUBhcm0uY29tPgoKCSogYXJtLmM6IEluY2x1ZGUgImdnYy5oIi4KCShhcm1fYWRkX2djX3Jvb3RzKTogTmV3IGZ1bmN0aW9uLgoJKGFybV9vdmVycmlkZV9vcHRpb25zKTogQ2FsbCBpdC4KCShhb2ZfcGljX2VudHJ5KTogQWRkIGEgR0Mgcm9vdCBmb3IgYW9mX3BpY19sYWJlbCB3aGVuIGl0J3MgYWxsb2NhdGVkLgoKCSogYXJtLm1kIChkZWZpbmVfYXNtX2F0dHJpYnV0ZXMpOiBBZGQgYSBwb29sX3JhbmdlIGF0dHJpYnV0ZS4KClRodSBTZXAgIDkgMTI6MzI6NTcgQlNUIDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBleHRlbmQudGV4aSAoVm9sYXRpbGVzKTogTmV3IG5vZGUuCgpUaHUgU2VwICA5IDAzOjM3OjMxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZ2Mtc2ltcGxlLmMgKElTX01BUktFRCwgSUdOT1JFX01BUkspOiBOZXcuCgkoR0dDX0FOWV9NQUdJQywgR0dDX0FOWV9NQUdJQ19NQVJLKTogTmV3LgoJKHN0cnVjdCBnZ2NfYW55KTogUmVwbGFjZSBgbWFyaycgd2l0aCBgbWFnaWNfbWFyaycuCgkoZ2djX2FsbG9jX3N0cmluZyk6IFVzZSBtZW1jcHksIG5vdCBiY29weS4KCShnZ2NfYWxsb2NfYW55KTogU2V0IG1hZ2ljX21hcmsuICBVcGRhdGUgYnl0ZXNfYWxsb2NlZF9zaW5jZV9nYy4KCShnZ2NfZnJlZV97cnR4LHJ0dmVjLHRyZWUsc3RyaW5nfSk6IE1hcmsgaW5saW5lLgoJKGdnY19mcmVlX2FueSk6IE5ldy4KCShnZ2NfbWFya19zdHJpbmcpOiBVc2UgSUdOT1JFX01BUksuICBDYWxjIGJhY2sgdG8gc3RydWN0IGdjY19zdHJpbmcuCgkoZ2djX21hcmspOiBVc2UgSUdOT1JFX01BUksuICBBYm9ydCBpZiBtYWdpYyBkb2Vzbid0IG1hdGNoLgoJKGdnY19jb2xsZWN0KTogUmUtZW5hYmxlIGNvbGxlY3Rpb24gYXZvaWRhbmNlLiAgVXNlIEdHQ19BTllfTUFSSy4KCVVzZSBJU19NQVJLRUQuIFVzZSBnZ2NfZnJlZV9hbnkuCgoxOTk5LTA5LTA5ICBTY290dCBCYW1icm91Z2ggPHNjb3R0YkBuZXR3aW5kZXIub3JnPgoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaDogZGVmaW5lIE5PX0lNUExJQ0lUX0VYVEVSTl9DCgpUaHUgU2VwICA5IDAxOjU1OjIxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAobWFpbik6IEFsd2F5cyBpbml0X2dnYy4KCldlZCBTZXAgIDggMjM6NTM6MjIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChmaW5kX2FsbF9oYW5kbGVyX3R5cGVfbWF0Y2hlcyk6IEZyZWUgdGhlIGxpc3QgaWYKCXdlIGZvdW5kIG5vIG1hdGNoZXMuCgoJKiBjb21iaW5lLmMgKFNVQlNUKTogQnJlYWsgb3V0IHRvIGEgcmVhbCBmdW5jdGlvbiBkb19TVUJTVC4KCShTVUJTVF9JTlQpOiBMaWtld2lzZS4KCSogZ2NzZS5jIChmcmVlX3ByZV9tZW0pOiBGcmVlIGB0ZW1wX2JpdG1hcCcuCgkocHJlX2luc2VydCk6IEZyZWUgYGluc2VydGVkJy4KCSogbG9vcC5jIChiYXNpY19pbmR1Y3Rpb25fdmFyKTogQWx3YXlzIHNldCBgbG9jYXRpb24nLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IEFkZCBpbml0aWFsX3RyYW1wb2xpbmUgYXMgYSByb290LgoJKiBydGwuaCAoaW5pdF92YXJhc21fb25jZSk6IERlY2xhcmUuCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGl0LgoJKiBnZ2Mtc2ltcGxlLmMgKGdnY19tYXJrX3N0cmluZ19wdHIpOiBOZXcuCgkoZ2djX2FkZF9zdHJpbmdfcm9vdCk6IE5ldy4KCShnZ2NfY29sbGVjdCk6IERpc2FibGUgY29sbGVjdGlvbiBhdm9pZGFuY2UgdGVtcG9yYXJpbHkuCgkqIGdnYy5oIChnZ2NfYWRkX3N0cmluZ19yb290KTogRGVjbGFyZS4KCSogZXhjZXB0LmMgKGNyZWF0ZV9yZXRocm93X3JlZik6IFVzZSBnZ2NfYWxsb2Nfc3RyaW5nLgoJKiBvcHRhYnMuYyAoaW5pdF9saWJmdW5jcyk6IExpa2V3aXNlLgoJKiB2YXJhc20uYyAobmFtZWRfc2VjdGlvbik6IFVzZSBnZ2NfYWxsb2Nfc3RyaW5nLgoJKG1ha2VfZnVuY3Rpb25fcnRsKTogTGlrZXdpc2UuCgkobWFrZV9kZWNsX3J0bCk6IExpa2V3aXNlLgoJKGFzc2VtYmxlX3N0YXRpY19zcGFjZSk6IExpa2V3aXNlLgoJKGFzc2VtYmxlX3RyYW1wb2xpbmVfdGVtcGxhdGUpOiBMaWtld2lzZS4KCShvdXRwdXRfY29uc3RhbnRfZGVmKTogTGlrZXdpc2UuCgkoZm9yY2VfY29uc3RfbWVtKTogTGlrZXdpc2UuCgkobWFya19jb25zdF9oYXNoX2VudHJ5KTogTmV3LgoJKG1hcmtfcG9vbF9zeW1faGFzaF90YWJsZSk6IE5ldy4KCShtYXJrX3ZhcmFzbV9zdGF0ZSk6IFVzZSBpdC4KCShpbml0X3ZhcmFzbV9vbmNlKTogTmV3LgoKCSogZXhwci5oIChpbml0X29uZV9saWJmdW5jKTogRGVjbGFyZS4KCSogb3B0YWJzLmMgKGluaXRfb25lX2xpYmZ1bmMpOiBOZXcuCgkoaW5pdF9vcHRhYnMpOiBVc2UgaXQuCgkqIGNvbmZpZy9nb2Zhc3QuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9zb2wyLmggKElOSVRfU1VCVEFSR0VUX09QVEFCUyk6IExpa2V3aXNlLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoSU5JVF9UQVJHRVRfT1BUQUJTKTogTGlrZXdpc2UuCgpUaHUgU2VwICA5IDEzOjQ2OjA2IDE5OTkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChjcHBleHAubyk6IERlcGVuZCBvbiBjcHBoYXNoLmguCgkqIGNwcGV4cC5jIChjcHBfbGV4KTogSGFuZGxlIGBkZWZpbmVkICh4eHgpJyBmb3IgcG9pc29uZWQgeHh4LgoJSW5jbHVkZSBjcHBoYXNoLmguCgkqIGNwcGhhc2guYyAoc3BlY2lhbF9zeW1ib2wpOiBIYW5kbGUgcGxhaW4gYHh4eCcgZm9yIHBvaXNvbmVkIHh4eC4KCSogY3BwbGliLmMgKGRvX2RlZmluZSk6IEdlbmVyYWxpemUgdG8gaGFuZGxlIHBvaXNvbmVkIGRlZmluaXRpb25zLAoJcmVkZWZpbmluZyBwb2lzb25lZCBpZGVudGlmaWVycywgZXRjLgoJKGRvX3VuZGVmKTogRG9uJ3QgYWxsb3cgcG9pc29uZWQgaWRlbnRpZmllcnMgdG8gYmUgdW5kZWZpbmVkLgoJKGRvX3ByYWdtYSk6IEFkZCAjcHJhZ21hIHBvaXNvbi4KCShkb194aWZkZWYpOiBIYW5kbGUgYCNpZmRlZiB4eHgnIGZvciBwb2lzb25lZCB4eHguCgoJKiBjY2NwLmM6IEFkZCBUX1BPSVNPTiBub2RlIHR5cGUuCgkoc3BlY2lhbF9zeW1ib2wpOiBIYW5kbGUgYGRlZmluZWQoeHh4KScgYW5kIHBsYWluIGB4eHgnIGZvcgoJcG9pc29uZWQgeHh4LgoJKGRvX2RlZmluZSk6IEdlbmVyYWxpemUgdG8gaGFuZGxlIHBvaXNvbmVkIGRlZmluaXRpb25zLAoJcmVkZWZpbmluZyBwb2lzb25lZCBpZGVudGlmaWVycywgZXRjLgoJKGRvX3VuZGVmKTogRG9uJ3QgYWxsb3cgcG9pc29uZWQgaWRlbnRpZmllcnMgdG8gYmUgdW5kZWZpbmVkLgoJKGRvX3ByYWdtYSk6IEFkZCAjcHJhZ21hIHBvaXNvbi4KCShkb194aWZkZWYpOiBIYW5kbGUgYCNpZmRlZiB4eHgnIGZvciBwb2lzb25lZCB4eHguCgoJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogSWdub3JlICNwcmFnbWEgcG9pc29uLgoJKiBjLXByYWdtYS5oOiBBZGQgcHNfcG9pc29uIHN0YXRlLiAgV2Ugbm93IGFsd2F5cyBoYXZlIGdlbmVyaWMKCXByYWdtYXMuCgpXZWQgU2VwICA4IDIwOjMwOjQyIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBnZ2MuaCAoZ2djX2FsbG9jKTogTmV3IGZ1bmN0aW9uLgoJKGdnY19tYXJrKTogTGlrZXdpc2UuCgkqIGdnYy1zaW1wbGUuYyAoZ2djX2FueSk6IE5ldyBzdHJ1Y3R1cmUuCgkoZ2djX3N0YXR1cyk6IEFkZCBhbnlzLgoJKG5fYW55c19jb2xsZWN0ZWQpOiBOZXcgdmFyaWFibGUuCgkoZ2djX2FsbG9jKTogRGVmaW5lLgoJKGdnY19tYXJrKTogTGlrZXdpc2UuCgkoZ2djX2NvbGxlY3QpOiBDb2xsZWN0IHRoZSBhbnlzLgoKV2VkIFNlcCAgOCAyMDoxNToxNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWRlY2wuYyAobWFya19iaW5kaW5nX2xldmVsKTogTWFrZSBzdGF0aWMgdG8gbWF0Y2ggcHJvdG90eXBlLgoKV2VkIFNlcCAgOCAxNjo0MToyNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChuZXdfaW5zbl9kZWFkX25vdGVzKTogRG9uJ3QgZWFybHkgb3V0IGZvciBwcmVleGlzdGluZyByZWdzLgoKV2VkIFNlcCAgOCAxNjowNzo1MiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VuZ2VucnRsLmMgKENPTlNUX0RPVUJMRV9GT1JNQVQpOiBUYWtlIHRoZSBzaXplIFJFQUxfQVJJVEhNRVRJQwoJd2lsbCB1c2UgaW50byBhY2NvdW50LiAgRXhwYW5kIHRoZSBtYXggd2lkdGggdG8gNS4KCSogcnRsLmM6IExpa2V3aXNlLgoKV2VkIFNlcCAgOCAxNjowMToxNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2djLXNpbXBsZS5jIChnZ2NfZnJlZV9ydHgpOiBQb2lzb24gdGhlIGNvcnJlY3QgYW1vdW50Cglmb3IgdGhlIHJ0eCBsZW5ndGguCgpXZWQgU2VwICA4IDE1OjIzOjU0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoY2FsbCB2YWx1ZSBwYXR0ZXJucyk6IFJlbW92ZSB0aGUgcmVzdWx0IHByZWRpY2F0ZXMuCgpXZWQgU2VwICA4IDEzOjM1OjM4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhpbmMpOiBSZW1vdmUgZXh0cmFuZW91cyBleGl0IDEgZnJvbQoJbGFzdCBjaGFuZ2UuCgpXZWQgU2VwICA4IDE1OjMyOjE2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHN5c3RlbS5oIChzYnJrLCBtYWxsb2MsIGNhbGxvYywgcmVhbGxvYyk6IEJhY2t1cCBwcm90b3R5cGVzCgljaGFuZ2VkIGZyb20gZXh0ZXJuIGNoYXIgKiwgdG8gZXh0ZXJuIFBUUi4gIEFsc28gZml4IHR5cG8gaW4KCU5FRURfREVDTEFSQVRJT05fUkVBTExPQyB0ZXN0LgoKCSogbWlwcy10ZHVtcC5jIChtYWxsb2MsIGNhbGxvYywgcmVhbGxvYyk6IERvbid0IHByb3RvdHlwZS4KCldlZCBTZXAgIDggMTE6NDA6NDcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2Fuc2lkZWNsLmggKF9fYXR0cmlidXRlX18sIEFUVFJJQlVURV9VTlVTRURfTEFCRUwsCglBVFRSSUJVVEVfVU5VU0VELCBBVFRSSUJVVEVfTk9SRVRVUk4sIEFUVFJJQlVURV9QUklOVEYsCglBVFRSSUJVVEVfUFJJTlRGXzEsIEFUVFJJQlVURV9QUklOVEZfMiwgQVRUUklCVVRFX1BSSU5URl8zLAoJQVRUUklCVVRFX1BSSU5URl80LCBBVFRSSUJVVEVfUFJJTlRGXzUsIEdFTkVSSUNfUFRSKTogRGVsZXRlLgoKCSogYy1kZWNsLmMgKGZpZWxkX2RlY2xfY21wKTogVXNlIFBUUiBpbnN0ZWFkIG9mIEdFTkVSSUNfUFRSLgoKCSogY2NjcC5jIChwY2ZpbmNsdWRlKTogTGlrZXdpc2UuCgoJKiBnbG9iYWwuYyAoYWxsb2Nub19jb21wYXJlKTogTGlrZXdpc2UuCgoJKiBoYWlmYS1zY2hlZC5jIChyYW5rX2Zvcl9zY2hlZHVsZSk6IExpa2V3aXNlLgoKCSogbG9jYWwtYWxsb2MuYyAocXR5X3N1Z2dfY29tcGFyZV8xLCBxdHlfY29tcGFyZV8xKTogTGlrZXdpc2UuCgoJKiByZWxvYWQxLmMgKGhhcmRfcmVnX3VzZV9jb21wYXJlLCByZWxvYWRfcmVnX2NsYXNzX2xvd2VyKTogTGlrZXdpc2UuCgoJKiBzdHVwaWQuYyAoc3R1cGlkX3JlZ19jb21wYXJlKTogTGlrZXdpc2UuCgoJKiB0cmVlLmMgKF9vYnN0YWNrX2FsbG9jYXRlZF9wKTogTGlrZXdpc2UuCgoJKiB2YXJyYXkuaCAodmFycmF5X2RhdGFfdGFnLCBWQVJSQVlfR0VORVJJQ19QVFJfSU5JVCk6IExpa2V3aXNlLgoKMTk5OS0wOS0wOCAgQnJ1Y2UgS29yYiAgYXV0b2dlbkBsaW51eGJveC5jb20KCgkqIE1ha2VmaWxlLmluOiBHaXZlIHRoZSBoYXBsZXNzIGdwZXJmIHVzZXIgYSBoaW50IGFib3V0Cgl3aHkgImdwZXJmIC1GIiBmYWlscy4KCldlZCBTZXAgIDggMDQ6NDM6MjIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxpc3RzLmM6IEluY2x1ZGUgZ2djLmguCgkoemFwX2xpc3RzKTogTmV3LgoJKGluaXRfRVhQUl9JTlNOX0xJU1RfY2FjaGUpOiBJbnN0YWxsIGl0LgoKCSogZ2djLXNpbXBsZS5jIChpbml0X2dnYyk6IEFic29yYiB0aGUgb2xkIGluaXQuCgkoZ2djX3B1c2hfY29udGV4dCk6IFVzZSB4Y2FsbG9jLgoJKGdnY19hbGxvY19ydHgsIGdnY19hbGxvY19ydHZlYywgZ2djX2FsbG9jX3RyZWUpOiBMaWtld2lzZS4KCShnZ2NfY29sbGVjdCk6IEFkZCBbcnZ0c10gdGFncyB0byB0aGUgY29sbGVjdGlvbiBzdGF0cy4KCldlZCBTZXAgIDggMTE6MTQ6MjUgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIGNjY3AuYyAobWFpbik6IEZpeCBoYW5kbGluZyBvZiAtaW5jbHVkZSBhbmQgLWltYWNyb3Mgb3B0aW9ucy4KCldlZCBTZXAgIDggMDI6MjM6MDggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3BwbGliLmMgKGNwcF9wdXNoX2J1ZmZlcik6IEZpeCBvcmRlciBvZiBhcmd1bWVudHMuCgpXZWQgU2VwICA4IDA0OjQ0OjA5IDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogcnRsLmggKG9ic3RhY2tfYWxsb2NfcnR4KTogUmVtb3ZlZCwgaXQncyBub3cgc3RhdGljIGluCglnZW5ydGwuYy4KCldlZCBTZXAgIDggMDA6MzM6NDMgMTk5OSAgQWxhc2RhaXIgQmFpcmQgIDxhbGFzZGFpckB3aWxkY2F0LmRlbW9uLmNvLnVrPgoKCSogZmxvdy5jIChpbnNuX2RlYWRfcCk6IFVzZSBYRVhQIHJhdGhlciB0aGFuIFNVQlJFR19SRUcuCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emVfMSk6IFVzZSBYRVhQIHJhdGhlciB0aGFuIFNVQlJFR19SRUcKCWFuZCBTRVRfREVTVC4gVXBkYXRlIGNvbW1lbnQuCgpXZWQgU2VwICA4IDE4OjU1OjE3IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IEluY2x1ZGUgZ2djLmguCgkoYzR4X2FkZF9nY19yb290cyk6IE5ldyBmdW5jdGlvbi4KCShjNHhfb3ZlcnJpZGVfb3B0aW9ucyk6IENhbGwgYzR4X2FkZF9nY19yb290cy4KCldlZCBTZXAgIDggMDA6MDA6MTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGRlZmF1bHRzLmggKFRBUkdFVF9FU0MpOiBNb3ZlIC4uLgoJKiBzeXN0ZW0uaDogLi4uIGhlcmUsIHdoZXJlIExpbmFzIGhhZCBpdCBpbiB0aGUgZmlyc3QgcGxhY2UuICBTaWxseSBtZS4KClR1ZSBTZXAgIDcgMjM6NDY6MzUgMTk5OSAgTGluYXMgVmVwc3RhcyAgPGxpbmFzQGxpbmFzLm9yZz4KCgkqIGMtY29tbW9uLmM6IFVzZSBJU0dSQVBILCBJU0xPV0VSLCB0b3VwcGVyLgoJKiBjLWxleC5jLCBjY2NwLmMsIGNleHAuYywgY2V4cC55LCBjcHBleHAuYywgZHdhcmYyb3V0LmMsIGdlbmF0dHIuYywKCWdlbmF0dHJ0YWIuYywgZ2VuZW1pdC5jLCBnZW5leHRyYWN0LmMsIGdlbnBlZXAuYywgdHJlZS5jOiBMaWtld2lzZS4KCSogc3lzdGVtLmggKElOX0NUWVBFX0RPTUFJTik6IERlZmluZSB0byAxIGlmIEhPU1RfRUJDRElDLgoJKiBkZWZhdWx0cy5oIChUQVJHRVRfRVNDKTogQWRkIGRlZmF1bHQuCgpUdWUgU2VwICA3IDIzOjM2OjU5IDE5OTkgIExpbmFzIFZlcHN0YXMgIDxsaW5hc0BsaW5hcy5vcmc+CgoJKiBjb25maWd1cmUuaW46IGFkZCBpMzcwLSotb3BlbmVkaXRpb24sIGkzNzAtKi1tdnMgYW5kCglpMzcwLSotbGludXggdGFyZ2V0cwoKVHVlIFNlcCAgNyAyMzozMTo1MyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZHNwMTZ4eHguYzogSW5jbHVkZSBnZ2MuaAoJKG92ZXJyaWRlX29wdGlvbnMpOiBNYXJrIEdDIHJvb3RzLgoJKiBtbjEwMjAwLmM6IEluY2x1ZGUgZ2djLmguCgkoYXNtX2ZpbGVfc3RhcnQpOiBNYXJrIEdDIHJvb3RzLgoJKiB0YWhvZS5jOiBJbmNsdWRlIGdnYy5oLgoJKGV4dGVuc2libGVfb3BlcmFuZCk6IE1hcmsgR0Mgcm9vdHMuCgpUdWUgU2VwICA3IDIzOjIzOjE1IDE5OTkgIExpbmFzIFZlcHN0YXMgIDxsaW5hc0BsaW5hcy5vcmc+CgoJKiBSRUFETUU6IEFkZCBzZWN0aW9uIGRpc2N1c3Npbmcgc3RhdHVzIG9mIEVMRiBBQkkuCgkqIGkzNzAuYzogRml4IG1pc2Mgc3BlbGxpbmcgbWlzdGFrZXMuCgkoaTM3MF9sYWJlbF9zY2FuKTogVXBkYXRlZCBub3RlcywgZXhjZXB0aW9uIGhhbmRsaW5nLgoJKGkzNzBfZnVuY3Rpb25fcHJvbG9nKTogU2ltcGxpZnkgRUxGIHN0YWNrIGhhbmRsaW5nLgoJKiBpMzcwLmg6IChGSVhFRF9SRUdJU1RFUlMpOiBGcmVlIHVwIHIxMiBmb3IgRUxGLgoJKFNUQUNLX0dST1dTX0RPV05XQVJEKTogRUxGIHN0YWNrIGdyb3dzIGRvd24uCgkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IEZpeCBjcmF6eSBtYWxsb2Mgc2l6ZS4KCSogaTM3MC5tZDogKG1vdmRpKTogQWRkIG5vdGVzLgoJKGZsb2F0c2lkZjIpOiBVc2Ugc3RhY2sgbm90IHJ0Y2EgZm9yIHNjcmF0Y2ggZmxvYXQgYXJlYS4KCShpb3JzaTMpOiBDb3JyZWN0IG9wZXJhbmQgY29uc3RyYWludHMuCgkqIHgtb2U6IFJlc3RvcmUgVEFST1VUT1BUUyB3aGljaCBhcmUgdXNlZCBieSBwYXguCgpUdWUgU2VwICA3IDIyOjM5OjE4IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiByczYwMDAuYzogSW5jbHVkZSBnZ2MuaC4KCShyczYwMDBfYWRkX2djX3Jvb3RzKTogTmV3IGZ1bmN0aW9uLgoJKG92ZXJyaWRlX29wdGlvbnMpOiBDYWxsIGl0LgoKVHVlIFNlcCAgNyAyMjowOTowMyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoYWxwaGFfY29tcGFyZSk6IE5ldy4KCShhbHBoYV9jb21wYXJlX29wMCwgYWxwaGFfY29tcGFyZV9vcDEsIGFscGhhX2NvbXBhcmVfZnBfcCk6IFJlbW92ZS4KCSogYWxwaGEuYzogTGlrZXdpc2UgZm9yIHRoZSBkZWZpbml0aW9ucy4KCShhbHBoYV9lbWl0X2NvbmRpdGlvbmFsX2JyYW5jaCk6IFVwZGF0ZSBmb3IgYWxwaGFfY29tcGFyZS4KCShhbHBoYV9lbWl0X2NvbmRpdGlvbmFsX21vdmUpOiBMaWtld2lzZS4KCSogYWxwaGEubWQgKGNtcGRmLCBjbXBkaSk6IExpa2V3aXNlLgoJKHNldGNjIHBhdHRlcm5zKTogTGlrZXdpc2UuICBaZXJvIGFscGhhX2NvbXBhcmUgYWZ0ZXIgdXNlLgoJKHNuZSk6IE9wdGltaXplICh4ICE9IDApIGludG8gKDBVIDwgeCkuCgpUdWUgU2VwICA3IDIxOjU1OjAyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5oIChhbHBoYV9laF9lcGlsb2d1ZV9zcF9vZnMpOiBSZW1vdmUuCgkoc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24pOiBEZWNsYXJlOyBhZGQgZWhfZXBpbG9ndWVfc3Bfb2ZzLgoJKElOSVRfRVhQQU5ERVJTKTogUmVtb3ZlLgoJKiBhbHBoYS5jOiBJbmNsdWRlIGdnYy5oLgoJKGFscGhhX2VoX2VwaWxvZ3VlX3NwX29mcywgYWxwaGFfcmV0dXJuX2FkZHJfcnR4KTogUmVtb3ZlLgoJKGFscGhhX2luaXRfbWFjaGluZV9zdGF0dXMsIGFscGhhX21hcmtfbWFjaGluZV9zdGF0dXMpOiBOZXcuCgkob3ZlcnJpZGVfb3B0aW9ucyk6IEluc3RhbGwgdGhlbS4KCShzdHJ1Y3QgbWFjaGluZV9mdW5jdGlvbik6IE1vdmVkIHRvIGFscGhhLmguCgkoYWxwaGFfc2F2ZV9tYWNoaW5lX3N0YXR1cywgYWxwaGFfcmVzdG9yZV9tYWNoaW5lX3N0YXR1cyk6IFJlbW92ZS4KCShhbHBoYV9pbml0X2V4cGFuZGVycyk6IFJlbW92ZS4KCShhbHBoYV9yZXR1cm5fYWRkcik6IEFkanVzdCB0byB1c2UgY3VycmVudF9mdW5jdGlvbi0+bWFjaGluZS4KCShhbHBoYV9yYV9ldmVyX2tpbGxlZCk6IExpa2V3aXNlLgoJKGFscGhhX2V4cGFuZF9lcGlsb2d1ZSk6IExpa2V3aXNlLgoJKiBhbHBoYS5tZCAoZWhfZXBpbG9ndWUpOiBMaWtld2lzZS4KCldlZCBTZXAgIDggMTQ6MzQ6NDIgMTk5OSAgSWFuIFBpdW1hcnRhICA8cGl1bWFydGFAcHJvZi5pbnJpYS5mcj4KCQkJICBNZWxpc3NhIE8nTmVpbGwgIDxvbmVpbGxAY3Muc2Z1LmNhPgoJCQkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKGZpcnN0X3JlZ190b19zYXZlKTogRG9uJ3Qgc2F2ZSBmaXhlZCBvcgoJY2FsbC11c2VkIHJlZ2lzdGVycyAoY2FsbC1zYXZlZCByZWdpc3RlcnMgbXVzdCBzdGlsbCBiZSBjb250aWd1b3VzCglhbmQgZW5kIHdpdGggcjMxLCBvZiBjb3Vyc2UpLgoKVHVlIFNlcCAgNyAyMTo0MTozOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYy10eXBlY2suYyAodHlwZV9saXN0c19jb21wYXRpYmxlX3ApOiBVc2Ugc2ltcGxlX3R5cGVfcHJvbW90ZXNfdG8uCgkoc2VsZl9wcm9tb3RpbmdfdHlwZV9wKTogRGVsZXRlLgoJKHNlbGZfcHJvbW90aW5nX2FyZ3NfcCk6IE1vdmUgLi4uCgkqIGMtY29tbW9uLmM6IC4uLiBoZXJlLgoJKGNfY29tbW9uX25vZGVzX2FuZF9idWlsdGlucyk6IEluaXRpYWxpemUgbGFuZ190eXBlX3Byb21vdGVzX3RvLgoJKHNpbXBsZV90eXBlX3Byb21vdGVzX3RvKTogTmV3LgoJKiBidWlsdGlucy5jIChsYW5nX3R5cGVfcHJvbW90ZXNfdG8pOiBOZXcuCgkoZXhwYW5kX2J1aWx0aW5fdmFfYXJnKTogVXNlIGl0IHRvIGdpdmUgZGlhZ25vc3RpYyBmb3IgaWxsZWdhbCB0eXBlcy4KCSogYy10cmVlLmggKENfUFJPTU9USU5HX0lOVEVHRVJfVFlQRV9QKTogTW92ZSAuLi4KCSogYy1jb21tb24uaDogLi4uIGhlcmUuCgkoc2VsZl9wcm9tb3RpbmdfYXJnc19wLCBzaW1wbGVfdHlwZV9wcm9tb3Rlc190byk6IERlY2xhcmUuCgkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBVc2Ugc2ltcGxlX3R5cGVfcHJvbW90ZXNfdG8uCgkoZ3Jva2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCSogdHJlZS5oIChsYW5nX3R5cGVfcHJvbW90ZXNfdG8pOiBEZWNsYXJlLgoKVHVlIFNlcCAgNyAxNzoxNToyMSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCUFkZCBzb21lIG1hY2hpbmUtZGVwZW5kZW50IEdDIHJvb3RzLgoJKiBzcGFyYy5jOiBJbmNsdWRlIGdnYy5oLgoJKHNwYXJjX2FkZF9nY19yb290cyk6IE5ldyBmdW5jdGlvbi4KCShtYXJrX3VsdHJhc3BhcmNfcGlwZWxpbmVfc3RhdGUpOiBMaWtld2lzZS4KCShvdmVycmlkZV9vcHRpb25zKTogQ2FsbCBzcGFyY19hZGRfZ2Nfcm9vdHMuCgkqIHBhLmM6IEluY2x1ZGUgZ2djLmguCgkocGFfYWRkX2djX3Jvb3RzKTogTmV3IGZ1bmN0aW9uLgoJKG1hcmtfZGVmZXJyZWRfcGxhYmVscyk6IExpa2V3aXNlLgoJKG92ZXJyaWRlX29wdGlvbnMpOiBDYWxsIHBhX2FkZF9nY19yb290cy4KCSogbWlwcy5jOiBJbmNsdWRlIGdnYy5oLgoJKG1pcHNfYWRkX2djX3Jvb3RzKTogTmV3IGZ1bmN0aW9uLgoJKG92ZXJyaWRlX29wdGlvbnMpOiBVc2UgaXQuCgpUdWUgU2VwICA3IDExOjM5OjQxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGVycm9yLmMgKGNwcF9maWxlX2xpbmVfZm9yX21lc3NhZ2UpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogY3BwZXhwLmMgKHBhcnNlX251bWJlciwgcGFyc2VfY2hhcmNvbnN0LCBjcHBfbGV4LAoJY3BwX3BhcnNlX2V4cHIpOiBBZGQgc3RhdGljIHByb3RvdHlwZXMuCgkocGFyc2VfY2hhcmNvbnN0KTogRG9uJ3QgY2FzdCBhd2F5IGNvbnN0LW5lc3MuCgkodG9rZW4pOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogY3BwZmlsZXMuYyAoZmlsZV9uYW1lX2xpc3QsIGluY2x1ZGVfaGFzaCwgZmluZF9pbmNsdWRlX2ZpbGUsCglmaW5jbHVkZSwgaW5pdGlhbGl6ZV9pbnB1dF9idWZmZXIpOiBDb25zdGlmeSBhIGNoYXIqLgoJKGZpbGVfY2xlYW51cCwgZmluZF9wb3NpdGlvbik6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCgkqIGNwcGhhc2guYyAobWFjcm9fY2xlYW51cCwgbWFjYXJnLCB0aW1lc3RhbXAsIHNwZWNpYWxfc3ltYm9sLAoJY29sbGVjdF9leHBhbnNpb24pOiBBZGQgc3RhdGljIHByb3RvdHlwZXMuCgkoY3BwX2luc3RhbGwsIGNyZWF0ZV9kZWZpbml0aW9uLCBtb250aG5hbWVzKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGNwcGhhc2guaCAoY3BwX2luc3RhbGwpOiBMaWtld2lzZS4KCgkqIGNwcGluaXQuYyAoa25vd25fc3VmZml4ZXMsIGRlZmF1bHRfaW5jbHVkZSwKCWR1bXBfc3BlY2lhbF90b19idWZmZXIsIE5BTUUsIGNwcF9zdGFydF9yZWFkLCBjcHBfZmluaXNoKTogTGlrZXdpc2UuCgkoYmFzZV9uYW1lLCBkdW1wX3NwZWNpYWxfdG9fYnVmZmVyLCBpbml0aWFsaXplX2RlcGVuZGVuY3lfb3V0cHV0KToKCUFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCgkqIGNwcGxpYi5jIChteV9zdHJlcnJvcik6IENvbnN0aWZ5IGEgY2hhciouCgkobnVsbF91bmRlcmZsb3csIG51bGxfY2xlYW51cCwgc2tpcF9jb21tZW50LCBjb3B5X2NvbW1lbnQsCgljb3B5X3Jlc3Rfb2ZfbGluZSwgaGFuZGxlX2RpcmVjdGl2ZSwgcGFzc190aHJ1X2RpcmVjdGl2ZSwKCWdldF9kaXJlY3RpdmVfdG9rZW4sIHJlYWRfbGluZV9udW1iZXIsIGNwcF9wcmludF9maWxlX2FuZF9saW5lLAoJdl9jcHBfZXJyb3IsIHZfY3BwX3dhcm5pbmcsIHZfY3BwX2Vycm9yX3dpdGhfbGluZSwKCXZfY3BwX3dhcm5pbmdfd2l0aF9saW5lLCBkZXRlY3RfaWZfbm90X2RlZmluZWQsCgljb25zaWRlcl9kaXJlY3RpdmVfd2hpbGVfc2tpcHBpbmcpOiBBZGQgc3RhdGljIHByb3RvdHlwZXMuCgkocGFzc190aHJ1X2RpcmVjdGl2ZSwgY2hlY2tfbWFjcm9fbmFtZSwgY3BwX2V4cGFuZF90b19idWZmZXIsCgljcHBfcGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogY3BwbGliLmggKGNwcF9vcHRpb25zLCBpbmNsdWRlX2hhc2gsIHByb2duYW1lLCBkZWZpbml0aW9uLAoJY3BwX3BlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lLCBjcHBfZXhwYW5kX3RvX2J1ZmZlciwKCWNoZWNrX21hY3JvX25hbWUsIGNwcF9wZmF0YWxfd2l0aF9uYW1lLCBjcHBfZmlsZV9saW5lX2Zvcl9tZXNzYWdlLAoJZmluZF9pbmNsdWRlX2ZpbGUsIGRlcHNfb3V0cHV0LCBpbmNsdWRlX2hhc2gpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogY3BwbWFpbi5jIChwcm9nbmFtZSk6IENvbnN0aWZ5LgoJKG1haW4pOiBBZGQgcHJvdG90eXBlLiAgVXNlIHJldHVybiwgbm90IGV4aXQuCgoJKiBmaXgtaGVhZGVyLmMgKGZhdGFsLCBhZGRfc3ltYm9scywgbG9va3VwX3N0ZF9wcm90bywgd3JpdGVfbGJyYWMsCglyZWNvZ25pemVkX21hY3JvLCBjaGVja19tYWNyb19uYW1lcywgcmVhZF9zY2FuX2ZpbGUsIHdyaXRlX3JicmFjLAoJaW5mX3NraXBfc3BhY2VzLCBpbmZfcmVhZF91cHRvLCBpbmZfc2Nhbl9pZGVudCwgaW5mX3NjYW5faWRlbnQsCgljaGVja19wcm90ZWN0aW9uKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkoeGZyZWUpOiBSZW1vdmUuCgkocHJvZ25hbWUsIHJlY29nbml6ZWRfbWFjcm9tLCByZWNvZ25pemVkX2V4dGVybik6IENvbnN0aWZ5IGEgY2hhciouCgkobWFpbik6IEFkZCBwcm90b3R5cGUuCgoJKiBnZW4tcHJvdG9zLmMgKHByb2duYW1lKTogQ29uc3RpZnkgYSBjaGFyKi4KClR1ZSBTZXAgIDcgMDA6NDc6NTIgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGVtaXQtcnRsLmMgKGZyZWVfZW1pdF9zdGF0dXMpOiBUYWtlIGRlY2wgYXMgYSBwYXJhbWV0ZXIuCgkoaW5pdF9lbWl0X29uY2UpOiBBZGQgbW9yZSBHQyByb290cy4KCSogZXhjZXB0LmMgKG1hcmtfZnVuY19laF9lbnRyeSk6IE5ldyBmdW5jdGlvbi4KCShtYXJrX2VoX25vZGUpOiBNYXJrIGZhbHNlX2xhYmVsIGFuZCByZXRocm93X2xhYmVsLgoJKGluaXRfZWgpOiBBZGQgbW9yZSBHQyByb290cy4KCSogZnVuY3Rpb24uYyAoZnJlZV9hZnRlcl9jb21waWxhdGlvbik6IFRha2UgZGVjbCBhcyBhIHBhcmFtZXRlci4KCUNhbGwgZnJlZV9zdG10X3N0YXR1cy4KCShtYXJrX2Z1bmN0aW9uX3N0YXRlKTogRG9uJ3QgYXNzdW1lIHhfcGFybV9yZWdfc3RhY2tfbG9jIGlzCglub24tTlVMTC4KCSogZnVuY3Rpb24uaCAoZnJlZV9hZnRlcl9jb21waWxhdGlvbik6IENoYW5nZSBwcm90b3R5cGUuCgkoZnJlZV92YXJhc21fc3RhdHVzKTogTGlrZXdpc2UuCgkoZnJlZV9lbWl0X3N0YXR1cyk6IExpa2V3aXNlLgoJKGZyZWVfc3RtdF9zdGF0dXMpOiBOZXcgZnVuY3Rpb24uCgkqIGdnYy1zaW1wbGUuYyAocnR4LCB2ZWNzLCB0cmVlcywgc3RyaW5ncywgYnl0ZXNfYWxsb2NlZF9zaW5jZV9nYyk6CglSZW1vdmUsIHJlcGxhY2luZyB3aXRoIC4uLgoJKGdnY19zdGF0dXMpOiBOZXcgc3RydWN0dXJlLgoJKGdnY19jaGFpbik6IE5ldyB2YXJpYWJsZS4KCShpbml0X2djYyk6IERlZmluZS4KCShnZ2NfcHVzaF9jb250ZXh0KTogTmV3IGZ1bmN0aW9uLgoJKGdnY19wb3BfY29udGV4dCk6IExpa2V3aXNlLgoJKGdnY19hbGxvY19ydHgpOiBBZGp1c3QgZm9yIHVzZSBvZiBnZ2NfY2hhaW4uCgkoZ2djX2FsbG9jX3J0dmVjKTogTGlrZXdpc2UuCgkoZ2djX2FsbG9jX3RyZWUpOiBMaWtld2lzZS4KCShnZ2NfYWxsb2Nfc3RyaW5nKTogTGlrZXdpc2UuCgkoZ2djX21hcmtfcnR4KTogTWFyayBOT1RFX1NPVVJDRV9GSUxFIGFuZCBOT1RFX1JBTkdFX0lORk8uCgkoZ2djX21hcmtfdHJlZSk6IEdpdmUgbGFuZ3VhZ2UtZGVwZW5kZW50IGNvZGUgYSBjaGFuY2UgdG8gbWFyawoJYHgnIG5vZGVzLgoJKGdnY19tYXJrX3RyZWVfdmFycmF5KTogSGFuZGxlIGVtcHR5IGFycmF5cy4KCShnZ2NfY29sbGVjdCk6IEFkanVzdCBmb3IgdXNlIG9mIGdnY19jaGFpbi4gIENsZWFyCglieXRlc19hbGxvY2VkX3NpbmNlX2xhc3RfZ2MuCgkqIGdnYy5oIChnZ2NfcG9wX2NvbnRleHQpOiBOZXcgZnVuY3Rpb24uCgkoZ2djX3B1c2hfY29udGV4dCk6IExpa2V3aXNlLgoJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiBEb24ndCBwcmludCBvYnN0YWNrcyB3aGVuIEdDJ2luZy4KCSogc3RtdC5jIChmcmVlX3N0bXRfc3RhdHVzKTogTmV3IGZ1bmN0aW9uLgoJKGluaXRfc3RtdF9mb3JfZnVuY3Rpb24pOiBDbGVhciBsYXN0X2V4cHJfdmFsdWUuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQWx3YXlzIGNhbGwgZnJlZV9hZnRlcl9jb21waWxhdGlvbi4KCUNvbmRpdGlvbmFsaXplIGNhbGwgdG8gZ2djX2NvbGxlY3QuCgkobWFpbik6IENhbGwgaW5pdF9nZ2MuCgkqIHRyZWUuYyAocHVzaF9vYnN0YWNrcyk6IERvIHRoZSBwdXNoLCBldmVuIHdoZW4gR0MnaW5nLgoJKHB1c2hfb2JzdGFja3Nfbm9jaGFuZ2UpOiBMaWtld2lzZS4KCShwb3Bfb2JzdGFja3MpOiBMaWVrd2lzZS4KCSogdmFyYXNtLmMgKGZyZWVfdmFyYXNtX3N0YXR1cyk6IFRha2UgZGVjbCBhcyBhIHBhcmFtZXRlci4KClR1ZSBTZXAgIDcgMDg6MTU6NDkgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmggKE1VTFRJTElCX0VORElBTl9ERUZBVUxUKSA6IE5ldyBtYWNyby4KCShNVUxUSUxJQl9FTkRJQU5fREVGQVVMVCkgOiBVc2UgdGhlIG5ldyBtYWNyby4KCSogY29uZmlnL21pcHMvZWxmNjQuaCAoTVVMVElMSUJfREVGQVVMVFMpIDogVXNlIHRoZSBuZXcgbWFjcm8uCgkqIGNvbmZpZy9taXBzL3IzOTAwLmggKE1VTFRJTElCX0RFRkFVTFRTKSA6IFVzZSB0aGUgbmV3IG1hY3JvLgoKVHVlIFNlcCAgNyAwMzo0Mjo0NSAxOTk5ICBNYXJrIEtsZWluIChta2xlaW5AZGlzLmNvbSkKCgkqIHBhL3gtcGEtbXBlaXg6IE5ldyBmaWxlIGZvciB0aGUgTVBFIHBvcnQuCgoJKiBwYS9xdWFkbGliLmFzbTogTmV3IGZpbGUgZm9yIGxvbmcgZG91YmxlIHN1cHBvcnQuCgoJKiBjb25maWd1cmUuaW46IEFkZCBocHBhMS4wLSotbXBlaXggZm9yIE1QRSBwb3J0LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpUdWUgU2VwICA3IDEwOjA4OjQwIDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CgoJKiBmaW5hbC5jIChzaG9ydGVuX2JyYW5jaGVzKTogRml4IGxhc3QgY2hhbmdlLgoKVHVlIFNlcCAgNyAwMDozMDozMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5oIChBU01fT1VUUFVUX0RPVUJMRV9JTlQpOiBEZWxldGUuCgpNb24gU2VwICA2IDIyOjQ0OjQ3IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1lcmdlIGZyb20gZ2NjMiBzbmFwc2hvdCBKYW4gOSwgMTk5OS4gIFNlZSBGU0ZDaGFuZ2VMb2cgZm9yCglkZXRhaWxzLgoKTW9uIFNlcCAgNiAyMjozMToyOCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWF1eC1pbmZvLmMgKGNvbmNhdCk6IERvbid0IGRlZmluZS4KCgkqIGNjY3AuYyAobXlfc3RyZXJyb3IpOiBMaWtld2lzZS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gdXNlCgl4c3RyZXJyb3IgaW5zdGVhZC4KCShkb19pbmNsdWRlKTogQ2FsbCB4c3RyZHVwLCBub3QgeG1hbGxvYy9zdHJjcHkuCgkoZ3Jvd19vdXRidWYpOiBEb24ndCBjaGVjayBpZiB4cmVhbGxvYyByZXR1cm5zIE5VTEwsIGl0IGNhbid0LgoJKHhtYWxsb2MsIHhyZWFsbG9jLCB4Y2FsbG9jLCB4c3RyZHVwKTogRG9uJ3QgZGVmaW5lLgoKCSogY29sbGVjdDIuYyAobXlfc3Ryc2lnbmFsKTogTGlrZXdpc2UuICBBbGwgY2FsbGVycyBjaGFuZ2VkIHRvIHVzZQoJc3Ryc2lnbmFsIGluc3RlYWQuCgkobG9jYXRlbGliKTogQ2FsbCB4c3RyZHVwLCBub3QgeG1hbGxvYy9zdHJjcHkuCgoJKiAxNzUwYS5oIChBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMKTogQ2FsbCB4bWFsbG9jLCBub3QgbWFsbG9jLgoKCSogZHNwMTZ4eC5jIChvdmVycmlkZV9vcHRpb25zKTogQ2FsbCB4c3RyZHVwLCBub3QgeG1hbGxvYy9zdHJjcHkuCgoJKiBpMzcwLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBDYWxsIHhtYWxsb2MsIG5vdCBtYWxsb2MuCgoJKiBtaXBzLmMgKGJ1aWxkX21pcHMxNl9jYWxsX3N0dWIpOiBDYWxsIHhzdHJkdXAsIG5vdCB4bWFsbG9jL3N0cmNweS4KCgkqIGNwcGluaXQuYyAoY3BwX29wdGlvbnNfaW5pdCk6IENhbGwgeGNhbGxvYywgbm90IHhtYWxsb2MvYnplcm8uCgoJKiBkd2FyZm91dC5jIChkd2FyZm91dF9pbml0KTogQ2FsbCBjb25jYXQsIG5vdCB4bWFsbG9jL3N0cmNweS8uLi4KCgkqIGV4Y2VwdC5jIChuZXdfZWhfcmVnaW9uX2VudHJ5KTogQ2FsbCB4bWFsbG9jL3hyZWFsbG9jLCBub3QKCW1hbGxvYy9yZWFsbG9jLgoJKGZpbmRfYWxsX2hhbmRsZXJfdHlwZV9tYXRjaGVzKTogTGlrZXdpc2UuICBEb24ndCBjaGVjayByZXR1cm4KCXZhbHVlLgoJKGdldF9uZXdfaGFuZGxlciwgaW5pdF9pbnNuX2VoX3JlZ2lvbiwgcHJvY2Vzc19uZXN0aW5mbyk6IENhbGwKCXhtYWxsb2MsIG5vdCBtYWxsb2MuCgkoaW5pdF9laF9uZXN0aW5nX2luZm8pOiBMaWtld2lzZS4gIENhbGwgeGNhbGxvYywgbm90IHhtYWxsb2MvYnplcm8uCgoJKiBnY2MuYyAoeHN0cmVycm9yLCB4bWFsbG9jLCB4cmVhbGxvYyk6IERvbid0IGRlZmluZS4KCShpbml0X3NwZWMpOiBDYWxsIHhjYWxsb2MsIG5vdCB4bWFsbG9jL2J6ZXJvLgoJKHNldF9zcGVjKTogQ2FsbCB4c3RyZHVwLCBub3Qgc2F2ZV9zdHJpbmcuCgkocmVjb3JkX3RlbXBfZmlsZSk6IENhbGwgeHN0cmR1cCwgbm90IHhtYWxsb2Mvc3RyY3B5LgoJKGZpbmRfYV9maWxlKTogQ2FsbCB4c3RyZHVwLCBub3QgeG1hbGxvYy9zdHJjcHkuCgkocHJvY2Vzc19jb21tYW5kKTogQ2FsbCB4c3RyZHVwLCBub3Qgc2F2ZV9zdHJpbmcuCgkobWFpbik6IENhbGwgeGNhbGxvYywgbm90IHhtYWxsb2MvYnplcm8uCgoJKiBnY292LmMgKHhtYWxsb2MpOiBEb24ndCBkZWZpbmUuCgkoY3JlYXRlX3Byb2dyYW1fZmxvd19ncmFwaCk6IENhbGwgeGNhbGxvYywgbm90IHhtYWxsb2MvYnplcm8uCgkoc2Nhbl9mb3Jfc291cmNlX2ZpbGVzKTogQ2FsbCB4c3RyZHVwLCBub3QgeG1hbGxvYy9zdHJjcHkuCgkob3V0cHV0X2RhdGEpOiBDYWxsIHhjYWxsb2MsIG5vdCB4bWFsbG9jL2J6ZXJvLgoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWR1bGVfaW5zbnMpOiBDYWxsIHhjYWxsb2MsIG5vdCB4bWFsbG9jL2J6ZXJvLgoKCSogbWlwcy10ZHVtcC5jICh4bWFsbG9jKTogRG9uJ3QgZGVmaW5lLgoJKHByaW50X3N5bWJvbCk6IENhbGwgeG1hbGxvYywgbm90IG1hbGxvYy4KCShyZWFkX3RmaWxlKTogQ2FsbCB4Y2FsbG9jLCBub3QgY2FsbG9jLgoKCSogbWlwcy10ZmlsZS5jICh4ZnJlZSwgbXlfc3Ryc2lnbmFsLCB4bWFsbG9jLCB4Y2FsbG9jLCB4cmVhbGxvYyk6CglEb24ndCBkZWZpbmUuICBBbGwgY2FsbGVycyBvZiB4ZnJlZS9teV9zdHJzaWduYWwgY2hhbmdlZCB0byB1c2UKCWZyZWUvc3Ryc2lnbmFsIGluc3RlYWQuCgkoYWxsb2NhdGVfY2x1c3Rlcik6IENhbGwgeGNhbGxvYywgbm90IGNhbGxvYy4KCgkqIG9iamMvb2JqYy1hY3QuYyAobGFuZ19pbml0KTogQ2FsbCBjb25jYXQsIG5vdCB4bWFsbG9jL3N0cmNweS8uLi4KCUZpeCBtZW1vcnkgbGVhaywgZnJlZSBhbGxvY2F0ZWQgbWVtb3J5LgoKCSogcHJlZml4LmMgKHRyYW5zbGF0ZV9uYW1lKTogQ2FsbCB4c3RyZHVwLCBub3Qgc2F2ZV9zdHJpbmcuCgkodXBkYXRlX3BhdGgpOiBMaWtld2lzZS4KCgkqIHByb2ZpbGUuYyAoYnJhbmNoX3Byb2IpOiBDYWxsIHhzdHJkdXAsIG5vdCB4bWFsbG9jL3N0cmNweS4KCgkqIHByb3RvaXplLmMgKHhzdHJlcnJvciwgeG1hbGxvYywgeHJlYWxsb2MsIHhmcmVlLCBzYXZlc3RyaW5nMik6CglEb24ndCBkZWZpbmUuICBDYWxsZXJzIG9mIHhmcmVlL3NhdmVzdHJpbmcyIGNoYW5nZWQgdG8gdXNlCglmcmVlL2NvbmNhdCBpbnN0ZWFkLgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDYWxsIHhjYWxsb2MsIG5vdCB4bWFsbG9jL2J6ZXJvLgoJKGluaXRfZWxpbV90YWJsZSk6IExpa2V3aXNlLgoKCSogcmVzb3VyY2UuYyAoaW5pdF9yZXNvdXJjZV9pbmZvKTogTGlrZXdpc2UuCgoJKiBzdHVwaWQuYyAoc3R1cGlkX2xpZmVfYW5hbHlzaXMpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jICh4bWFsbG9jLCB4Y2FsbG9jLCB4cmVhbGxvYywgeHN0cmR1cCk6IERvbid0IGRlZmluZS4KCShvcGVuX2R1bXBfZmlsZSk6IENhbGwgY29uY2F0LCBub3QgeG1hbGxvYy9zdHJjcHkvLi4uCgkoY2xlYW5fZHVtcF9maWxlKTogTGlrZXdpc2UuCgkoY29tcGlsZV9maWxlKTogQ2FsbCB4c3RyZHVwLCBub3QgeG1hbGxvYy9zdHJjcHkuCgpNb24gU2VwICA2IDE1OjA0OjU1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB2ODUwLmggKEVYUEFORF9CVUlMVElOX1ZBX0FSRyk6IE5ldy4KCSogdjg1MC5jICh2ODUwX3ZhX2FyZyk6IE5ldy4KClR1ZSBTZXAgIDcgMDk6MzY6MDEgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogaGFpZmEtc2NoZWQuYzogVGlkeSBjb21tZW50cy4KCk1vbiBTZXAgIDYgMTQ6MzA6MTMgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBNYWtlZmlsZS5pbiAoQ19BTkRfT0JKQ19PQkpTKTogUmVtb3ZlIGdnYy1jYWxsYmFja3Muby4KCShjLXBhcnNlLm8sIGMtZGVjbC5vLCBjLWxhbmcubywgYy1sZXgubywgYy1jb21tb24ubywKCSQob3V0X29iamVjdF9maWxlKSk6IERlcGVuZCBvbiBnZ2MuaC4KCSogYy1jb21tb24uYzogSW5jbHVkZSAiZ2djLmgiLgoJKGNvbWJpbmVfc3RyaW5ncyk6IElmIGRvaW5nIEdDLCB1c2UgZ2djX2FsbG9jX3N0cmluZy4KCSogYy1kZWNsLmM6IEluY2x1ZGUgImdnYy5oIi4KCShnZ2NfcCk6IERlZmluZSB3aXRoIHZhbHVlIDAuCgkobWFya19iaW5kaW5nX2xldmVsKTogTmV3IGZ1bmN0aW9uLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIEdDIHJvb3RzLgoJKG1hcmtfY19mdW5jdGlvbl9jb250ZXh0KTogTmV3IGZ1bmN0aW9uLgoJKGxhbmdfbWFya19mYWxzZV9sYWJlbF9zdGFjayk6IE5ldyBmdW5jdGlvbi4KCShsYW5nX21hcmtfdHJlZSk6IE5ldyBmdW5jdGlvbi4KCShsYW5nX2NsZWFudXBfdHJlZSk6IE5ldyBmdW5jdGlvbi4KCSogYy1sYW5nLmM6IEluY2x1ZGUgImdnYy5oIi4KCShsYW5nX2luaXQpOiBDYWxsIGNfcGFyc2VfaW5pdC4KCSogYy1sZXguYzogSW5jbHVkZSAiZ2djLmgiLgoJKGNoZWNrX2xpbmVudW0pOiBJZiBkb2luZyBHQywgZG9uJ3QgY29weSBmaWxlbmFtZXMgdG8gcGVybWFuZW50CglvYnN0YWNrLgoJKiBjLXBhcnNlLmluOiBJbmNsdWRlICJnZ2MuaCIuCgkoY19wYXJzZV9pbml0KTogTmV3IGZ1bmN0aW9uLgoJKiBjLXRyZWUuaCAoY19wYXJzZV9pbml0LCBtYXJrX2NfZnVuY3Rpb25fY29udGV4dCk6IERlY2xhcmUuCgkqIG9iamMvTWFrZS1sYW5nLmluIChvYmpjLXBhcnNlLm8pOiBEZXBlbmQgb24gZ2djLmguCgoJKiBleGNlcHQuYyAobWFya19laF9zdGF0ZSk6IE1hcmsgbW9yZSBzdGF0ZS4KCSogZnVuY3Rpb24uYyAobWFya19mdW5jdGlvbl9zdGF0ZSk6IExpa2V3aXNlLgoJKiBnZ2Mtc2ltcGxlLmMgKGdnY19hbGxvY19ydHZlYyk6IEJyaW5nIGluIHN5bmMgd2l0aCBub24tZ2MgdmVyc2lvbi4KCShnZ2NfYWxsb2Nfc3RyaW5nKSBbR0dDX0RVTVBdOiBGaXggdHlwby4KCSogdG9wbGV2LmMgKG1hcmtfZmlsZV9zdGFjayk6IE5ldyBmdW5jdGlvbi4KCShjb21waWxlX2ZpbGUpOiBJZiBkb2luZyBHQywgdXNlIGdnY19hbGxvY19zdHJpbmcgb24gaW5wdXQgZmlsZW5hbWUuCgkobWFpbik6IEFkZCByb290IGZvciBpbnB1dF9maWxlX3N0YWNrLgoKCSogaTM4Ni5jOiBJbmNsdWRlICJnZ2MuaCIuCgkoaXg4Nl9tYXJrX21hY2hpbmVfc3RhdHVzKTogTmV3IGZ1bmN0aW9uLgoJKG92ZXJyaWRlX29wdGlvbnMpOiBTZXQgbWFya19tYWNoaW5lX3N0YXR1cy4KCk1vbiBTZXAgIDYgMTU6MjY6MjMgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiB0cmVlLmMgKGNvcHlfbm9kZSk6IENvcHkgbm9kZSBjb250ZW50cyBhbHNvIGlmIGRvaW5nIEdDLgoKTW9uIFNlcCAgNiAwODo0MjowNiAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNvbGxlY3QyLmMgKHNjYW5fbGlicmFyaWVzKTogRml4IGRvdWJsZS10aGlua28gOi0pLgoKTW9uIFNlcCAgNiAwMjo0MjozNiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb2xsZWN0Mi5jIChzY2FuX2xpYnJhcmllcyk6IEZpeCB0aGlua28uCgoJKiBjc2UuYyAoZGVsZXRlX3RyaXZpYWxseV9kZWFkX2luc25zKTogRG8gbm90IHNraXAgdGhlIGxhc3QKCWluc24gaWYgaXQgaXMgYSByZWFsIGluc24uCgpTdW4gU2VwICA1IDE4OjU3OjQyIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBNYWtlZmlsZS5pbiAoZ2djLXNpbXBsZS5vKTogRGVwZW5kIG9uIGhhc2guaC4KCSogZ2djLmggKGdnY19hZGRfdHJlZV9oYXNoX3RhYmxlX3Jvb3QpOiBEZWNsYXJlLgoJKGdnY19tYXJrX3RyZWVfdmFycmF5KTogTGlrZXdpc2UuCgkoZ2djX21hcmtfdHJlZV9oYXNoX3RhYmxlKTogTGlrZXdpc2UuCgkqIGdnYy1zaW1wbGUuYzogSW5jbHVkZSBoYXNoLmguCgkoZ2djX21hcmtfdHJlZV9oYXNoX3RhYmxlX3B0cik6IE5ldyBmdW5jdGlvbi4KCShnZ2NfbWFya190cmVlX2hhc2hfdGFibGVfZW50cnkpOiBMaWtld2lzZS4KCShnZ2NfbWFya190cmVlX2hhc2hfdGFibGUpOiBMaWtld2lzZS4KCShnZ2NfYWRkX3RyZWVfaGFzaF90YWJsZV9yb290KTogTGlrZXdpc2UuCgkqIHZhcnJheS5oIChjb25zdF9lcXVpdl9kYXRhKTogVXNlIHN0cnVjdCBydHhfZGVmICosIHJhdGhlciB0aGFuCglydHgsIHdoZW4gZGVmaW5pbmcgZmllbGRzLgoKU3VuIFNlcCAgNSAxODo1Nzo0MiAxOTk5ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHByb2ZpbGUuYyAob3V0cHV0X2Z1bmNfc3RhcnRfcHJvZmlsZXIpOiBSZW1vdmUgYXBwYXJlbnRseQoJbm9uc2Vuc2ljYWwgY2FsbCB0byBzdGFydF9zZXF1ZW5jZS4KClN1biBTZXAgIDUgMTc6MzQ6MzMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNsaXBwZXIvY2xpcHBlci5jIChjbGlwcGVyX3ZhX3N0YXJ0KTogRml4IHR5cG9zLgoKCSogcHlyL3B5ci5jIChweXJfYnVpbGRfdmFfbGlzdCwgcHlyX3ZhX3N0YXJ0LCBweXJfdmFfYXJnKTogTmV3IHN0dWJzLgoJKiBzcHVyL3NwdXIuYyAoc3B1cl9idWlsZF92YV9saXN0LCBzcHVyX3ZhX3N0YXJ0KTogTmV3IHN0dWJzLgoJKHNwdXJfdmFfYXJnKTogTmV3IHN0dWIuCgoJKiBjb25maWd1cmUuaW46IENvbW1lbnQgb3V0IHB5cmFtaWQuCgpTdW4gU2VwICA1IDE5OjExOjAxIDE5OTkgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogaTM4Ni5oIChNQVNLX3tERUJVR197QUREUixBUkd9LElOVEVMX1NZTlRBWH0pOiBNb3ZlIHNvIHRoZXNlCglkb24ndCBjb25mbGljdCB3aXRoIHRoZSBiaXRzIHRoYXQgd2luMzIsIGN5Z3dpbiwgYW5kIGRndXgKCWRlZmluZXMuCgpTdW4gU2VwICA1IDA5OjMxOjU2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgkJCSAgQmVybmQgU2NobWlkdCA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGludGVncmF0ZS5jIChmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBEbyBub3QgaW5saW5lCglmdW5jdGlvbnMgd2l0aCBmb3JjZWQgbGFiZWxzLgoKU3VuIFNlcCAgNSAwMDozNToxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoJCQkgIEJlcm5kIFNjaG1pZHQgPGJlcm5kc0BjeWdudXMuY28udWs+CgkJCSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIE1ha2VmaWxlLmluIChnZ2Mtc2ltcGxlLm8pOiBEZXBlbmQgb24gdmFycmF5LmguCgkocnRsLm8pOiBEZXBlbmQgb24gZ2djLmguCgkoZ2VuYXR0cnRhYi5vKTogRGVwZW5kIG9uIGdnYy5oLgoJKHByaW50LXRyZWUubyk6IExpa2V3aXNlLgoJKGZvbGQtY29uc3Qubyk6IExpa2V3aXNlLgoJKiBlbWl0LXJ0bC5jIChzZXF1ZW5jZV9lbGVtZW50X2ZyZWVfbGlzdCk6IFJlbW92ZSwgYW5kIGFsbCByZWZlcmVuY2VzLgoJKG1ha2VfaW5zbl9yYXcpOiBEb24ndCBjYWNoZSBpbnNucyB3aGVuIEdDJ2luZy4KCShlbWl0X2luc25fYmVmb3JlKTogTGlrZXdpc2UuCgkoZW1pdF9pbnNuX2FmdGVyKTogTGlrZXdpc2UuCgkoZW1pdF9pbnNuKTogTGlrZXdpc2UuCgkoc3RhcnRfc2VxdWVuY2UpOiBVc2UgeG1hbGxvYyB0byBhbGxvY2F0ZSB0aGUgc2VxdWVuY2Vfc3RhY2suCgkoZW5kX3NlcXVlbmNlKTogQWRkIGZyZWUgdG8gZnJlZSBpdC4KCShnZW5fc2VxdWVuY2UpOiBEb24ndCBjYWNoZSBpbnNucyB3aGVuIEdDJ2luZy4KCShjbGVhcl9lbWl0X2NhY2hlcyk6IERvbid0IHVzZSBzZXF1ZW5jZV9lbGVtZW50X2ZyZWVfbGlzdC4KCShpbml0X2VtaXQpOiBVc2UgeGNhbGxvYywgbm90IHhtYWxsb2MrYnplcm8uCgkqIGZvbGQtY29uc3QuYyAoc2l6ZV9pbnRfd2lkZSk6IEtpbGwgdGhlIGNhY2hlLCB3aGVuIEdDJ2luZy4KCSogZnVuY3Rpb24uYyAocG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFVzZSBmcmVlIHRvIGZyZWUgdGhlCglmaXh1cF92YXJfcmVmc19xdWV1ZS4KCShwdXRfcmVnX2ludG9fc3RhY2spOiBBbGxvY2F0ZSBpdCB3aXRoIHhtYWxsb2MuCgkqIGdlbmF0dHJ0YWIuYzogSW5jbHVkZSBnZ2MuaC4KCShvcGVyYXRlX2V4cCk6IERvbid0IHVzZSBvYnN0YWNrX2ZyZWUgd2hlbiBHQydpbmcuCgkoc2ltcGxpZnlfY29uZCk6IExpa2V3aXNlLgoJKHNpbXBsaWZ5X3RleHRfZXhwKTogTGlrZXdpc2UuCgkob3B0aW1pemVfYXR0cnMpOiBMaWtld2lzZS4KCSogZ2VuZ2VucnRsLmMgKGdlbmRlZik6IFVzZSBnZ2NfYWxsb2NfcnR4IHRvIGFsbG9jYXRlIFJUTCwgd2hlbgoJR0MnaW5nLgoJKGdlbmNvZGUpOiBHZW5lcmF0ZSBhICNpbmNsdWRlIGZvciBnZ2MuaC4KCSogZ2djLWNhbGxiYWNrcy5jIChnZ2NfcCk6IERlZmluZSBpdCB0byB6ZXJvLgoJKiBnZ2Mtbm9uZS5jIChnZ2NfcCk6IExpa2V3aXNlLgoJKiBnZ2Mtc2ltcGxlLmM6IEluY2x1ZGUgdmFycmF5LmguCgkoZ2djX21hcmtfdHJlZV92YXJyYXkpOiBOZXcgZnVuY3Rpb24uCgkoZ2djX2FkZF90cmVlX3ZhcnJheV9yb290KTogTGlrZXdpc2UuCgkoZ2djX21hcmtfdHJlZV92YXJyYXlfcHRyKTogTGlrZXdpc2UuCgkqIGdnYy5oIChnZ2NfcCk6IERlY2xhcmUuCgkodmFycmF5X2hlYWRfdGFnKTogTGlrZXdpc2UuCgkoZ2djX2FkZF90cmVlX3ZhcnJheV9yb290KTogRGVjbGFyZS4KCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogRG9uJ3QgY2hlY2sgZm9yIFRSRUVfUEVSTUFORU5UCglpbmNvbnNpc3RlbmNpZXMgd2hlbiBHQydpbmcuCgkqIHJ0bC5jOiBJbmNsdWRlIGdnYy5oLgoJKHJ0dmVjX2FsbG9jKTogVXNlIGdnY19hbGxvY19ydHZlYyB3aGVuIEdDJ2luZy4KCShydHhfYWxsb2MpOiBVc2UgZ2djX2FsbG9jX3J0eCB3aGVuIEdDJ2luZy4KCShydHhfZnJlZSk6IERvbid0IGNhbGwgb2JzdGFja19mcmVlIHdoZW4gR0MnaW5nLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENhbGwgZ2djX2NvbGxlY3QgYWZ0ZXIgZXZlcnkKCXBhc3MsIGlmIEdDJ2luZy4KCSogdHJlZS5jIChwdXNoX29ic3RhY2tzKTogRG8gbm90aGluZywgaWYgR0MnaW5nLgoJKHBvcF9vYnN0YWNrc19ub2NoYW5nZSk6IExpa2V3aXNlLgoJKHBvcF9vYnN0YWNrcyk6IExpa2V3aXNlLgoJKG1ha2Vfbm9kZSk6IFVzZSBnZ2NfYWxsb2NfdHJlZSB3aGVuIEdDJ2luZy4KCShjb3B5X25vZGUpOiBMaWtld2lzZS4KCShnZXRfaWRlbnRpZmllcik6IFVzZSBnZ2NfYWxsb2Nfc3RyaW5nIHdoZW4gR0MnaW5nLgoJKGJ1aWxkX3N0cmluZyk6IExpa2V3aXNlLgoJKG1ha2VfdHJlZV92ZWMpOiBVc2UgZ2djX2FsbG9jX3RyZWUgd2hlbiBHQydpbmcuCgkodHJlZV9jb25zKTogTGlrZXdpc2UuCgkoYnVpbGQxKTogTGlrZXdpc2UuCgkodHlwZV9oYXNoX2Nhbm9uKTogRG9uJ3QgY2FsbCBvYnN0YWNrX2ZyZWUgd2hlbiBHQydpbmcuCgpTYXQgU2VwICA0IDIxOjUyOjMyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZHVsZV9ibG9jayk6IFVzZSBuZXh0X25vbm5vdGVfaW5zbiBpbnN0ZWFkCglvZiBORVhUX0lOU04gd2hlbiBleGFtaW5pbmcgc3BlY3VsYXRpdmUgaW5zbnMgZm9yIFNDSEVEX0dST1VQX1AuCgpTYXQgU2VwICA0IDIwOjQwOjE5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgkJCSAgQmVybmQgU2NobWlkdCA8YmVybmRzQGN5Z251cy5jby51az4KCQkJICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKHN0b3ItbGF5b3V0Lm8pOiBEZXBlbmQgb24gZ2djLmguCgkoZXhwci5vKTogRGVwZW5kIG9uIGdnYy5oLgoJKHByb2ZpbGUubyk6IERlcGVuZCBvbiBnZ2MuaC4KCShzdG9yLWxheW91dC5vKTogRGVwZW5kIG9uIGdnYy5oLgoJKiBlbWl0LXJ0bC5jIChpbml0X2VtaXRfb25jZSk6IEFkZCBnYyByb290cy4KCSogZXhwci5jOiBJbmNsdWRlIGdnYy5oLgoJKGVtaXRfYmxvY2tfbW92ZSk6IEFkZCBnYyByb290cy4KCShjbGVhcl9zdG9yYWdlKTogTGlrZXdpc2UuCgkqIGV4cHIuaCAoaW5pdF9zdG9yX2xheW91dF9vbmNlKTogTmV3IGZ1bmN0aW9uLgoJKiBwcm9maWxlLmM6IEluY2x1ZGUgZ2djLmguCgkoaW5pdF9hcmNfcHJvZmlsZXIpOiBwcm9maWxlcl9sYWJlbCBpcyBhIHJvb3QuCgkqIHNjYW4uYyAobWFrZV9zc3RyaW5nX3NwYWNlKTogVHJ1c3QgeHJlYWxsb2MgdG8gZnVuY3Rpb24KCWNvcnJlY3RseSB3aXRoIGZpcnN0IHBhcmFtZXRlciBOVUxMLgoJKiBzdG9yLWxheW91dC5jOiBJbmNsdWRlIGdnYy5oLgoJKHNldF9zaXpldHlwZSk6IEFkZCBnYyByb290LgoJKGluaXRfc3Rvcl9sYXlvdXRfb25jZSk6IE5ldyBmdW5jdGlvbi4KCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgaXQuCgpTYXQgU2VwICA0IDE5OjI2OjI1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgkJCSAgQmVybmQgU2NobWlkdCA8YmVybmRzQGN5Z251cy5jby51az4KCQkJICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKHRyZWUubyk6IERlcGVuZCBvbiBnZ2MuaC4KCSh2YXJhc20ubyk6IExpa2V3aXNlLgoJKGZ1bmN0aW9uLm8pOiBMaWtld2lzZS4KCShzdG10Lm8pOiBMaWtld2lzZS4KCShleGNlcHQubyk6IExpa2V3aXNlLgoJKG9wdGFicy5vKTogTGlrZXdpc2UuCgkoZW1pdC1ydGwubyk6IExpa2V3aXNlLgoJKiBlbWl0LXJ0bC5jOiBJbmNsdWRlIGdnYy5oLgoJKHNlcXVlbmNlX2VsZW1lbnRfZnJlZV9saXN0KTogUmVtb3ZlLCBhbmQgYWxsIHJlZmVyZW5jZXMuCgkobWFya19zZXF1ZW5jZSk6IE5ldyBmdW5jdGlvbnMuCgkobWFya19lbWl0X3N0YXRlKTogTmV3IGZ1bmN0aW9uLgoJKiBleGNlcHQuYzogSW5jbHVkZSBnZ2MuaC4KCShtYXJrX2VoX25vZGUsIG1hcmtfZWhfc3RhY2ssIG1hcmtfZWhfcXVldWUpOiBOZXcgZnVuY3Rpb25zLgoJKG1hcmtfdHJlZV9sYWJlbF9ub2RlKTogTmV3IGZ1bmN0aW9ucy4KCShtYXJrX2VoX3N0YXRlKTogTmV3IGZ1bmN0aW9uLgoJKiBmdW5jdGlvbi5jOiBJbmNsdWRlIGdnYy5oLgoJKG1hcmtfdGVtcF9zbG90LCBtYXJrX2Z1bmN0aW9uX2NoYWluKTogTmV3IGZ1bmN0aW9ucy4KCShtYXJrX2Z1bmN0aW9uX3N0YXRlKTogTmV3IGZ1bmN0aW9uLgoJKGluaXRfZnVuY3Rpb25fb25jZSk6IE5ldyBmdW5jdGlvbi4KCSogZnVuY3Rpb24uaCAoaW5pdF9mdW5jdGlvbl9vbmNlKTogTmV3IGZ1bmN0aW9uLgoJKiBnZ2MtY2FsbGJhY2tzLmMgKGxhbmdfbWFya19mYWxzZV9sYWJlbF9zdGFjayk6IE5ldyBmdW5jdGlvbi4KCSogZ2djLmggKGxhYmVsX25vZGUpOiBEZWNsYXJlLgoJKGVoX3N0YXR1cywgZW1pdF9zdGF0dXMsIHN0bXRfc3RhdHVzLCB2YXJhc21fc3RhdHVzKTogTGlrZXdpc2UuCgkobGFuZ19tYXJrX2ZhbHNlX2xhYmVsX3N0YWNrKTogTmV3IGZ1bmN0aW9uLgoJKG1hcmtfdGVtcF9zbG90KTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKG1hcmtfZnVuY3Rpb25fY2hhaW4pOiBMaWtld2lzZS4KCShtYXJrX2VoX3N0YXRlKTogQWRqdXN0IHByb3RvdHlwZS4KCShtYXJrX3N0bXRfc3RhdGUsIG1hcmtfZW1pdF9zdGF0ZSwgbWFya192YXJhc21fc3RhdGUsIG1hcmtfb3B0YWIpOgoJTGlrZXdpc2UuCgkqIG9wdGFicy5jOiBJbmNsdWRlIGdnYy5oLgoJKG1hcmtfb3B0YWIpOiBOZXcgZnVuY3Rpb24uCgkoaW5pdF9vcHRhYnMpOiBBZGQgZ2Mgcm9vdHMuCgkqIHN0bXQuYzogSW5jbHVkZSBnZ2MuaC4KCShtYXJrX2NvbmRfbmVzdGluZywgbWFya19sb29wX25lc3RpbmcpOiBOZXcgZnVuY3Rpb25zLgoJKG1hcmtfYmxvY2tfbmVzdGluZywgbWFya19jYXNlX25lc3RpbmcsIG1hcmtfZ290b19maXh1cCk6IExpa2V3aXNlLgoJKG1hcmtfc3RtdF9zdGF0ZSk6IE5ldyBmdW5jdGlvbi4KCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgaW5pdF9mdW5jdGlvbl9vbmNlLgoJKiB0cmVlLmM6IEluY2x1ZGUgZ2djLmguCgkodHlwZV9oYXNoKTogTW92ZSBkZWNsYXJhdGlvbiBlYXJsaWVyIGluIGZpbGUuCgkoVFlQRV9IQVNIX1NJWkUsIHR5cGVfaGFzaF90YWJsZSk6IExpa2V3aXNlLgoJKGluaXRfb2JzdGFja3MpOiBBZGQgZ2Mgcm9vdHMuCgkobWFya190eXBlX2hhc2gpOiBOZXcgZnVuY3Rpb24uCgkqIHZhcmFzbS5jOiBJbmNsdWRlIGdnYy5oLgoJKG1hcmtfcG9vbF9jb25zdGFudCk6IE5ldyBmdW5jdGlvbi4KCShtYXJrX3ZhcmFzbV9zdGF0ZSk6IE5ldyBmdW5jdGlvbi4KClNhdCBTZXAgIDQgMjI6Mjg6NTYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2djLXNpbXBsZS5jIChnZ2Nfcm9vdCwgZ2djX2NvbGxlY3QpOiBXcmFwIHByb3RvdHlwZSB3aXRoIFBST1RPLgoKU2F0IFNlcCAgNCAxODowMTo0NSAxOTk5ICBCZXJuZCBTY2htaWR0IDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogYy1kZWNsLmMgKHN0cnVjdCBsYW5ndWFnZV9mdW5jdGlvbik6IFJlbmFtZWQgZnJvbSBzdHJ1Y3QgY19mdW5jdGlvbi4KCURlbGV0ZSBlbHQgTkVYVC4KCShjX2Z1bmN0aW9uX2NoYWluKTogRGVsZXRlLgoJKHB1c2hfY19mdW5jdGlvbl9jb250ZXh0KTogTmV3IGFyZyBGLiAgRG9uJ3Qgd2FybiBhYm91dCBuZXN0ZWQKCWZ1bmN0aW9ucyBoZXJlLiAgRmlsbCBMQU5HVUFHRSBlbHQgb2YgRi4gIERlbGV0ZSBjb2RlIHRvIHVwZGF0ZQoJY19mdW5jdGlvbl9jaGFpbi4gIERvbid0IGNhbGwgcHVzaF9mdW5jdGlvbl9jb250ZXh0LgoJKHBvcF9jX2Z1bmN0aW9uX2NvbnRleHQpOiBOZXcgYXJnIEYuICBSZXN0b3JlIGZyb20gdGhlcmUgaW5zdGVhZCBvZgoJZnJvbSBjX2Z1bmN0aW9uX2NoYWluLiAgRG9uJ3QgY2FsbCBwb3BfZnVuY3Rpb25fY29udGV4dC4gIENsZWFyIG91dAoJTEFOR1VBR0UgZmllbGQgb2YgRiB3aGVuIGRvbmUuCgkqIGMtbGFuZy5jOiBJbmNsdWRlICJmdW5jdGlvbi5oIgoJKGxhbmdfaW5pdCk6IEluaXRpYWxpemUgc2F2ZV9sYW5nX3N0YXR1cyBhbmQgcmVzdG9yZV9sYW5nX3N0YXR1cy4KCSogYy1wYXJzZS5pbiAobmVzdGVkX2Z1bmN0aW9uLCBuZXN0ZWRfZnVuY3Rpb25fbm90eXBlKTogV2FybiBhYm91dAoJbmVzdGVkIGZ1bmN0aW9ucy4gIENhbGwgcHVzaF9mdW5jdGlvbl9jb250ZXh0L3BvcF9mdW5jdGlvbl9jb250ZXh0CglpbnN0ZWFkIG9mIHRoZSBfY18gdmFyaWFudHMuCgkqIGMtdHJlZS5oIChwdXNoX2NfZnVuY3Rpb25fY29udGV4dCwgcG9wX2NfZnVuY3Rpb25fY29udGV4dCk6IFVwZGF0ZQoJcHJvdG90eXBlLgoJKiBNYWtlZmlsZS5pbiAoYy1sYW5nLm8pOiBVcGRhdGUgZGVwZW5kZW5jaWVzLgoKCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0KTogVXNlIHhtYWxsb2MgdG8gYWxsb2NhdGUgcmVnbm9fcmVnX3J0eCwKCXJlZ25vX3BvaW50ZXJfZmxhZywgcmVnbm9fcG9pbnRlcl9hbGlnbi4KCShnZW5fcmVnX3J0eCk6IFVzZSB4cmVhbGxvYyB0byBlbmxhcmdlIHRoZW0uCgkoZnJlZV9lbWl0X3N0YXR1cyk6IE5ldyBmdW5jdGlvbi4KCSogZnVuY3Rpb24uYyAobWFya19tYWNoaW5lX3N0YXR1cywgbWFya19sYW5nX3N0YXR1cyk6IE5ldyB2YXJpYWJsZXMuCgkoYXNzaWduX3N0YWNrX2xvY2FsXzEpOiBSZW5hbWVkIGZyb20gYXNzaWduX291dGVyX3N0YWNrX2xvY2FsLiAgTWVyZ2UKCWluIHNvbWUgYml0cyBmcm9tIGFzc2lnbl9zdGFja19sb2NhbC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gdXNlIG5ldwoJbmFtZS4KCShhc3NpZ25fc3RhY2tfbG9jYWwpOiBKdXN0IGNhbGwgYXNzaWduX3N0YWNrX2xvY2FsXzEuCgkoZnJlZV9hZnRlcl9jb21waWxhdGlvbik6IE5ldyBmdW5jdGlvbi4KCShwdXRfcmVnX2ludG9fc3RhY2spOiBTaW1wbGlmeSB0byBhbHdheXMgY2FsbCBhc3NpZ25fc3RhY2tfbG9jYWxfMS4KCSh0cmFtcG9saW5lX2FkZHJlc3MpOiBMaWtld2lzZS4KCShhc3NpZ25fcGFybXMpOiBVc2UgeGNhbGxvYy94cmVhbGxvYyB0byBhbGxvY2F0ZSBwYXJtX3JlZ19zdGFja19sb2MuCgkocHJlcGFyZV9mdW5jdGlvbl9zdGFydCk6IEV4cGxpY2l0bHkgY2xlYXIgc29tZSBtb3JlIHZhcmlhYmxlcy4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTmV3IGVsdCBjYW5fZ2FyYmFnZV9jb2xsZWN0LgoJKG1hcmtfbWFjaGluZV9zdGF0dXMsIG1hcmtfbGFuZ19zdGF0dXMpOiBEZWNsYXJlIHZhcmlhYmxlcy4KCShmcmVlX2FmdGVyX2NvbXBpbGF0aW9uLCBmcmVlX2VtaXRfc3RhdHVzLCBmcmVlX3ZhcmFzbV9zdGF0dXMsCglpbml0X3ZhcmFzbV9zdGF0dXMpOiBEZWNsYXJlIGZ1bmN0aW9ucy4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIGZyZWVfYWZ0ZXJfY29tcGlsYXRpb24gd2hlbgoJZG9uZSB3aXRoIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgoJKiB2YXJhc20uYyAoZnJlZV92YXJhc21fc3RhdHVzKTogTmV3IGZ1bmN0aW9uLgoKU2F0IFNlcCAgNCAxNzoxNToxMyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMuaCAoRVhQQU5EX0JVSUxUSU5fVkFfU1RBUlQpOiBEZWZpbmUuCgkoRVhQQU5EX0JVSUxUSU5fVkFfQVJHKTogRGVmaW5lLgoJKiBzcGFyYy5jIChzcGFyY192YV9zdGFydCk6IE5ldy4KCShzcGFyY192YV9hcmcpOiBOZXcuCgpTdW4gU2VwICA1IDExOjExOjU5IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKERCUl9PVVRQVVRfU0VRRU5EKTogVXNlIFhWRUNFWFAgbm90IFhFWFBzLgoKU3VuIFNlcCAgNSAxMDoxMzoxOSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5oIChDQUxMRVJfU0FWRV9QUk9GSVRBQkxFKTogRGlzYWJsZS4KClNhdCBTZXAgIDQgMTM6NDQ6MDEgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIE1ha2VmaWxlLmluIChDX0FORF9DX09CSlMpOiBBZGQgZ2NjLWNhbGxiYWNrcy5vLgoJKE9CSlMpOiBBZGQgJChHR0MpLgoJKGdnYy1jYWxsYmFja3Mubyk6IE5ldyB0YXJnZXQuCgkqIGdnYy1jYWxsYmFja3MuYzogTmV3IGZpbGUuCgpTYXQgU2VwICA0IDIyOjUzOjEzIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZXhwci5oOiBDb2xsYXBzZSBpbmRpdmlkdWFsIG9wdGFiIGFuZCBsaWJmdW5jIHZhcnMgdG8gYXJyYXlzLgoJKG9wdGFiX2luZGV4LCBsaWJmdW5jX2luZGV4KTogTmV3IGVudW1lcmF0aW9ucy4KCShvcHRhYl90YWJsZSwgbGliZnVuY190YWJsZSk6IE5ldyBhcnJheXMuCglBZGQgYWNjZXNzb3IgbWFjcm9zIGZvciBib3RoLgoKCSogb3B0YWJzLmMgKG9wdGFiX3RhYmxlLCBsaWJmdW5jX3RhYmxlKTogTmV3LgoJRGVsZXRlIGRlY2xhcmF0aW9ucyBmb3IgaW5kaXZpZHVhbCBvcHRhYiBhbmQgbGliZnVuYyB2YXJzLgoKU2F0IFNlcCAgNCAxMjo1NzoxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni9zY281LmggKFJFVFVSTl9QT1BTX0FSR1MpOiBOYW1lIGNoYW5nZSBpeDg2X3JldHVybl9wb3BzX2FyZ3MuCgpTYXQgU2VwICA0IDExOjE5OjUyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoR0dDLCBHR0NfTElCKTogTmV3LgoJKEhPU1RfUlRMKTogSW5jbHVkZSBnZ2Mtbm9uZS5vLgoJKGdnYy1zaW1wbGUubyk6IE5ldyB0YXJnZXQuCgkoZ2djLW5vbmUubyk6IExpa2V3aXNlLgoJKiB0cmVlLmggKHRyZWVfY29tbW9uKTogQWRkIGdjX21hcmsuCgkqIHJ0bC5oIChzdHJ1Y3QgcnR4X2RlZik6IFN0ZWFsIGEgYml0IGZyb20gY29kZSB0byBtYWtlIGdjX21hcmsuCgkoc3RydWN0IHJ0dmVjX2RlZik6IEFkZCBnY19tYXJrLgoJKiBlbWl0LXJ0bC5jIChnbG9iYWxfcnRsKTogVXBkYXRlIHN0YXRpYyBpbml0aWFsaXplcnMgdG8gY29udGFpbgoJZW5vdWdoIGluaXRpYWxpemVycy4KCSogZ2djLmgsIGdnYy1ub25lLmMsIGdnYy1zaW1wbGUuYzogTmV3IGZpbGVzLgoJKiB0b3BsZXYuYyAoZ2NfdGltZSk6IE5ldyB2YXJpYWJsZS4KCShhbGxfdGltZSk6IE5ldyB2YXJpYWJsZS4KCShjb21waWxlX2ZpbGUpOiBQcmludCBnYyB0aW1lLgoJKHByaW50X3RpbWUpOiBDYWxjdWxhdGUgcGVyY2VudGFnZSBvZiB0aGUgd2hvbGUuCgpTYXQgU2VwICA0IDEzOjExOjAxIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCUNoYW5nZSBvYnN0YWNrIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB2YXJhc20gY29uc3RhbnQgcG9vbCBoYW5kbGluZyBzbwoJdGhhdCBuZXN0ZWQgZnVuY3Rpb25zIGFyZSB0cmVhdGVkIGxpa2UgYW55IG90aGVyIGZ1bmN0aW9ucy4KCSogZnVuY3Rpb24uYyAoaW5pdF9tYWNoaW5lX3N0YXR1cyk6IE5ldyB2YXJpYWJsZS4KCShwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8pOiBTZXQgY29udGFpbnNfZnVuY3Rpb25zIGZvciB0aGUgb3V0ZXIKCWZ1bmN0aW9uLiAgRG9uJ3QgY2FsbCBzYXZlX3ZhcmFzbV9zdGF0dXMuCgkocG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IERvbid0IGNhbGwgcmVzdG9yZV92YXJhc21fc3RhdHVzLiAgRG9uJ3QKCXNldCBjdXJyZW50X2Z1bmN0aW9uX2NvbnRhaW5zX2Z1bmN0aW9ucy4KCShwcmVwYXJlX2Z1bmN0aW9uX3N0YXJ0KTogQ2FsbCBpbml0X3ZhcmFzbV9zdGF0dXMgcmF0aGVyIHRoYW4KCWluaXRfY29uc3RfcnR4X2hhc2hfdGFibGUuICBDYWxsICgqaW5pdF9tYWNoaW5lX3N0YXR1cykgaWYgdGhlIHBvaW50ZXIKCWlzIG5vbi1udWxsLgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pIEFkZCBmaWVsZCB2YXJhc20uICBEZWxldGUgZmllbGRzCglpbmxpbmVfb2JzdGFja3MsIGlubF9lbWl0LCBjb25zdF9ydHhfaGFzaF90YWJsZSwgZmlyc3RfcG9vbCwKCWxhc3RfcG9vbCwgY29uc3RfcnR4X3N5bV9oYXNoX3RhYmxlLCBwb29sX29mZnNldCwgY29uc3RfZG91YmxlX2NoYWluLgoJKGluaXRfbWFjaGluZV9zdGF0dXMpOiBEZWNsYXJlLgoJKHNhdmVfdmFyYXNtX3N0YXR1cywgcmVzdG9yZV92YXJhc21fc3RhdHVzKTogRGVsZXRlIGRlY2xhcmF0aW9ucy4KCShzYXZlX3RyZWVfc3RhdHVzLCByZXN0b3JlX3RyZWVfc3RhdHVzKTogRGVsZXRlIGxhc3QgYXJndW1lbnQuCgkqIGludGVncmF0ZS5jIChpbml0aWFsaXplX2Zvcl9pbmxpbmUpOiBMb3NlIGFyZyBDT1BZLiAgRGVsZXRlIGNvcHlpbmcKCWNvZGUuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGNvcHlfZGVjbF9saXN0LCBjb3B5X2RlY2xfdHJlZSwgY29weV9kZWNsX3J0bHMsIGNvcHlfZm9yX2lubGluZSwKCXNhdmVfY29uc3RhbnRzX2luX2RlY2xfdHJlZXMsIHJlc3RvcmVfY29uc3RhbnRzLCBzYXZlX2NvbnN0YW50cywKCXNhdmVfZm9yX2lubGluZV9laF9sYWJlbG1hcCwgc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBEZWxldGUKCWZ1bmN0aW9ucy4KCShpbmxpbmluZyk6IE5ldyB2YXJpYWJsZS4KCShyZWdfbWFwLCBsYWJlbF9tYXAsIGluc25fbWFwLCBvcmlnX2FzbV9vcGVyYW5kc192ZWN0b3IsCgljb3B5X2FzbV9vcGVyYW5kc192ZWN0b3IsIGNvcHlfYXNtX2NvbnN0cmFpbnRzX3ZlY3Rvcik6IERlbGV0ZQoJdmFyaWFibGVzLgoJKHNhdmVfZm9yX2lubGluZV9ub2NvcHkpOiBEb24ndCBzYXZlIGNvbnN0YW50cy4KCURvbid0IHNldCBpbmxfZW1pdCBmaWVsZCBpbiBjdXJyZW50X2Z1bmN0aW9uLgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBVc2UgZW1pdCBmaWVsZCwgbm90IGlubF9lbWl0LCBvZiB0aGUgaW5saW5lZAoJZnVuY3Rpb24uICBTZXQgbmV3IHZhcmlhYmxlIGlubGluaW5nIGJlZm9yZQoJY2FsbGluZyBjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZS4KCShjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IEluIE1FTSBhbmQgU1lNQk9MX1JFRiBjYXNlcywgaGFuZGxlCgljb25zdGFudCBwb29sIHJlZmVyZW5jZXMgaWYgaW5saW5pbmcgaXMgbm9uemVyby4KCURlbGV0ZSBBRERSRVNTIGFuZCAobW9zdCBvZiB0aGUpIENPTlNUIGNhc2VzLgoJKG91dHB1dF9pbmxpbmVfZnVuY3Rpb24pOiBTYXZlIGFuZCByZXN0b3JlIGN1cnJlbnRfZnVuY3Rpb24vCgljdXJyZW50X2Z1bmN0aW9uX2RlY2wuICBEZWxldGUgcmVzdG9yZV9jb25zdGFudHMgY29kZS4gIERvbid0IGNhbGwKCWluaXRfY29uc3RfcnR4X2hhc2hfdGFibGUuCgkqIG91dHB1dC5oIChpbml0X2NvbnN0X3J0eF9oYXNoX3RhYmxlKTogRG9uJ3QgZGVjbGFyZS4KCSogcnRsLmggKHN0cnVjdCBmdW5jdGlvbik6IERlY2xhcmUuCgkoZ2V0X3Bvb2xfY29uc3RhbnRfZm9yX2Z1bmN0aW9uLCBnZXRfcG9vbF9tb2RlX2Zvcl9mdW5jdGlvbik6IERlY2xhcmUuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogRG9uJ3QgdHJlYXQgbmVzdGVkIGZ1bmN0aW9ucyBvcgoJZnVuY3Rpb25zIGNvbnRhaW5pbmcgdGhlbSBzcGVjaWFsbHkuICBEZWxldGUgYWxsIGNvZGUgdG8gZGVhbCB3aXRoCglzYXZlX2Zvcl9pbmxpbmVfY29weWluZy4KCSogdHJlZS5jICh0b3BsZXZfaW5saW5lX29ic3RhY2tzLCBleHRyYV9pbmxpbmVfb2JzdGFja3MsCglpbmxpbmVfb2JzdGFja3MpOiBEZWxldGUgdmFyaWFibGVzLgoJKHNhdmVfdHJlZV9zdGF0dXMpOiBMb3NlIGFyZyBDT05URVhULiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVNpbXBseSBhbGxvY2F0ZSBhIG5ldyBmdW5jdGlvbl9tYXliZXBlcm1hbmVudF9vYnN0YWNrIGZvciB0aGUgbmV3CglmdW5jdGlvbiwgZGVsZXRlIGFsbCB0aGUgc3BlY2lhbCBjYXNlcy4KCURvbid0IHNhdmUgaW5saW5lX29ic3RhY2tzLgoJKHJlc3RvcmVfdHJlZV9zdGF0dXMpOiBMb3NlIGFyZyBDT05URVhULiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCURlbGV0ZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBmdW5jdGlvbl9tYXliZXBlcm1hbmVudF9vYnN0YWNrOyBzaW1wbHkKCWZyZWUgaXQgaWYgZW1wdHkuCglEb24ndCByZXN0b3JlIGlubGluZV9vYnN0YWNrcy4KCShwZXJtYW5lbnRfYWxsb2NhdGlvbik6ICBEZWxldGUgY29kZSB0aGF0IGZyZWVzIGlubGluZV9vYnN0YWNrcy4KCShwcmludF9pbmxpbmVfb2JzdGFja19zdGF0aXN0aWNzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKGR1bXBfdHJlZV9zdGF0aXN0aWNzKTogRG9uJ3QgY2FsbCBpdC4KCSogdmFyYXNtLmMgKHN0cnVjdCB2YXJhc21fc3RhdHVzKTogTmV3LgoJKGNvbnN0X3J0eF9oYXNoX3RhYmxlLCBjb25zdF9ydHhfc3ltX2hhc2hfdGFibGUsIGZpcnN0X3Bvb2wsCglsYXN0X3Bvb2wsIHBvb2xfb2Zmc2V0LCBjb25zdF9kb3VibGVfY2hhaW4pOiBEZWxldGUgZ2xvYmFsCgl2YXJpYWJsZXMsIHJlcGxhY2Ugd2l0aCBhY2Nlc3NvciBtYWNyb3MuCgkoaW1tZWRfZG91YmxlX2NvbnN0KTogRG9uJ3Qgd2FsayBjb25zdF9kb3VibGVfY2hhaW4gb3V0c2lkZSBhCglmdW5jdGlvbiwgYnV0IGRvbid0IHRyZWF0IG5lc3RlZCBmdW5jdGlvbnMgc3BlY2lhbGx5IGFueW1vcmUuCgkoaW1tZWRfcmVhbF9jb25zdF8xKTogTGlrZXdpc2UuCgkoY2xlYXJfY29uc3RfZG91YmxlX21lbSk6IERvbid0IHRyZWF0IG5lc3RlZCBmdW5jdGlvbnMgc3BlY2lhbGx5LgoJKGluaXRfY29uc3RfcnR4X2hhc2hfdGFibGUpOiBEZWxldGVkLCBjb2RlIG1vdmVkIHRvIGluaXRfdmFyYXNtX3N0YXR1cy4KCShzYXZlX3ZhcmFzbV9zdGF0dXMsIHJlc3RvcmVfdmFyYXNtX3N0YXR1cyk6IERlbGV0ZSBmdW5jdGlvbnMuCgkoaW5pdF92YXJhc21fc3RhdHVzKTogTmV3IGZ1bmN0aW9uLgoJKGZvcmNlX2NvbnN0X21lbSk6IERvbid0IHRyZWF0IG5lc3RlZCBmdW5jdGlvbnMgc3BlY2lhbGx5LgoJKGZpbmRfcG9vbF9jb25zdGFudCk6IEFjY2VwdCBuZXcgYXJnIEYsIHNlYXJjaCBmb3IgY29uc3RhbnRzIGluCgl0aGF0IGZ1bmN0aW9uJ3MgcG9vbCByYXRoZXIgdGhhbiB0aGUgY3VycmVudCBvbmUuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCShnZXRfcG9vbF9jb25zdGFudF9mb3JfZnVuY3Rpb24sIGdldF9wb29sX21vZGVfZm9yX2Z1bmN0aW9uKTogTmV3CglmdW5jdGlvbnMuCgoJKiBpMzg2LmMgKGluaXRfMzg2X21hY2hpbmVfc3RhdHVzKTogTmV3IGZ1bmN0aW9uLCBtb3N0bHkgZnJvbQoJY2xlYXJfMzg2X3N0YWNrX2xvY2Fscy4KCShzdHJ1Y3QgbWFjaGluZV9mdW5jdGlvbnMpOiBSZW5hbWUgZWxlbWVudCBuYW1lcyB0byBhdm9pZCBuYW1lCgljbGFzaGVzLgoJKHBpY19sYWJlbF9ydHgsIHBpY19sYWJlbF9uYW1lLCBpMzg2X3N0YWNrX2xvY2Fscyk6IE5ldyBhY2Nlc3NvcgoJbWFjcm9zLCByZXBsYWNpbmcgZ2xvYmFsIHZhcmlhYmxlcy4KCShjbGVhcl8zODZfc3RhY2tfbG9jYWxzLCBzYXZlXzM4Nl9tYWNoaW5lX3N0YXR1cywKCXJlc3RvcmVfMzg2X21hY2hpbmVfc3RhdHVzKTogRGVsZXRlIGZ1bmN0aW9ucy4KCShvdmVycmlkZV9vcHRpb25zKTogSW5pdGlhbGl6ZSBpbml0X21hY2hpbmVfc3RhdHVzLgoJKiBpMzg2LmggKElOSVRfRVhQQU5ERVJTKTogRGVsZXRlIG1hY3JvLgoJKHNhdmVfMzg2X21hY2hpbmVfc3RhdHVzLCByZXN0b3JlXzM4Nl9tYWNoaW5lX3N0YXR1cywKCWNsZWFyXzM4Nl9zdGFja19sb2NhbHMpOiBEZWxldGUgZGVjbGFyYXRpb25zLgoKU2F0IFNlcCAgNCAxNjo1NjoyOCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAocnB0Yl9pbml0KTogUmVuYW1lZCBmcm9tICpycHRiX2luaXQuCgkoZG9sb29wX2JlZ2luKTogIFNpbXBsaWZ5IHBhdHRlcm4gYW5kIHVzZSBlbWl0X2p1bXBfaW5zbi4KCShkb2xvb3BfZW5kKTogU2ltcGxpZnkgcGF0dGVybiwgc3dpdGNoIG9wZXJhbmQgb3JkZXIsCglhbmQgdXNlIGVtaXRfanVtcF9pbnNuLgoKRnJpIFNlcCAgMyAxOTowMjozOCAxOTk5ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IEFkZCBuZXcgZWxlbWVudCBMQU5HVUFHRS4KCShzYXZlX2xhbmdfc3RhdHVzKTogRGVjbGFyZSBuZXcgdmFyaWFibGUuCgkocmVzdG9yZV9sYW5nX3N0YXR1cyk6IExpa2V3aXNlLgoJKiBmdW5jdGlvbi5jIChzYXZlX2xhbmdfc3RhdHVzKTogRGVmaW5lLgoJKHJlc3RvcmVfbGFuZ19zdGF0dXMpOiBMaWtld2lzZS4KCShwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8pOiBDYWxsIGxhbmd1YWdlLXNwZWNpZmljIHNhdmUgZnVuY3Rpb24uCgkocG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IENhbGwgbGFuZ3VhZ2Utc3BlY2lmaWMgcmVzdG9yZSBmdW5jdGlvbi4KCkZyaSBTZXAgIDMgMDE6MTY6MTggMTk5OSAgQWxhc2RhaXIgQmFpcmQgIDxhbGFzZGFpckB3aWxkY2F0LmRlbW9uLmNvLnVrPgoKCSogaTM4Ni5tZCAobW92c2ZfMSk6IENoZWNrIFJFR19QIGJlZm9yZSB1c2Ugb2YgUkVHTk8uCgkobW92ZGZfMSk6IExpa2V3aXNlLgoJKG1vdnhmXzEpOiBMaWtld2lzZS4KCShleHRlbmRzZmRmMik6IExpa2V3aXNlLgoJKGV4dGVuZHNmeGYyKTogTGlrZXdpc2UuCgkoZXh0ZW5kZGZ4ZjIpOiBMaWtld2lzZS4KClNhdCBTZXAgIDQgMTE6Mzc6MTUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IERvIG5vdCBmb3JjZSBsYXJnZQoJY29uc3RhbnRzIGludG8gbWVtb3J5LgoJKGM0eF9zaGlmdGFibGVfY29uc3RhbnQpOiBOZXcgZnVuY3Rpb24uCgkqIGNvbmZpZy9jNHgvYzR4LmMgKExFR0lUSU1BVEVfQ09OU1RBTlRfUCk6IEFsbG93IGFueSBDT05TVF9JTlQuCgkoYzR4X3NoaWZ0YWJsZV9jb25zdGFudCk6IERlY2xhcmUuCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChsb2FkcWlfYmlnX2NvbnN0YW50LCBsb2FkaGlfYmlnX2NvbnN0YW50LAoJYXNobHFpM19ub2Nsb2JiZXIpOiBBZGQgbmV3IHBhdHRlcm5zIGFuZCBhc3NvY2lhdGVkIHNwbGl0dGVycy4KCkZyaSBTZXAgIDMgMTY6MjI6MTcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGRieG91dC5jIChkYnhvdXRfaW5pdCk6IFVzZSB4Y2FsbG9jIGluc3RlYWQgb2YgeG1hbGxvYytiemVyby4KCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9mcmFtZV9pbml0KTogTGlrZXdpc2UuCgkqIGZpbmFsLmMgKHNob3J0ZW5fYnJhbmNoZXMpOiBMaWtld2lzZS4KCSogZ2xvYmFsLmMgKGdsb2JhbF9hbGxvYyk6IExpa2V3aXNlLgoJKiBoYWlmYS1zY2hlZC5jIChidWlsZF9jb250cm9sX2Zsb3cpOiBMaWtld2lzZS4KCSogc3RtdC5jIChjaGVja19mb3JfZnVsbF9lbnVtZXJhdGlvbl9oYW5kbGluZyk6IExpa2V3aXNlLgoJKGVzdGltYXRlX2Nhc2VfY29zdHMpOiBMaWtld2lzZS4KCkZyaSBTZXAgIDMgMTU6NDk6NTYgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHJ0bC5oIChSVExfQ0hFQ0tDMik6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgoKRnJpIFNlcCAgMyAxNToxMzozNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChwcm9wYWdhdGVfYmxvY2spOiBVc2UgWEVYUCBub3QgU0VUX0RFU1QgZm9yIGEgVVNFLgoJKHJlY29tcHV0ZV9yZWdfdXNhZ2UpOiBMaWtld2lzZS4KCSogcnRsYW5hbC5jIChmaW5kX3JlZ25vX2Z1c2FnZSk6IExpa2V3aXNlLgoKCSogcnRsLmMgKHJ0bF9jaGVja19mYWlsZWRfY29kZTEpOiBOZXcgZnVuY3Rpb24uCgkocnRsX2NoZWNrX2ZhaWxlZF9jb2RlMik6IE5ldy4KCSogcnRsLmggKFJUTF9DSEVDSzEsIFJUTF9DSEVDSzIsIFJUVkVDX0VMVCk6IFBhcmVudGhlc2l6ZSBhcmdzLgoJKFJUTF9DSEVDS0MxLCBSVExfQ0hFQ0tDMik6IE5ldy4KCShYQyopOiBOZXcgYWNjZXNzb3IgbWFjcm9zLgoJKE5PVEVfKiwgTEFCRUxfTkFNRSwgTEFCRUxfTlVTRVMsIEFERFJFU1NPRl9SRUdOTyk6IFVzZSB0aGVtLgoJKEFERFJFU1NPRl9ERUNMLCBKVU1QX0xBQkVMLCBMQUJFTF9SRUZTLCBMQUJFTF9ORVhUUkVGKTogTGlrZXdpc2UuCgkoQ09OVEFJTklOR19JTlNOLCBSRUdOTywgSU5UVkFMLCBTVUJSRUdfUkVHLCBTVUJSRUdfV09SRCk6IExpa2V3aXNlLgoJKEFTTV9PUEVSQU5EU18qLCBNRU1fQUxJQVNfU0VULCBTRVRfU1JDLCBTRVRfREVTVCk6IExpa2V3aXNlLgoJKFRSQVBfKiwgUkFOR0VfSU5GT18qKTogTGlrZXdpc2UuCgpGcmkgU2VwICAzIDE1OjEwOjIwIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluICh0bGluay5vKTogRG9uJ3QgZGVwZW5kIG9uIHRvcGxldi5oLgoKCSogY29sbGVjdDIuYyAoY19maWxlLCBvX2ZpbGUsIGV4cG9ydF9maWxlLCBpbXBvcnRfZmlsZSwgbGRvdXQsCglvdXRwdXRfZmlsZSwgbm1fZmlsZV9uYW1lLCBsZGRfZmlsZV9uYW1lLCBzdHJpcF9maWxlX25hbWUsCgljX2ZpbGVfbmFtZSwgcHJlZml4X2xpc3QsIGxpYmV4dHMsIGlzX2N0b3JfZHRvciwgZmluZF9hX2ZpbGUsCglhZGRfcHJlZml4LCBwcmVmaXhfZnJvbV9lbnYsIHByZWZpeF9mcm9tX3N0cmluZywgZG9fd2FpdCwKCWZvcmtfZXhlY3V0ZSwgbWF5YmVfdW5saW5rLCBhZGRfdG9fbGlzdCwKCWV4dHJhY3RfaW5pdF9wcmlvcml0eSwgd3JpdGVfbGlzdCwgZHVtcF9saXN0LAoJZHVtcF9wcmVmaXhfbGlzdCwgd3JpdGVfbGlzdF93aXRoX2FzbSwgd3JpdGVfY19maWxlLAoJd3JpdGVfY19maWxlX3N0YXQsIHdyaXRlX2NfZmlsZV9nbG9iLCBzY2FuX3Byb2dfZmlsZSwKCXNjYW5fbGlicmFyaWVzLCBpc19pbl9saXN0LCByZXNvbHZlX2xpYl9uYW1lLCB1c2VfaW1wb3J0X2xpc3QsCglpZ25vcmVfbGlicmFyeSwgZXh0cmFjdF9zdHJpbmcsIG5vdGljZSwgZHVtcF9maWxlLCB0YXJnZXRfbWFjaGluZSwKCWNvbGxlY3Rfd2FpdCwgY29sbGVjdF9leGVjdXRlLCBsaWJuYW1lLCBsb2NhdGVsaWIsIGFpeF9zdGRfbGlicywKCXJlYWRfZmlsZSwgcHJpbnRfbG9hZF9jb21tYW5kKTogQ29uc3RpZnkgYSBjaGFyKi4KCShmZG9wZW4sIGVycm9yLCBmYXRhbCwgZmF0YWxfcGVycm9yKTogRG9uJ3QgcHJvdG90eXBlLgoJKG15X3N0cmVycm9yKTogUmVtb3ZlLiAgQWxsIGNhbGxlcnMgdXNlIHhzdHJlcnJvciBpbnN0ZWFkLgoJKHhjYWxsb2MsIHhtYWxsb2MsIHhyZWFsbG9jLCB4c3RyZHVwLCBwdXRlbnYpOiBSZW1vdmUgZGVmaW5pdGlvbnMuCgkobWFpbik6IEFkZCBwcm90b3R5cGUuICBDb25zdGlmeSBsb3RzIG9mIGNoYXIqIHB0cnMuICBDaGFuZ2UgY2FsbHMKCXRvIHhjYWxsb2Mvc3RyY3B5L3N0cmNhdC8uLi4gIHRvIG9uZSBjYWxsIHRvIGNvbmNhdC4KCShtYWluLCBzY2FuX3Byb2dfZmlsZSwgc2Nhbl9saWJyYXJpZXMpOiBVc2UgYW4gaW50ZXJtZWRpYXRlCglgY29uc3QgY2hhciAqKicgdG8gYnVpbGQgYW4gYXJndiBhcnJheS4KCShtYXBmaWxlLCBsaWJzZWxlY3QsIGxpYmNvbXBhcmUsIGxvY2F0ZWxpYik6IEFkZCBwcm90b3R5cGVzLgoKCSogY29sbGVjdDIuaCAoY29sbGVjdF9leGVjdXRlLCBjb2xsZWN0X3dhaXQsIGR1bXBfZmlsZSwKCWZpbGVfZXhpc3RzKTogQ29uc3RpZnkgYSBjaGFyKi4KCShsZG91dCwgY19maWxlX25hbWUsIHRlbXBvcmFyeV9vYnN0YWNrLCBwZXJtYW5lbnRfb2JzdGFjaywKCXRlbXBvcmFyeV9maXJzdG9iaiwgdmZsYWcsIGRlYnVnKTogQWRkIGV4dGVybiBkZWNsYXJhdGlvbnMuCgkoZmFuY3lfYWJvcnQsIGVycm9yLCBub3RpY2UsIGZhdGFsLCBmYXRhbF9wZXJyb3IpOiBBZGQgcHJvdG90eXBlcy4KCgkqIHRsaW5rLmM6IERvbid0IGluY2x1ZGUgdG9wbGV2LmguCgkodmZsYWcsIGRlYnVnLCBsZG91dCwgY19maWxlX25hbWUsIHRlbXBvcmFyeV9vYnN0YWNrLAoJcGVybWFuZW50X29ic3RhY2ssIHRlbXBvcmFyeV9maXJzdG9iaik6IERvbid0IGRlY2xhcmUuCgkodGxpbmtfZXhlY3V0ZSwgZnJvYl9leHRlbnNpb24sIHN5bWJvbF9oYXNoX2xvb2t1cCwKCWZpbGVfaGFzaF9sb29rdXAsIGRlbWFuZ2xlZF9oYXNoX2xvb2t1cCwgdGxpbmtfaW5pdCwgZnJlYWRzeW0sCglyZWNvbXBpbGVfZmlsZXMsIHJlYWRfcmVwb19maWxlcywgZGVtYW5nbGVfbmV3X3N5bWJvbHMsCglzY2FuX2xpbmtlcl9vdXRwdXQpOiBDb25zdGlmeSBhIGNoYXIqLgoJKHN5bWJvbF9oYXNoX25ld2Z1bmMsIGZpbGVfaGFzaF9uZXdmdW5jLCBkZW1hbmdsZWRfaGFzaF9uZXdmdW5jLAoJZG9fdGxpbmspOiBNYXJrIHBhcmFtZXRlcnMgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKRnJpIFNlcCAgMyAxODowOToyNCAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tNjhrL202OGtlbGYuaDogU2V0IFVTRV9HQVM7IHRoaXMgbWFrZXMgZ2NjIGdlbmVyYXRlIGpic3IKCShyZWxhdGl2ZSkgcmF0aGVyIHRoYW4ganNyIChhYnNvbHV0ZSkgc3Vicm91dGluZSBjYWxsIGluc25zLgoJKiBjb25maWcvbTY4ay9tNjhrLWNvZmYuaDogRGl0dG8uCgpGcmkgU2VwICAzIDE3OjI0OjMxIDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgPHJlYXJuc2hhQGFybS5jb20+CgoJKiBhcm0uYyAobm90ZV9pbnZhbGlkX2NvbnN0YW50cyk6IE5vIG5lZWQgdG8gaWdub3JlIEFTTXMsIHdlIGNhbgoJbm93IHJld29yayB0aGVzZSB0b28uCgkoYXJtX3Jlb3JnKTogSWYgYW4gaW5zbiBjYW4ndCByZWFjaCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHBvb2wsCgllbnN1cmUgdGhhdCB3ZSBlbWl0IHRoYXQgcG9vbCBiZWZvcmUgdGhlIGluc24uCgpGcmkgU2VwICAzIDA5OjE0OjMyIDE5OTkgIE1hcmMgRXNwaWUgPGVzcGllQHRldHRvLmxpYWZhLmp1c3NpZXUuZnI+CgoJKiB0bGluay5jIChzY2FuX2xpbmtlcl9vdXRwdXQpOiBTa2lwIHRoZSBpbml0aWFsIHVuZGVyc2NvcmUgaW4KCWEgbWFuZ2xlZCBuYW1lIGlmIGFwcHJvcHJpYXRlLgoKRnJpIFNlcCAgMyAwMToyODozMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBvYmpjL29iamMtYWN0LmMgKG9iamNfdHJlZV9jb2RlX3R5cGUsIG9iamNfdHJlZV9jb2RlX2xlbmd0aCwKCW9iamNfdHJlZV9jb2RlX25hbWUsIHN5bnRoX2lkX3dpdGhfY2xhc3Nfc3VmZml4LCB3YXJuX3dpdGhfbWV0aG9kLAoJZXJyb3Jfd2l0aF9pdmFyLCBnZW5fZGVjbGFyYXRvciwgY3JlYXRlX2J1aWx0aW5fZGVjbCwKCW15X2J1aWxkX3N0cmluZywgZ2VuZXJhdGVfZGVzY3JpcHRvcl90YWJsZSwgZ2VuZXJhdGVfaXZhcnNfbGlzdCwKCWdlbmVyYXRlX2Rpc3BhdGNoX3RhYmxlLCBjaGVja19wcm90b2NvbHMsIFRBR19HRVRDTEFTUywKCVRBR19HRVRNRVRBQ0xBU1MsIFRBR19NU0dTRU5ELCBUQUdfTVNHU0VORFNVUEVSLCBUQUdfRVhFQ0NMQVNTLAoJZHVtcF9iYXNlX25hbWUsIGxhbmdfZGVjb2RlX29wdGlvbiwgYnVpbGRfZW5jb2RlX2V4cHIsCglzdGFydF9jbGFzcywgZmluaXNoX2NsYXNzLCBlbmNvZGVfcG9pbnRlciwgcmVhbGx5X3N0YXJ0X21ldGhvZCwKCWdlbl9kZWNsYXJhdGlvbiwgZHVtcF9pbnRlcmZhY2UsIGhhbmRsZV9jbGFzc19yZWYsIGhhbmRsZV9pbXBlbnQpOgoJQ29uc3RpZnkuCgkob2JqY19kZW1hbmdsZSwgb2JqY19wcmludGFibGVfbmFtZSwgZ2VuZXJhdGVfc3RydWN0X2J5X3ZhbHVlX2FycmF5KToKCUFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShidWlsZF9vYmpjX3N0cmluZ19kZWNsLCBidWlsZF9zZWxlY3Rvcl9yZWZlcmVuY2VfZGVjbCwKCWVuY29kZV9iaXRmaWVsZCwgYnVpbGRfY2xhc3NfcmVmZXJlbmNlX2RlY2wpOiBSZW1vdmUgdW51c2VkCglwYXJhbWV0ZXIsIGFsbCBjYWxsZXJzIGNoYW5nZWQuCgkobWF5YmVfb2JqY19tZXRob2RfbmFtZSk6IE1hcmsgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKG9iamNfcHJpbnRhYmxlX25hbWUpOiBMaWtld2lzZS4gIENoYW5nZSBzZWNvbmQgcGFyYW1ldGVyIHRvIHR5cGUgaW50LgoJKGluaXRfb2JqYyk6IFVzZSBtZW1jcHksIG5vdCBiY29weSwgdG8gYXZvaWQgY2FzdHMuCgpUaHUgU2VwICAyIDIxOjQ5OjUyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzX2luX2luc24pOiBBdm9pZCBlbGltaW5hdGluZyB0aGUKCXJlZyBub3RlcyBvbiBhIGRlbGV0ZWQgaW5zbi4KCSogZ2NzZS5jIChoYXNoX2V4cHJfMSk6IFVzZSBYV0lOVCBvbiBhIENPTlNUX0RPVUJMRS4KClRodSBTZXAgIDIgMjA6MTg6MTIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5jIChpeDg2X2F0dHJfbGVuZ3RoX2RlZmF1bHQpOiBIYW5kbGUgVFlQRV9GWENILgoKVGh1IFNlcCAgMiAyMjowMDowOCAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBGaXggaW5kZXggaW50byBpbm91dF9tb2RlIHdoZW4KCXJlYWRpbmcgaXQuCgpUaHUgU2VwICAyIDEzOjAwOjQ4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBJbnZva2UgTURfQVNNX0NMT0JCRVJTIGlmIHByZXNlbnQuCgkqIHRtLnRleGkgKE1EX0FTTV9DTE9CQkVSUyk6IERvY3VtZW50IGl0LgoKVGh1IFNlcCAgMiAxMDoyMjo0MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9saW5lKTogQ29uc3RpZnkgYGxhc3RmaWxlJy4KCSogZXhjZXB0LmMgKGV4cGFuZF9yZXRocm93KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCSogZXhwci5jIChkb19qdW1wX2J5X3BhcnRzX2dyZWF0ZXJfcnR4KTogTGlrZXdpc2UuCgkqIGZsb3cuYyAocmVwbGFjZV9pbnNucyk6IExpa2V3aXNlLgoJKGNyZWF0ZV9lZGdlX2xpc3QsIHZlcmlmeV9lZGdlX2xpc3QpOiBMaWtld2lzZS4KCSogZ2NzZS5jIChjcHJvcF9jYzBfanVtcCk6IFByb3RlY3QgZGVjbGFyYXRpb24gd2l0aCBIQVZFX2NjMC4KCgkqIGdlbmVtaXQuYyAoZ2VuX2V4cGFuZCk6IE9ubHkgZW1pdCBgb3BlcmFuZHNbTl0nIGRlY2wgaWYgdGhlcmUKCWlzIHNwZWNpYWwgY29kZSB0byBydW4uCgkobWFpbik6IERvbid0IGRlZmluZSBvcGVyYW5kcyB0byBlbWl0X29wZXJhbmQuCgkqIGdlbnJlY29nLmMgKG1haW4pOiBEb24ndCBlbWl0IGFuIGVtcHR5IHBlZXBob2xlMl9pbnNuIGZ1bmN0aW9uLgoKCSogcnRsLmggKE5PVEVfQkFTSUNfQkxPQ0spOiBVc2UgWDBCQkRFRi4KCgkqIGFscGhhL2FscGhhLmggKG5vcm1hbF9tZW1vcnlfb3BlcmFuZCk6IERlY2xhcmUuCgkocmVnX25vX3N1YnJlZ19vcGVyYW5kKTogRGVjbGFyZS4KCSogYWxwaGEvZWxmLmggKEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FKTogVXNlIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDLgoKVGh1IFNlcCAgMiAxMDoxOToyMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYy1wYXJzZS5pbiAoY29tcHN0bXRfcHJpbWFyeV9zdGFydCk6IE5ldywgYnJva2VuIG91dCBvZiBmaXJzdAoJcGFydCBvZiBjb21wc3RtdCBoYW5kbGluZyBpbiBwcmltYXJ5LgoJKHByaW1hcnkpOiBVc2UgaXQuICBBZGQgYW4gZXJyb3IgY2xhdXNlLgoJKGNvbXBzdG10X25vc3RhcnQpOiBSZW5hbWVkIGZyb20gY29tcHN0bXQ7IHJlbW92ZSBhbGwKCWluaXRpYWwgaW52b2NhdGlvbnMgb2YgY29tcHN0bXRfc3RhcnQuCgkoY29tcHN0bXQpOiBOZXcuCgpUaHUgU2VwICAyIDAxOjM1OjUwIDE5OTkgIE1hcmMgRXNwaWUgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIHByb3RvaXplLmMgKGdlbl9hdXhfaW5mb19maWxlKTogIExldCBwZXhlY3V0ZSBjYWxsIGNob29zZV90ZW1wX2Jhc2UgaWYKCW5lZWRlZC4KClRodSBTZXAgIDIgMDA6NDM6NTkgMTk5OSAgRmlubiBIYWthbnNzb24gIDxmaW5uQGF4aXMuY29tPgoKCSogY29tYmluZS5jIChzaW1wbGlmeV9zaGlmdF9jb25zdCk6IFJlbW92ZSBleHRyYSBzZW1pY29sb24uCgkqIGR3YXJmMm91dC5jIChyZW1vdmVfQVQpOiBMaWtld2lzZS4KCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0KTogTGlrZXdpc2UuCgkqIGdjb3YuYyAoY3JlYXRlX3Byb2dyYW1fZmxvd19ncmFwaCk6IExpa2V3aXNlLgoJKiByZW9yZy5jIChtb3N0bHlfdHJ1ZV9qdW1wKTogTGlrZXdpc2UuCgpUaHUgU2VwICAyIDAwOjA2OjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZvbGQtY29uc3QuYyAoZm9sZF9yYW5nZV90ZXN0KTogRG8gbm90IHRyeSB0byBmb2xkIHRoZSByYW5nZQoJdGVzdCBpZiB0aGUgcmhzIG9yIGxocyBoYXMgc2lkZSBlZmZlY3RzLgoKCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgpOiBSZWNvZ25pemUgYW5vdGhlciBjYXNlIG9mIGEgc3ludGhlc2l6ZWQKCXNpZ24gZXh0ZW5zaW9uLgoKCSogdmFyYXNtLmMgKG1hcmtfY29uc3RhbnRfcG9vbCk6IFdoZW4gbWFya2luZyBpbmRpcmVjdCByZWZlcmVuY2VzLAoJb25seSBsb29rIGF0IFNZTUJPTF9SRUZzLgoKCSogZXhjZXB0LmMgKGV4cGFuZF9maXh1cF9yZWdpb25fZW5kKTogRG8gbm90IHBlZWsgYXQKCUlOU05fVUlEIChub2RlLT5lbnRyeS0+b3V0ZXJfY29udGV4dCkgZm9yIGZsYWdfbmV3X2V4Y2VwdGlvbnMuCgpUaHUgU2VwICAyIDEzOjUyOjUzIDE5OTkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAY3lnbnVzLmNvbT4KCgkqIGZsYWdzLmg6IE5ldyB2YXJpYWJsZXMgYWxpZ25fbG9vcHMsIGFsaWduX2xvb3BzX2xvZywKCWFsaWduX2p1bXBzLCBhbGlnbl9qdW1wc19sb2csIGFsaWduX2xhYmVscywgYWxpZ25fbGFiZWxzX2xvZywKCWFsaWduX2Z1bmN0aW9ucywgYWxpZ25fZnVuY3Rpb25zX2xvZy4KCSogdG9wbGV2LmM6IERlZmluZSB0aGVtLgoJKGZfb3B0aW9ucyk6IEhhbmRsZSAtZmFsaWduLSogd2hlbiB0aGV5IGhhdmUgbm8gYXJndW1lbnQuCgkobWFpbik6IEFkZCBsb2dpYyB0byBzZXQgdmFyaWFibGVzIGZvciAtZmFsaWduLWZ1bmN0aW9ucywKCS1mYWxpZ24tanVtcHMsIC1mYWxpZ24tbGFiZWxzLCAtZmFsaWduLWxvb3BzLgoJTWFrZSBpdCAtZnNjaGVkLXZlcmJvc2U9PG4+IGFuZCAtZmlubGluZS1saW1pdD08bj4uCgkoZGlzcGxheV9oZWxwKTogQ2hhbmdlIGhlbHAgdG8gbWF0Y2ggb3B0aW9ucy4KCSogZmluYWwuYyAoTEFCRUxfQUxJR04pOiBEZWZhdWx0IHRvIGFsaWduX2xhYmVsc19sb2cuCgkoTEFCRUxfQUxJR05fTUFYX1NLSVApOiBEZWZhdWx0IHRvIGFsaWduX2xhYmVscy0xLgoJKExPT1BfQUxJR04pOiBEZWZhdWx0IHRvIGFsaWduX2xvb3BzX2xvZy4KCShMT09QX0FMSUdOX01BWF9TS0lQKTogRGVmYXVsdCB0byBhbGlnbl9sb29wcy0xLgoJKExBQkVMX0FMSUdOX0FGVEVSX0JBUlJJRVIpOiBEZWZhdWx0IHRvIGFsaWduX2p1bXBzX2xvZy4KCShMQUJFTF9BTElHTl9BRlRFUl9CQVJSSUVSX01BWF9TS0lQKTogRGVmYXVsdCB0byBhbGlnbl9qdW1wcy0xLgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBIYW5kbGUgYWxpZ25fZnVuY3Rpb25zLgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmg6IERvbid0IGRlY2xhcmUgc3BhcmNfYWxpZ25fKi4KCURvbid0IHByb3ZpZGUgTEFCRUxfQUxJR05fQUZURVJfQkFSUklFUiBvciBMT09QX0FMSUdOLgoJKERFRkFVTFRfU1BBUkNfQUxJR05fRlVOQ1MpOiBEZWxldGU7IHRha2UgZnVuY3Rpb25hbGl0eSBpbnRvCglzcGFyYy5jLgoJKEZVTkNUSU9OX0JPVU5EQVJZKTogRml4IGluY29ycmVjdCB1c2UtLS1pdCdzIG5vdCBqdXN0IGEgcmVxdWVzdCwKCWl0J3MgYSBwcm9taXNlLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYzogRGVsZXRlIHNwYXJjX2FsaWduX2xvb3BzLAoJc3BhcmNfYWxpZ25fanVtcHMsIHNwYXJjX2FsaWduX2Z1bmNzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcKCXZhcmlhYmxlcy4KCShzcGFyY19vdmVycmlkZV9vcHRpb25zKTogRGVmYXVsdCBhbGlnbl9mdW5jdGlvbnMgb24gdWx0cmFzcGFyYy4KCURlbGV0ZSAtbWFsaWduLSogaGFuZGxpbmcuCgoJKiBjb25maWcvbWlwcy9taXBzLmMgKG92ZXJyaWRlX29wdGlvbnMpOiAgT24gNjQtYml0IHRhcmdldHMsCgl0cnkgdG8gYWxpZ24gY29kZSB0byA2NC1iaXQgYm91bmRhcmllcy4KCShwcmludF9vcGVyYW5kKTogTmV3IHN1YnN0aXR1dGlvbiwgJX4sCgl3aGljaCBhbGlnbnMgbGFiZWxzIHRvIGFsaWduX2xhYmVsc19sb2cuCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKGRpdl90cmFwX25vcm1hbCk6IFVzZSAlfi4KCShkaXZfdHJhcF9taXBzMTYpOiBMaWtld2lzZS4KCShhYnNzaSk6IExpa2V3aXNlLgoJKGFic2RpMik6IExpa2V3aXNlLgoJKGZmc3NpMik6IExpa2V3aXNlLgoJKGZmc2RpMik6IExpa2V3aXNlLgoJKGFzaGxkaTNfaW50ZXJuYWwpOiBMaWtld2lzZS4KCShhc2hyZGkzX2ludGVybmFsKTogTGlrZXdpc2UuCgkobHNocmRpM19pbnRlcm5hbCk6IExpa2V3aXNlLgoJKGNhc2VzaV9pbnRlcm5hbCk6IExpa2V3aXNlLgoKV2VkIFNlcCAgMSAyMToxMzo0OCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCU1lcmdlIG5ldyBpYTMyIGJhY2tlbmQgZnJvbSB0aGUgYnJhbmNoIQoKCSogaTM4Ni5oLCBpMzg2LmMsIGkzODYubWQsIHJlZy1zdGFjay5jLCBpMzg2L3VuaXguaDogTWFueSBjaGFuZ2VzLgoJU2VlIENoYW5nZUxvZy5QMiBvbiBuZXdfaWEzMl9icmFuY2ggZm9yIGRldGFpbHMuCgoJKiBydGwuaCAoc3RhY2tfcmVnc19tZW50aW9uZWRfcCk6IERlbGV0ZSBwcm90b3R5cGUuCgkqIGkzODYvY3lnd2luLmggKFNVQlRBUkdFVF9QUk9MT0dVRSk6IE5vIG1vcmUgZG9fcnRsLgoJKiBpMzg2L3dpbjMyLmggKFNVQlRBUkdFVF9QUk9MT0dVRSk6IExpa2V3aXNlLgoJKiBpMzg2L2dhcy5oIChBU01fRklMRV9TVEFSVCk6IERlZmluZS4KCSogaTM4Ni93aW5udC5jIChpMzg2X3BlX3ZhbGlkX2RlY2xfYXR0cmlidXRlX3ApOiBVcGRhdGUKCWZvciBuYW1lIGNoYW5nZSBvZiBpeDg2X3ZhbGlkX2RlY2xfYXR0cmlidXRlX3AuCgkoaTM4Nl9wZV92YWxpZF90eXBlX2F0dHJpYnV0ZV9wKTogU2ltaWxhcmx5LgoKV2VkIFNlcCAgMSAxODoyMToyMyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBEb24ndCB1c2UgR0VUX01PREVfV0lERVJfTU9ERQoJdG8gc3RlcCB0aHJvdWdoIENDIG1vZGVzLgoKV2VkIFNlcCAgMSAyMDoxODowNiAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdtb3ZlLmMgKGZpeHVwX21hdGNoXzEpOiBEb24ndCBtb3ZlIElOU04gaW4gZnJvbnQgb2YgUCBpZgoJaXQgd291bGQgZW5kIHVwIGluIHRoZSBzaGFkb3cgb2YgYSBsaXZlIGZsYWdzIHJlZ3NpdGVyLgoKV2VkIFNlcCAgMSAxMTozMjowMCAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYzogRml4IG1hbnkgaW5kZW50YXRpb24gcHJvYmxlbXMuCgkqIHJlbG9hZC5jOiBMaWtld2lzZS4KClR1ZSBBdWcgMzEgMjI6MDg6MDMgMTk5OSAgTWFyYyBFc3BpZSA8ZXNwaWVAY3ZzLm9wZW5ic2Qub3JnPgoKCSogYWxpYXMuYyAobm9uX2xvY2FsX3JlZmVyZW5jZV9wKTogQ29uc3RpZnkgZm10LgoKVHVlIEF1ZyAzMSAyMzoxOTozNSAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pMzg2L3htLWN5Z3dpbi5oIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSk6IERlZmluZS4KClR1ZSBBdWcgMzEgMTY6NDQ6NTIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3NlLmMgKGRlbGV0ZV90cml2aWFsbHlfZGVhZF9pbnNucyk6IERvIG5vdCBkZWxldGUgc3RvcmVzIHRvCgl0aGUgaW50ZXJuYWxfYXJnX3BvaW50ZXIuCgpUdWUgQXVnIDMxIDEzOjM1OjQyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJTWVyZ2UgcGVlcGhvbGUyIGZyb20gbmV3X2lhMzJfYnJhbmNoOgoJKiBNYWtlZmlsZS5pbiAoU1RBR0VTVFVGRik6IEFkZCAqLnBlZXBob2xlMi4KCShtb3N0bHljbGVhbik6IExpa2V3aXNlLgoJKHJlY29nLm8pOiBEZXBlbmQgb24gcmVzb3VyY2UuaC4KCgkqIGZpbmFsLmMgKHBlZXBob2xlKTogQ29uZGl0aW9uYWxpemUgZGVjbCBvbiBIQVZFX3BlZXBob2xlLgoJKGZpbmFsX3NjYW5faW5zbik6IExpa2V3aXNlIGZvciB0aGUgaW52b2NhdGlvbiBvZiBwZWVwaG9sZS4KCSogZ2VuY29uZmlnLmMgKG1haW4pOiBMb29rIGZvciBwZWVwaG9sZSBhbmQgcGVlcGhvbGUyIHBhdHRlcm5zLgoJRW1pdCBIQVZFX3BlZXBob2xlKiBhY2NvcmRpbmdseS4KCSogZ2VucGVlcC5jIChtYWluKTogQ29uZGl0aW9uYWxpemUgZW50aXJlIG91dHB1dCBvbiBIQVZFX3BlZXBob2xlLgoJKiBmbGFncy5oIChmbGFnX3BlZXBob2xlMik6IERlY2xhcmUuCgkqIHRvcGxldi5jOiBOZXcgcGFzcyBwZWVwaG9sZTIuICBOZXcgZmxhZyAtZnBlZXBob2xlMi4KCgkqIGdlbmF0dHJ0YWIuYyAobWFpbik6IENvdW50IERFRklORV9QRUVQSE9MRTIuCgkqIGdlbmNvZGVzLmMgKG1haW4pOiBMaWtld2lzZS4KCSogZ2VuZXh0cmFjdC5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdlbmVtaXQuYyAobWF4X29wZXJhbmRfMSk6IExvb2sgZm9yIHRoZSBtYXggc2NyYXRjaCBvcGVyYW5kLgoJKGdlbl9ydHhfc2NyYXRjaCk6IE5ldy4KCShnZW5fZXhwKTogVXNlIGl0LCBhbmQgcGFzcyBvbiBuZXcgYXJnIHN1YnJvdXRpbmVfdHlwZS4KCShnZW5fZXhwYW5kKTogVGFrZSBtYXggc2NyYXRjaCBpbnRvIGFjY291bnQuCgkoZ2VuX3NwbGl0KTogRW1pdCBwZWVwaG9sZTIgZnVuY3Rpb25zLgoJKG91dHB1dF9wZWVwaG9sZTJfc2NyYXRjaCk6IE5ldy4KCShtYWluKTogSW5jbHVkZSBoYXJkLXJlZy1zZXQuaCBhbmQgcmVzb3VyY2UuaC4gIEhhbmRsZSBwZWVwaG9sZTIuCgkqIGdlbnJlY29nLmMgKHJvdXRpbmVfdHlwZSk6IEFkZCBQRUVQSE9MRTIuCgkoSVNfU1BMSVQpOiBOZXcuCgkobWFrZV9pbnNuX3NlcXVlbmNlKTogTWF0Y2ggb3V0ZXIgcGFyYWxsZWwgZm9yIHBlZXAyLiAgRGlzY2FyZAoJdG9wIGxldmVsIHNjcmF0Y2hlcyBhbmQgZHVwcy4KCShhZGRfdG9fc2VxdWVuY2UpOiBOZXcgYXJncyBpbnNuX3R5cGUgYW5kIHRvcC4gIFVwZGF0ZSBhbGwgY2FsbGVycy4KCUhhbmRsZSB0b3BsZXZlbCBwZWVwMiBtYXRjaGluZyBpbnNucy4KCSh3cml0ZV9zdWJyb3V0aW5lKTogSGFuZGxlIHBlZXAyLgoJKHdyaXRlX3RyZWVfMSk6IExpa2V3aXNlLgoJKHdyaXRlX3RyZWUpOiBMaWtld2lzZS4KCShtYWluKTogTGlrZXdpc2UuCgkoY2hhbmdlX3N0YXRlKTogTmV3IGFyZyBhZnRlcndhcmQuICBVcGRhdGUgYWxsIGNhbGxlcnMuCglIYW5kbGUgbWF0Y2hpbmcgc2VwYXJhdGUgaW5zbnMuCgkqIHJlY29nLmMgKHJlY29nX25leHRfaW5zbik6IE5ldy4KCShwZWVwaG9sZTJfb3B0aW1pemUpOiBOZXcuCgkqIHJ0bC5kZWYgKERFRklORV9QRUVQSE9MRTIpOiBOZXcuCgkqIHJlc291cmNlLmMgKGZpbmRfZnJlZV9yZWdpc3Rlcik6IE5ldyBhcmd1bWVudCBsYXN0X2luc24uICBVc2UgaXQKCXRvIGZpbmQgYSByZWdpc3RlciBhdmFpbGFibGUgdGhyb3VnaCB0aGUgZW50aXJlIHNwYW4uCgkqIHJlc291cmNlLmggKGZpbmRfZnJlZV9yZWdpc3Rlcik6IFVwZGF0ZSBwcm90b3R5cGUuCgpUdWUgQXVnIDMxIDExOjUxOjA2IDE5OTkgIEppbSBLaW5nZG9uICA8aHR0cDovL2RldmVsb3Blci5yZWRoYXQuY29tPgoKCSogaTM4Ni5jIChvdXRwdXRfc3RybGVuX3Vucm9sbCk6IERvbid0IHdyaXRlIHhvcHNbN10KCWxhYmVsIGlmIGl0IHdhc24ndCBzZXQuCgoxOTk5LTA4LTMxIDEyOjQ0IC0wNzAwICBaYWNrIFdlaW5iZXJnICA8emFja0BiaXRtb3Zlci5jb20+CgoJKiBjcHBsaWIuYyAoc3RydWN0IGRpcmVjdGl2ZSk6IENvbnN0LWlmeSBuYW1lIHBvaW50ZXIgYW5kCglmdW5jdGlvbiBwb2ludGVyIHByb3RvdHlwZS4KCSh2YWxpZGF0ZV9lbHNlLCBkb19kZWZpbmUsIGRvX2xpbmUsIGRvX2luY2x1ZGUsIGRvX3VuZGVmLAoJZG9fZXJyb3IsIGRvX3ByYWdtYSwgZG9faWRlbnQsIGRvX2lmLCBkb194aWZkZWYsIGRvX2Vsc2UsCglkb19lbGlmLCBkb19lbmRpZiwgZG9fc2NjcywgZG9fYXNzZXJ0LCBkb191bmFzc2VydCwKCWRvX3dhcm5pbmcpOiBDb25zdC1pZnkgc2Vjb25kIGFyZy4KCShkaXJlY3RpdmVfdGFibGUpOiBNYXJrIGNvbnN0LiAgUmVvcmRlciBlbnRyaWVzIGJ5IGZyZXF1ZW5jeQoJb2YgdXNhZ2UsIHJlY29yZCBzdGF0aXN0aWNzLgoKMTk5OS0wOC0zMSAxMjoyMCAtMDcwMCBaYWNrIFdlaW5iZXJnIDx6YWNrQGJpdG1vdmVyLmNvbT4KCgkqIHJ0bC5oIChSVExfQ0hFQ0sxLCBSVExfQ0hFQ0syKTogTmV3IG1hY3JvcyB3aGljaCB0eXBlLSBhbmQKCWJvdW5kcy0gY2hlY2sgUlRMIGFjY2Vzc2VzIGlmIC0tZW5hYmxlLWNoZWNraW5nLgoJKFJUVkVDX0VMVCk6IEJvdW5kcyBjaGVjayBpZiAtLWVuYWJsZS1jaGVja2luZy4KCShYV0lOVCwgWElOVCwgWFNUUiwgWEVYUCwgWFZFQywgWE1PREUsIFhCSVRNQVAsIFhUUkVFLAoJWEJCREVGKTogVXNlIFJUTF9DSEVDSzEvUlRMX0NIRUNLMiBhcyBhcHByb3ByaWF0ZS4KCShYVkVDRVhQLCBYVkVDTEVOKTogRGVmaW5lIGluIHRlcm1zIG9mIFhWRUMsIFJUVkVDX0VMVCwgYW5kCglHRVRfTlVNX0VMRU0uCgkoWDBXSU5ULCBYMElOVCwgWDBTVFIsIFgwRVhQLCBYMFZFQywgWDBNT0RFLCBYMEJJVE1BUCwgWDBUUkVFLAoJWDBCQkRFRiwgWDBBRFZGTEFHUyk6ICBOZXcgbWFjcm9zIGZvciBhY2Nlc3NpbmcgJzAnIHNsb3RzIG9mIFJUWGVzLgoKCShBRERSX0RJRkZfVkVDX0ZMQUdTKTogVXNlIFgwQURWRkxBR1MuCgkoTk9URV9TT1VSQ0VfRklMRSk6IFVzZSBYMFNUUi4KCShOT1RFX0JMT0NLX05VTUJFUiwgTk9URV9FSF9IQU5ETEVSLCBMQUJFTF9OVVNFUywKCU1FTV9BTElBU19TRVQpOiBVc2UgWDBJTlQuCgkoTk9URV9SQU5HRV9JTkZPLCBOT1RFX0xJVkVfSU5GTywgTk9URV9CQVNJQ19CTE9DSywKCUpVTVBfTEFCRUwsIExBQkVMX1JFRlMsIExBQkVMX05FWFRSRUYsIENPTlRBSU5JTkdfSU5TTik6CglVc2UgWDBFWFAuCgkqIHJlYWwuaCAoQ09OU1RfRE9VQkxFX0NIQUlOKTogVXNlIFgwRVhQLgoJKiBydGwuYyAoY29weV9ydHgsIGNvcHlfbW9zdF9ydHgpOiBDb3B5ICcwJyBzbG90cyB3aXRoIFgwV0lOVC4KCShydGxfY2hlY2tfZmFpbGVkX2JvdW5kcywgcnRsX2NoZWNrX2ZhaWxlZF90eXBlMSwKCXJ0bF9jaGVja19mYWlsZWRfdHlwZTIsIHJ0dmVjX2NoZWNrX2ZhaWxlZF9ib3VuZHMpOiBOZXcKCWZ1bmN0aW9ucy4KCShmYW5jeV9hYm9ydCk6IEZpeCBjb21tZW50LgoKCSogY3NlLmMgKGNhbm9uX2hhc2gpOiBSZWFkIENPTlNUX0RPVUJMRSBkYXRhIHNsb3RzIHdpdGggWFdJTlQuCgkoY3NlX2luc24pOiBEZWNyZW1lbnQgTEFCRUxfTlVTRVMgZm9yIGp1bXAgdGFyZ2V0IGJlZm9yZQoJZGVsZXRpbmcganVtcCBpbnNuLgoJKiBlbWl0LXJ0bC5jIChnZW5fcnR4X0NPTlNUX0RPVUJMRSk6IFVzZSBYMEVYUCBmb3Igc2xvdCAxLgoJKiBmaW5hbC5jIChhbHRlcl9zdWJyZWcpOiBDb21wdXRlIHJlZ25vIGJlZm9yZSBjaGFuZ2luZyB4IHRvCglSRUc7IHNldCBSRUdOTyh4KSBhZnRlciBjaGFuZ2luZyBpdC4KCSogZmxvdy5jIChjb3VudF9iYXNpY19ibG9ja3MpOiBVc2UgWFdJTlQgdG8gaW5zcGVjdCBFSF9SRUdJT04KCW5vdGVzIGNvbnRhaW5pbmcgQ09OU1RfSU5Ucy4KCShkZWxldGVfZWhfcmVnaW9ucyk6IFVzZSBOT1RFX0VIX0hBTkRMRVIuCgkqIGZ1bmN0aW9uLmMgKHB1dF9yZWdfaW50b19zdGFjayk6IE1ha2UgcmVnIGEgTUVNIGJlZm9yZQoJaW5pdGlhbGl6aW5nIGl0LgoJKGZpeHVwX3Zhcl9yZWZzX2luc25zKTogIFNhdmUgUkVHX05PVEVTIChpbnNuKSBpbiBjYXNlIHdlCglkZWxldGUgaW5zbi4KCShnZW5fbWVtX2FkZHJlc3NvZik6IE1ha2UgcmVnIGEgTUVNIGJlZm9yZSBpbml0aWFsaXppbmcgaXQuCgkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IENvcHkgJzAnIHNsb3RzIHdpdGgKCVgwV0lOVC4KCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBaYXAgUkVHX05PVEVTIGJlZm9yZQoJZGVsZXRpbmcgYW4gaW5zbiwgbm90IGFmdGVyLgoJKGJsb2NrX2FsbG9jKTogT25seSBsb29rIGF0IFBBVFRFUk4oaW5zbikgaWYgd2UgaGF2ZSB0bywgYW5kCglvbmx5IGlmIGl0J3MgZm9ybWF0IGNsYXNzICdpJy4KCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBDaGVjayBibC0+Yml2LT5hZGRfdmFsIGlzIGEKCUNPTlNUX0lOVCBiZWZvcmUgdXNpbmcgaXRzIElOVFZBTC4KCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IFVzZSBYMFNUUi4KCSogcmVnbW92ZS5jIChmaXh1cF9tYXRjaF8xKTogRG9uJ3QgbG9vayBhdCBQQVRURVJOIG9mCglub24tY2xhc3MtJ2knIGluc24gY2hhaW4gZWxlbWVudHMuCgkqIHJlbG9hZC5jIChsb2NfbWVudGlvbmVkX2luX3ApOiBUYWtlIGFkZHJlc3Mgb2YKCWluLT5mbGRbMV0ucnR4IGRpcmVjdGx5LgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENoYW5nZSByZWcgdG8gYSBNRU0gYmVmb3JlIGluaXRpYWxpemluZwoJaXQuCgkqIHZhcmFzbS5jIChtYXJrX2NvbnN0YW50X3Bvb2wpOiBTa2lwIENPTlNUX0RPVUJMRVMsIHdoaWNoCgloYXZlIG5vIG5hbWVzLgoJKiBjb25maWcvaTM4Ni9pMzg2Lm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaF9pZl96ZXJvKTogRml4IHR5cG8uCgpGcmkgQXVnIDIwIDEzOjQzOjQxIDE5OTkgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5jIChtYWNoaW5lX2RlcGVuZGVudF9yZW9yZyk6IEZvcmNlIGEKCWJhcnJpZXIgdG8gb3V0cHV0IHRoZSBsb2NhbCBjb25zdGFudCBwb29sIGlmIGEgYmFycmllciBoYXNuJ3QKCWJlZW4gZm91bmQgYXQgYSBuYXR1cmFsIHBvaW50IGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uCgpNb24gQXVnIDMwIDIyOjA0OjM2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtcGFyc2UuaW4gKGxhbmd1YWdlX3N0cmluZyk6IENvbnN0aWZ5LgoKCSogZHdhcmYyb3V0LmMgKGxhbmd1YWdlX3N0cmluZyk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCgkqIGR3YXJmb3V0LmMgKGxhbmd1YWdlX3N0cmluZyk6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKGxhbmd1YWdlX3N0cmluZywgaW5pdF9wYXJzZSwgZmluaXNoX3BhcnNlKTogTGlrZXdpc2UuCgoJKiB0cmVlLmggKGxhbmd1YWdlX3N0cmluZywgaW5pdF9wYXJzZSwgZmluaXNoX3BhcnNlKTogRGVjbGFyZS4KCgkqIGkzODYvc3VuMzg2LmggKGxhbmd1YWdlX3N0cmluZyk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCgkqIG1pcHMuaCAobGFuZ3VhZ2Vfc3RyaW5nKTogTGlrZXdpc2UuCgoJKiBuZXh0c3RlcC5oIChsYW5ndWFnZV9zdHJpbmcpOiBMaWtld2lzZS4KCgkqIG5leHRzdGVwMjEuaCAobGFuZ3VhZ2Vfc3RyaW5nKTogTGlrZXdpc2UuCgoJKiByczYwMDAuYyAobGFuZ3VhZ2Vfc3RyaW5nKTogTGlrZXdpc2UuCgpNb24gQXVnIDMwIDIwOjU2OjA4IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChPQkpTLCBQUk9UT19PQkpTKTogUmVtb3ZlIGdldHB3ZC5vLgoJKGdldHB3ZC5vKTogUmVtb3ZlIHRhcmdldC4KCgkqIGdldHB3ZC5jOiBEZWxldGUgZmlsZS4gIEl0cyBpbiBsaWJpYmVydHkgbm93LgoKCSogZGJ4b3V0LmMgKGdldHB3ZCk6IERvbid0IHByb3RvdHlwZS4KCSogZHdhcmYyb3V0LmMgKGdldHB3ZCk6IExpa2V3aXNlCgkqIGR3YXJmb3V0LmMgKGdldHB3ZCk6IExpa2V3aXNlCgkqIGZpbmFsLmMgKGdldHB3ZCk6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jIChnZXRwd2QpOiBMaWtld2lzZS4KCk1vbiBBdWcgMzAgMjA6MjE6MzQgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3NlLmM6IChmb2xkX3J0eCk6IENhc3QgdG8gSE9TVF9XSURFX0lOVCBpbiBsZWZ0IHNoaWZ0LgoKTW9uIEF1ZyAzMCAxNjowNzo0OSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChuZXdfaW5zbl9kZWFkX25vdGVzKTogVXNlIHNldHNfcmVnX29yX3N1YnJlZyBub3QKCW1hcmtfc2V0X3Jlc291cmNlcy4KCk1vbiBBdWcgMzAgMTI6MjM6NTMgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZml4aW5jL01ha2VmaWxlLmluIChzdWJkaXIpOiBOZXcuCgkoZml4aW5jbC54LCBpbmNsaGFjay5zaCwgZml4aW5jbC5zaCk6IFVzZSBjcCBpbnN0ZWFkIG9mICQoQ1ApLgoJKE1ha2VmaWxlKTogTmV3LgoKTW9uIEF1ZyAzMCAwMTowMjowOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBlbWl0LXJ0bC5jIChjb3B5X3J0eF9pZl9zaGFyZWQpOiBBIE1FTSB3aGljaCByZWZlcmVuY2VzCgl2aXJ0dWFsX3N0YWNrX3ZhcnNfcnR4IG9yIHZpcnR1YWxfaW5jb21pbmdfYXJnc19ydHggY2FuIG5vdAoJYmUgc2hhcmVkLgoKCSogaW52b2tlLnRleGk6IEZpeCB0eXBvLgoKCSogZHdhcmYyb3V0LmMgKG1lbV9sb2NfZGVzY3JpcHRvcik6IE5ldyBhcmd1bWVudCBNT0RFLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuICBIYW5kbGUgYXV0b2luY3JlbWVudCBhZGRyZXNzaW5nIG1vZGVzLgoKCSogaW50ZWdyYXRlLmMgKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogSGFuZGxlIGludGVybmFsX2FyZ19wb2ludGVyCglqdXN0IGxpa2Ugd2Ugd291bGQgdGhlIHZpcnR1YWwgaW5jb21pbmcgYXJncyByZWdpc3RlciB3aGVuCglpbnRlZ3JhdGluZy4KClN1biBBdWcgMjkgMjM6MTc6NTQgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKEFTTV9GSUxFX1NUQVJUKTogU3BlY2lmeSBjb21wbGV0ZSBmaWxlbmFtZSwgaW5jbHVkaW5nCglwYXRoLCBpbiAuZmlsZSBkaXJlY3RpdmUuCgpTdW4gQXVnIDI5IDA1OjA2OjQzIDE5OTkgIFJ1c3MgQWxsYmVyeSAgPHJyYUBzdGFuZm9yZC5lZHU+CgoJKiBnY2MudGV4aSAoRXh0ZXJuYWwgQnVncyk6IFJlbW92ZSBvYnNvbGV0ZSBub3RlIGFib3V0IFBlcmwgb24KCVN1bk9TLgoKMTk5OS0wOC0yOSAwODozOCAtMDcwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogc3RkYm9vbC5oOiBNYWtlIHRoZSB0eXBlZGVmIG5hbWUgX0Jvb2wsIHdpdGggYm9vbCBhICNkZWZpbmVkCglhbGlhcy4KClN1biBBdWcgMjkgMDk6MzY6NTAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogdHJlZS5jICh0cmVlX2NvZGVfbmFtZSk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiB0cmVlLmggKHRyZWVfY29kZV9uYW1lLCBkZWNsX3ByaW50YWJsZV9uYW1lKTogTGlrZXdpc2UuCgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChkZWNsX25hbWUsIGRlY2xfcHJpbnRhYmxlX25hbWUpOiBMaWtld2lzZS4KCgkqIHZheC92bXMuaCAoTUFZQkVfVk1TX0ZVTkNUSU9OX1BST0xPR1VFKTogTGlrZXdpc2UuCgoJKiBvYmpjL29iamMtYWN0LmMgKGRlY2xfcHJpbnRhYmxlX25hbWUpOiBSZW1vdmUgcmVkdW5kYW50IHByb3RvdHlwZS4KCShpbml0X29iamMpOiBSZW1vdmUgZnVuY3Rpb24gcG9pbnRlciBjYXN0LgoKU3VuIEF1ZyAyOSAwNTowMToxNyAxOTk5ICBKb2huIERhdmlkIEFuZ2xpbiA8ZGF2ZUBoaWF1bHkxLmhpYS5ucmMuY2E+CgoJKiBwYS5tZCAoaW50ZXJzcGFjZV9qdW1wKTogTmV3IHBhdHRlcm4uCgkoYnVpbHRpbl9sb25nam1wKTogTmV3IGV4cGFuZGVyLgoKMTk5OS0wOC0yOSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBmcC1iaXQuYyAoYWRkLCBzdWIsIG11bHRpcGx5LCBkaXZpZGUsIGNvbXBhcmUsIF9lcV9mMiwgX25lX2YyLAoJX2d0X2YyLCBfZ2VfZjIsIF9sdF9mMiwgX2xlX2YyLCBmbG9hdF90b19zaSwgZmxvYXRfdG9fdXNpLCBuZWdhdGUsCglzZl90b19kZiwgZGZfdG9fc2YpOiBGaXggcG90ZW50aWFsIHByb2JsZW0gd2l0aCBhbGlhcyBhbmFseXNpcy4KClN1biBBdWcgMjkgMDQ6MzA6NTIgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSoganVtcC5jIChkZWxldGVfcHJpb3JfY29tcHV0YXRpb24pOiBBbHNvIGNoZWNrIGNhbGxzCgl0byBjb25zdGFudCBmdW5jdGlvbnMuICBEb24ndCBib3RoZXIgY2hlY2tpbmcgZm9yIGEKCVJFR19VTlVTRUQgbm90ZSBiZWZvcmUgYWRkaW5nIGl0LgoJKGRlbGV0ZV9jb21wdXRhdGlvbik6IEhhbmRsZSBtdWx0aS13b3JkIGhhcmQgcmVnaXN0ZXJzCgl3aGVuIHN5bnRoZXNpemluZyBtaXNzaW5nIFJFR19ERUFEIG5vdGVzIGZvciBhIHJlZ2lzdGVyCgl3aGljaCBpcyBib3RoIHNldCBhbmQgdXNlZCBieSBhbiBpbnNuLgoKMTk5OS0wOC0yOSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5jICh0aGlzX2xvb3BfaW5mbyk6IE5ldyB2YXJpYWJsZS4KCShsb29wX2hhc19jYWxsLCBsb29wX2hhc192b2xhdGlsZSwgbG9vcF9oYXNfdGFibGVqdW1wLAoJbG9vcF9jb250aW51ZSwgbG9vcHNfZW5jbG9zZWQpOiBSZXBsYWNlIHdpdGggZmllbGRzIGluIHRoaXNfbG9vcF9pbmZvLgoJQWxsIHVzZXMgdXBkYXRlZC4KCShwcmVzY2FuX2xvb3AsIHN0cmVuZ3RoX3JlZHVjZSk6IE5ldyBhcmd1bWVudCBsb29wX2luZm8uICBBbGwgY2FsbGVycwoJdXBkYXRlZC4KCShzY2FuX2xvb3ApOiBOZXcgdmFyaWFibGUgbG9vcF9pbmZvLCBpbml0aWFsaXplIHRvIGFkZHJlc3Mgb2YKCXRoaXNfbG9vcF9pbmZvLgoJKHByZXNjYW5fbG9vcCk6IFNldCBsb29wX2luZm8tPnZ0b3AgaWYgZmluZCBOT1RFX0lOU05fTE9PUF9WVE9QLgoJRGVsZXRlIHZhcmlhYmxlIGxvb3BfaGFzX211bHRpcGxlX2V4aXQgdGFyZ2V0cyBhbmQgcmVwbGFjZSB3aXRoCglmaWVsZCBpbiB0aGlzX2xvb3BfaW5mby4KCShmaW5kX2FuZF92ZXJpZnlfbG9vcHMpOiBSZW5hbWUgdGhpc19sb29wIHRvIHRoaXNfbG9vcF9udW0uCgkoc3RyZW5ndGhfcmVkdWNlKTogRGVsZXRlIGxvb3BfaXRlcmF0aW9uX2luZm8uICBSZXBsYWNlIHZhcmlhYmxlCglsb29wX2luZm8gd2l0aCBmdW5jdGlvbiBhcmd1bWVudCBvZiBzYW1lIG5hbWUuCgkoaW5zZXJ0X2JjdCk6IFJld29yayB0ZXN0IGZvciBsb29wIGJlaW5nIGNvbXBsZXRlbHkgdW5yb2xsZWQuCgoJKiBsb29wLmggKHN0cnVjdCBsb29wX2luZm8pOiBOZXcgZmllbGRzIG51bSwgbG9vcHNfZW5jbG9zZWQsCgloYXNfY2FsbCwgaGFzX3ZvbGF0aWxlLCBoYXNfdGFibGVqdW1wLCBoYXNfbXVsdGlwbGVfZXhpdF90YXJnZXRzLAoJaGFzX2luZGlyZWN0X2p1bXAsIGFuZCBjb250LiAgUmVkZWZpbmUgdXNlIG9mIHVucm9sbF9udW1iZXIuCgkobG9vcF91bnJvbGxfbnVtYmVyKTogRGVsZXRlLgoKCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogU3RvcmUgbG9vcCB1bnJvbGwgY291bnQgaW4gdW5yb2xsX251bWJlcgoJZmllbGQgb2YgbG9vcF9pbmZvLgoJKGxvb3BfaXRlcmF0aW9ucyk6IERlbGV0ZSB2YXJpYWJsZSB2dG9wIGFuZCBpbnN0ZWFkIHVzZQoJbG9vcF9pbmZvLT52dG9wIGNvbXB1dGVkIGluIHByZXNjYW5fbG9vcC4KClN1biBBdWcgMjkgMDM6Mjc6MjMgMTk5OSAgU2NvdHQgV2Vpa2FydCA8c2NvdHRAaWdjLmFwYy5vcmc+CgoJKiBmaXgtaGVhZGVyLmMgKG1haW4pOiBEbyBub3QgcGFzcyBhIG51bGwgcG9pbnRlciB0byBzdHJjbXAuCgpTdW4gQXVnIDI5IDAzOjE4OjQ4IDE5OTkgIFdpbGxpYW0gQmFkZXIgICh3aWxsaWFtQG5zY3MuZmFzdC5uZXQpCgoJKiBjb25maWd1cmUuaW4gKGlbMzQ1NjddODYtKi1zY28zLjJ2NCopOiBUYXJnZXQgZG9lcyBub3QgdHJ1bmNhdGUKCWZpbGVuYW1lcy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU2F0IEF1ZyAyOCAxOTozNjowNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemVfMSk6IERvIG5vdCBkZWxldGUgYXNzaWdubWVudHMgdG8KCWludGVybmFsX2FyZ19wb2ludGVyLgoJKiBjc2UuYyAoZGVsZXRlX3RyaXZpYWxseV9kZWFkX2luc25zKTogQWx3YXlzIGNvbnNpZGVyIGEgc2V0IG9mCgl0aGUgaW50ZXJuYWxfYXJnX3BvaW50ZXIgbGl2ZS4KClNhdCBBdWcgMjggMTY6MjQ6MzEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoZmxvd19kZWxldGVfaW5zbl9jaGFpbik6IFJlbmFtZSBmcm9tIGRlbGV0ZV9pbnNuX2NoYWluLgoJKHVwZGF0ZV9saWZlX2luZm8pIFtSRUdfV0FTXzBdOiBTZWFyY2ggdGhlIG9yaWdpbmFsIGluc25zIHJhdGhlcgoJdGhhbiB0aGUgbmV3IGluc25zIGZvciB0aGUgbm90ZS4gIEZpeCB0eXBvcyBmaW5kaW5nIG5vdGVfZGVzdC4KCUlmIG5vIGRlc3QgZm91bmQsIGRpc2NhcmQgdGhlIG5vdGUgcmF0aGVyIHRoYW4gYWJvcnQuCglbUkVHX05PQUxJQVNdOiBIYW5kbGUgYXMgUkVHX05PX0NPTkZMSUNULgoJKHJlcGxhY2VfaW5zbnMpOiBSZW1vdmUgdGhlIG9sZCBpbnNuIGxpc3QgYWZ0ZXIgdXBkYXRlX2xpZmVfaW5mbwoJbm90IGJlZm9yZS4KClNhdCBBdWcgMjggMTY6MjA6MTIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emUpOiBDbGVhciBMT0dfTElOS1MgYmVmb3JlIGNhbGxpbmcKCXNjaGVkX2FuYWx5emVfaW5zbi4KCShzY2hlZF9hbmFseXplXzEpOiBMZXQgYWRkX2RlcGVuZGVuY2UgY2FyZSBmb3Igbm90IGFkZGluZyBkdXBzLgoJKHNjaGVkX2FuYWx5emVfMik6IExpa2V3aXNlLgoJKGFkZF9icmFuY2hfZGVwZW5kZW5jZXMpOiBMaWtld2lzZS4KClNhdCBBdWcgMjggMTU6NTg6MTYgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L3dpbm50LmMgKGV4cG9ydF9saXN0KTogTmV3IHR5cGUuCgkoZXhwb3J0c19oZWFkKTogUmVuYW1lIHRvCgkoZXhwb3J0X2hlYWQpOiAgdGhpcy4KCShpMzg2X3BlX3JlY29yZF9leHBvcnRlZF9zeW1ib2wpOiBBZGQgaXNfZGF0YSBmbGFnLgoJKGkzODZfcGVfYXNtX2ZpbGVfZW5kKTogRW1pdCBkaXJlY3RpdmUgZm9yIGV4cG9ydGVkIHZhcmlhYmxlcy4KCSogaTM4Ni9jeWd3aW4uaCAoaTM4Nl9wZV9yZWNvcmRfZXhwb3J0ZWRfc3ltYm9sKTogVXBkYXRlCglwcm90b3R5cGUuCgkqIGkzODYvY3lnd2luLmggKEFTTV9PVVRQVVRfQ09NTU9OKTogU3BlY2lmeSBzeW1ib2wgdHlwZS4KCShBU01fREVDTEFSRV9PQkpFQ1RfTkFNRSk6IExpa2V3aXNlLgoJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBMaWtld2lzZS4KCSogaTM4Ni91d2luLmggKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBMaWtld2lzZS4KCkZyaSBBdWcgMjcgMTU6MzU6MjQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3NlLmMgKGZvbGRfcnR4KTogV29yayBhcm91bmQgYnVnIGluIFN1biBWNS4wIGNvbXBpbGVycy4KCgkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IERvIG5vdCBzdG9wIG9uIFNVQlJFR19XT1JEIG9mIGFuCglvcGVyYW5kLgoKRnJpIEF1ZyAyNyAxNDowMToxOSAxOTk5ICBNYXJjIEVzcGllIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBjb25maWcvb3BlbmJzZC5oOiBEZWZpbmUgU0VUX0FTTV9PUC4KCSogdG0udGV4aTogY3Jvc3MtcmVmZXJlbmNlIFNFVF9BU01fT1AgaW4gdGhlIGluZGV4LgoKMTk5OS0wOC0yNyAxMzoyNyAtMDcwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogcnRsLmM6IERlZmluZSBDT05TVF9ET1VCTEVfRk9STUFUIHRvIHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQKCWZvciBhIENPTlNUX0RPVUJMRSwgYXQgY29tcGlsZSB0aW1lLiAgSW5pdGlhbGl6ZSBydHhfbGVuZ3RoCglhbmQgY2xhc3NfbmFycm93ZXN0X21vZGUgYXQgY29tcGlsZSB0aW1lLiAgS2lsbCBpbml0X3J0bC4KCU1hcmsgcnR4X2xlbmd0aCwgbW9kZV9jbGFzcywgbW9kZV9zaXplLCBtb2RlX3VuaXRfc2l6ZSwKCW1vZGVfd2lkZXJfbW9kZSwgbW9kZV9tYXNrX2FycmF5LCBjbGFzc19uYXJyb3dlc3RfbW9kZSwgYW5kCglydHhfZm9ybWF0IGFzIGNvbnN0LiAgS2lsbCBhbGwgcmVmZXJlbmNlcyB0byBFWFRSQV9DQ19NT0RFUyBvcgoJRVhUUkFfQ0NfTkFNRVMuCgkqIHJ0bC5kZWYgKENPTlNUX0RPVUJMRSk6IFVzZSBDT05TVF9ET1VCTEVfRk9STUFUIG1hY3JvIGZvcgoJZm9ybWF0LgoJKiBydGwuaDogRGVjbGFyZSBydHhfbGVuZ3RoIGFuZCBydHhfZm9ybWF0IGFzIGNvbnN0LgoJKiBtYWNobW9kZS5kZWY6IERlZmluZSBDQygpLiAgVXNlIENDKCkgdG8gZGVmaW5lIENDbW9kZS4gIElmCglFWFRSQV9DQ19NT0RFUyBpcyBkZWZpbmVkLCBleHBhbmQgaXQgaGVyZS4KCSogbWFjaG1vZGUuaDogRGVjbGFyZSBtb2RlX2NsYXNzLCBtb2RlX3NpemUsIG1vZGVfdW5pdF9zaXplLAoJbW9kZV93aWRlcl9tb2RlLCBtb2RlX21hc2tfYXJyYXksIGFuZCBjbGFzc19uYXJyb3dlc3RfbW9kZSBhcwoJY29uc3QuICBLaWxsIGFsbCByZWZlcmVuY2VzIHRvIEVYVFJBX0NDX01PREVTLgoKCSogdG9wbGV2LmM6IERvbid0IHByb3RvdHlwZSBvciBjYWxsIGluaXRfcnRsLgoJKiBvcHRhYnMuYzogRG9uJ3QgY2FsbCBpbml0X21vdl9vcHRhYi4KCSogZ2VuZW1pdC5jOiBEb24ndCBnZW5lcmF0ZSBpbml0X21vdl9vcHRhYi4gIERvbid0IGNhbGwKCWluaXRfcnRsLgoJKiBnZW5nZW5ydGwuYzogRHVwbGljYXRlIGNhbGN1bGF0aW9uIG9mIENPTlNUX0RPVUJMRV9GT1JNQVQKCWhlcmUuCgkqIGdlbmF0dHIuYywgZ2VuYXR0cnRhYi5jLCBnZW5jb2Rlcy5jLCBnZW5jb25maWcuYywKCWdlbmV4dHJhY3QuYywgZ2VuZmxhZ3MuYywgZ2Vub3Bpbml0LmMsIGdlbm91dHB1dC5jLCBnZW5wZWVwLmMsCglnZW5yZWNvZy5jOiBEb24ndCBjYWxsIGluaXRfcnRsLgoKCSogYXJjLmgsIGFybS5oLCBjNHguaCwgaTM4Ni5oLCBpOTYwLmgsIG04OGsuaCwgcGEuaCwgcGRwMTEuaCwKCXJzNjAwMC5oLCBzcGFyYy5oOiBEb24ndCBkZWZpbmUgRVhUUkFfQ0NfTkFNRVMuICBVc2UgQ0MoKSBpbgoJZGVmaW5pdGlvbiBvZiBFWFRSQV9DQ19NT0RFUy4KCgkqIG1kLnRleGk6IEtpbGwgcmVmIHRvIEVYVFJBX0NDX05BTUVTLgoJKiB0bS50ZXhpOiBEb2N1bWVudCBuZXcgd2F5IHRvIGRlZmluZSBFWFRSQV9DQ19NT0RFUy4KCgkqIGdlbnJlY29nLmM6IERvIG5vdCBsb29rIHVwIHRoZSBuYW1lIG9mIGEgZGVmaW5lX3NwbGl0LgoJKFVucmVsYXRlZCBidWdmaXguKQoKRnJpIEF1ZyAyNyAxNzowMzo0MiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvdjg1MC5tZDogRml4IHR5cG8gaW50cm9kdWNlZCBieSBwcmV2aW91cyBkZWx0YS4KCkZyaSBBdWcgMjcgMDk6NDg6NTkgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2NjLmMgKGZhdGFsKTogTWFrZSBkZWZpbml0aW9uIHN0YXRpYyB0byBtYXRjaCBwcm90b3R5cGUuCgpGcmkgQXVnIDI3IDEwOjMzOjM1IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogY29tYmluZS5jIChnZXRfbGFzdF92YWx1ZSk6IERvbid0IGxvb2sgZm9yIGVhcmxpZXIgc2V0cyBpZiB0aGUgbGFzdAoJa25vd24gc2V0IGlzIHNvbWV3aGVyZSBpbiBiZXR3ZWVuIHRoZSBpbnNucyBiZWluZyBjb21iaW5lZC4KCkZyaSBBdWcgMjcgMTA6MDM6MTIgQlNUIDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjb25maWd1cmUuaW46IERvbid0IHVzZSBzaGVsbCAhIHRvIG5lZ2F0ZSBleGl0IGNvZGVzCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZQoKRnJpIEF1ZyAyNyAwOTozNjoxNyAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBGaXggY2hhbmdlIG9mIE1hciA1IGZvcgoJdGhlIGZhY3QgdGhhdCBBTElHTiBpcyBtZWFzdXJlZCBpbiBiaXRzLCBub3QgYnl0ZXMuCgoxOTk5LTA4LTI3IDAwOjI3IC0wNzAwICBaYWNrIFdlaW5iZXJnICA8emFja0BiaXRtb3Zlci5jb20+CgoJKiBlcnJvcnMuYzogTmV3IGZpbGU7IGRlZmluZXMgZnVuY3Rpb25zIGVycm9yLCB3YXJuaW5nLCBhbmQKCWZhdGFsLCB2YXJpYWJsZXMgaGF2ZV9lcnJvciBhbmQgcHJvZ25hbWUuCgkqIGVycm9ycy5oOiBOZXcgZmlsZTsgcHJvdG90eXBlcyBhbmQgZGVjbHMgZm9yIHN0dWZmIGluIGVycm9ycy5jLgoKCSogTWFrZWZpbGU6IEFkZCBydWxlcyB0byBidWlsZCBlcnJvcnMubyBhbmQKCSQoSE9TVF9QUkVGSVgpZXJyb3JzLm8uICBMaW5rIGdlbmNvbmZpZywgZ2VuY29kZXMsIGdlbmVtaXQsCglnZW5vcGluaXQsIGdlbnJlY29nLCBnZW5leHRyYWN0LCBnZW5wZWVwLCBnZW5hdHRyLCBhbmQKCWdlbm91dHB1dCB3aXRoIGVycm9ycy5vLiAgQWRkIGVycm9ycy5oIHRvIGRlcHMgb2YgZ2VuY29uZmlnLm8sCglnZW5jb2Rlcy5vLCBnZW5lbWl0Lm8sIGdlbm9waW5pdC5vLCBnZW5yZWNvZy5vLCBnZW5leHRyYWN0Lm8sCglnZW5wZWVwLm8sIGdlbmF0dHIubywgYW5kIGdlbm91dHB1dC5vLgoKCSogZ2VuY29uZmlnLmMsIGdlbmNvZGVzLmMsIGdlbmVtaXQuYywgZ2Vub3Bpbml0LmMsIGdlbnJlY29nLmMsCglnZW5leHRyYWN0LmMsIGdlbnBlZXAuYywgZ2VuYXR0ci5jOiAgSW5jbHVkZSBlcnJvcnMuaC4gIERvbid0CglkZWZpbmUgb3IgcHJvdG90eXBlIGZhdGFsLiAgU2V0IHByb2duYW1lIGF0IGJlZ2lubmluZyBvZiBtYWluLgoJKiBnZW5vdXRwdXQuYzogIExpa2V3aXNlLCBhbmQgZG9uJ3QgZGVmaW5lIG9yIHByb3RvdHlwZSBlcnJvcgoJZWl0aGVyLgoKCSogYy10eXBlY2suYyAoY19leHBhbmRfc3RhcnRfY2FzZSk6IFJldHVybiBpbW1lZGlhdGVseSBpZiBleHAKCWlzIGFuIEVSUk9SX01BUksuCgkqIGZvbGQtY29uc3QuYyAob3BlcmFuZF9lcXVhbF9wKTogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIGFyZzEKCW9yIGFyZzAgYXJlIEVSUk9SX01BUktzLgoJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSBbY2FzZSBSRUNPUkRfVFlQRV0pOiBJZ25vcmUKCWZpZWxkcyBvZiB0eXBlIEVSUk9SX01BUksgd2hlbiBjYWxjdWxhdGluZyBpZiB0aGUgcmVjb3JkIGNhbgoJZ28gaW4gYSByZWdpc3Rlci4KCkZyaSBBdWcgMjcgMDE6MDM6NDggMTk5OSAgSmltIEtpbmdkb24gIDxodHRwOi8vZGV2ZWxvcGVyLnJlZGhhdC5jb20+Cgl3aXRoIG11Y2ggaGVscCBmcm9tIEplZmZyZXkgQSBMYXcgYW5kIFJpY2hhcmQgSGVuZGVyc29uCgoJKiBpMzg2Lm1kOiBJbiB0aGUgNiBpbnNucyB3aGljaCBjYWxsIG91dHB1dF9maXhfdHJ1bmMsCgllYXJseWNsb2JiZXIgb3BlcmFuZHNbMF0uCgpGcmkgQXVnIDI3IDAxOjAxOjUxIDE5OTkgIFBoaWxpcCBCbHVuZGVsbCAgPHBiQG5leHVzLmNvLnVrPgoKCSoganVtcC5jIChkdXBsaWNhdGVfbG9vcF9leGl0X3Rlc3QpOiBDYWxsIHJlZ19zY2FuX3VwZGF0ZSBhZnRlcgoJY3JlYXRpbmcgbmV3IHJlZ2lzdGVycy4KCjE5OTktMDgtMjYgMjM6MDkgLTA3MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQGJpdG1vdmVyLmNvbT4KCgkqIGkzODYuaDogRGVjbGFyZSBpeDg2X2NwdV9zdHJpbmcsIGl4ODZfYXJjaF9zdHJpbmcsCglpMzg2X3JlZ19hbGxvY19vcmRlciwgaTM4Nl9yZWdwYXJtX3N0cmluZywKCWkzODZfYWxpZ25fbG9vcHNfc3RyaW5nLCBpMzg2X2FsaWduX2p1bXBzX3N0cmluZywKCWkzODZfYWxpZ25fZnVuY3Nfc3RyaW5nLCBpMzg2X3ByZWZlcnJlZF9zdGFja19ib3VuZGFyeV9zdHJpbmcsCglhbmQgaTM4Nl9icmFuY2hfY29zdF9zdHJpbmcgYXMgdHlwZSAiY29uc3QgY2hhciAqIi4KCSogaTM4Ni5jOiBEZWZpbmUgYWxsIGFib3ZlIHN0cmluZ3MgYXMgdHlwZSAiY29uc3QgY2hhciAqIi4KClRodSBBdWcgMjYgMjA6MzY6MzAgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKG91dHB1dF9hcmFuZ2VzKTogQ2hlY2sgRFdBUkZfT0ZGU0VUX1NJWkUgbm90IFBUUl9TSVpFCgl3aGVuIGVtaXR0aW5nIGFsaWdubWVudCBwYWRkaW5nLiAgRW1pdCBwYWRkaW5nIGJ5dGUgb2YgMCBpbnN0ZWFkIG9mIDQuCgpUaHUgQXVnIDI2IDE4OjExOjIwIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmMgKGFycmF5X3R5cGVfbmVsdHMpOiBEb24ndCBjcmVhdGUgUlRMX0VYUFJzIGZyb20KCVNBVkVfRVhQUnMgdW5sZXNzIHRoZSBTQVZFX0VYUFJzIGhhdmUgYWxyZWFkeSBiZWVuIGV4cGFuZGVkLgoKVGh1IEF1ZyAyNiAxOTozMzoyMyAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoRFdBUkYyX0FTTV9MSU5FX0RFQlVHX0lORk8pOiBBZGQgZGVmYXVsdCBkZWZpbml0aW9uLgoJKGRlYnVnX2R3YXJmKTogQWRkIERXQVJGMl9BU01fTElORV9ERUJVR19JTkZPIHN1cHBvcnQuCgkoZHdhcmYyb3V0X2xpbmUsIGR3YXJmMm91dF9maW5pc2gpOiBMaWtld2lzZS4KCSogdG0udGV4aSAoRFdBUkYyX0FTTV9MSU5FX0RFQlVHX0lORk8pOiBBZGQgZG9jdW1lbnRhdGlvbi4KClRodSBBdWcgMjYgMTY6MTA6NTYgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGxhbmdfdW5zYXZlX2V4cHJfbm93KSA6IENvcnJlY3QgcmV0dXJuIHR5cGUuCgkqIHRyZWUuaCAobGFuZ191bnNhdmVfZXhwcl9ub3cpIDogU2FtZS4KClRodSBBdWcgMjYgMTM6MTI6MjkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYyAoY2ludF9va19mb3JfbW92ZSk6IFVzZSBDT05TVF9JTlRfT0tfRk9SX0xFVFRFUl9QIG1hY3JvcwoJaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBjb2RlLgoKVGh1IEF1ZyAyNiAxODozMjozMiAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGdjc2UuYyAoaGFzaF9zY2FuX2luc24pOiBEb24ndCBzY2FuIG9idmlvdXMgbm8tb3BzLgoKMTk5OS0wOC0yNiAwOTo0MiAtMDcwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogdHJlZS5oOiBmYW5jeV9hYm9ydCBhbHdheXMgdGFrZXMgdGhyZWUgYXJncy4KCSogcmVzb3VyY2UuYzogTW92ZSBpbmNsdWRlIG9mIHN5c3RlbS5oIGJlZm9yZSB0b3BsZXYuaC4KClRodSBBdWcgMjYgMDk6NDY6MTYgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChtZW1fbG9jX2Rlc2NyaXB0b3IpOiBBY2NlcHQgTEFCRUxfUkVGcyBhcyB3ZWxsCglhcyBTWU1CT0xfUkVGcy4KCjE5OTktMDgtMjUgMjI6MTAgLTA3MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQGJpdG1vdmVyLmNvbT4KCgkqIHN5c3RlbS5oOiBEb24ndCByZWRlZmluZSBhYm9ydCBvciB0cmltX2ZpbGVuYW1lLgoJKiBydGwuaDogRGVmaW5lIGFib3J0IHRvIGZhbmN5X2Fib3J0IChfX0ZJTEVfXywgX19MSU5FX18sIDApCglvciBmYW5jeV9hYm9ydCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pIGRlcGVuZGluZyBvbgoJd2hldGhlciBvciBub3QgX19GVU5DVElPTl9fIGlzIGF2YWlsYWJsZS4KCSogdHJlZS5oOiBEdXBsaWNhdGUgcnRsLmgncyBkZWZpbml0aW9uIG9mIGFib3J0LCBmb3IgZmlsZXMKCXRoYXQgZG9uJ3QgaW5jbHVkZSBydGwuaC4gIERlbGV0ZSBhbGwgY29kZSB0byBwZXJmb3JtIHR5cGUKCWNoZWNraW5nIHdpdGggYSBjb21waWxlciBvdGhlciB0aGFuIEdDQy4KCSogdmFycmF5Lmg6IERlbGV0ZSBhbGwgY29kZSB0byBwZXJmb3JtIHR5cGUgY2hlY2tpbmcgd2l0aCBhCgljb21waWxlciBvdGhlciB0aGFuIEdDQy4gIE1ha2UgVkFSUkFZX0NIRUNLKCkgYWx3YXlzIGV2YWx1YXRlCglpdHMgYXJndW1lbnRzIGV4YWN0bHkgb25jZSwgdXNpbmcgYSBzdGF0ZW1lbnQgZXhwcmVzc2lvbi4KCUFkanVzdCB0aGUgVkFSUkFZXzx0eXBlPiBhY2Nlc3NvciBtYWNyb3MgdG8gbWF0Y2guCgkqIHRvcGxldi5oIChmYXRhbF9pbnNuLCBmYXRhbF9pbnNuX25vdF9mb3VuZCk6IEtpbGwuCgkoX2ZhdGFsX2luc24sIF9mYXRhbF9pbnNuX25vdF9mb3VuZCk6IE5ldyBmbnMsIHRha2UgaW5mbyBvbgoJY2FsbGVyJ3MgbG9jYXRpb24uICBEZWZpbmUgZmF0YWxfaW5zbiBhbmQgZmF0YWxfaW5zbl9ub3RfZm91bmQKCWFzIG1hY3JvcyB0aGF0IHVzZSBfZmF0YWxfaW5zbiBhbmQgX2ZhdGFsX2luc25fbm90X2ZvdW5kLgoJKGZhbmN5X2Fib3J0LCB0cmltX2ZpbGVuYW1lKTogS2lsbCBwcm90b3R5cGVzLgoKCSogcnRsLmMgKHRyaW1fZmlsZW5hbWUpOiBNb3ZlIGhlcmUgZnJvbSB0b3BsZXYuYy4KCShmYW5jeV9hYm9ydCk6IE5ldyBmdW5jdGlvbi4KCShESVJfU0VQQVJBVE9SKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24uCgkqIHRyZWUuYyAodHJlZV9jaGVja19mYWlsZWQsIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkKTogR28KCXRocm91Z2ggZmFuY3lfYWJvcnQuCgkodHJlZV9jaGVjaywgdHJlZV9jbGFzc19jaGVjaywgY3N0X29yX2NvbnN0cnVjdG9yX2NoZWNrLAoJZXhwcl9jaGVjayk6IERlbGV0ZS4KCSogdmFycmF5LmMgKHZhcnJheV9jaGVja19mYWlsZWQpOiBOZXcgZnVuY3Rpb24uCgkqIHRvcGxldi5jIChmYXRhbF9pbnNuLCBmYXRhbF9pbnNuX25vdF9mb3VuZCk6IFJlcGxhY2Ugd2l0aAoJX2ZhdGFsX2luc24gYW5kIF9mYXRhbF9pbnNuX25vdF9mb3VuZC4gIEdvIHRocm91Z2gKCWZhbmN5X2Fib3J0LgoJKHRyaW1fZmlsZW5hbWUsIGZhbmN5X2Fib3J0KTogRGVsZXRlLgoKCSogYnVpbHRpbnMuYyAoZXhwYW5kX2J1aWx0aW5fYXJnc19pbmZvKTogUmVwb3J0IElDRSB3aXRoIGFib3J0LgoJKiBleGNlcHQuYyAoc3RhcnRfY2F0Y2hfaGFuZGxlcik6IFJlcG9ydCBJQ0Ugd2l0aCBlcnJvci9hYm9ydAoJY29tYm8uCgkqIGZpbmFsLmMgKG91dHB1dF9vcGVyYW5kX2xvc3NhZ2UpOiBMaWtld2lzZS4KCSogZmxvdy5jICh2ZXJpZnlfZmxvd19pbmZvKTogTGlrZXdpc2UuCgoJKiBnY2MuYzogUHJvdG90eXBlIGZhdGFsLgoJKiBnZW5nZW5ydGwuYzogVW5kZWYgYWJvcnQgYWZ0ZXIgaW5jbHVkaW5nIHJ0bC5oIG5vdCBzeXN0ZW0uaC4KCSogZ2VuYXR0ci5jLCBnZW5hdHRydGFiLmMsIGdlbmVtaXQuYywgZ2VuZXh0cmFjdC5jLAoJZ2VuZmxhZ3MuYywgZ2Vub3Bpbml0LmMsIGdlbm91dHB1dC5jLCBnZW5wZWVwLmMsIGdlbnJlY29nLmM6CglEb24ndCBkZWZpbmUgZmFuY3lfYWJvcnQuCgpXZWQgQXVnIDI1IDE3OjU2OjU5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBvcHRhYnMuYyAoZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMpOiBCZSBtb3JlIHRob3JvdWdoIGluCgljYW5vbml6YXRpb24uCgpXZWQgQXVnIDI1IDE1OjM1OjU1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtODhrLmggKFZFUlNJT05fSU5GTzIpOiBLaWxsLgoJKFZFUlNJT05fU1RSSU5HKTogS2lsbC4KCShUTV9SQ1NfSUQpOiBLaWxsLgoJKFZFUlNJT05fSU5GTzEpOiBUaWR5LgoJKFRBUkdFVF9WRVJTSU9OKTogVXBkYXRlLgoJKiBtODhrL2RndXguaCAoVkVSU0lPTl9JTkZPMik6IEtpbGwuCgkoQVNNX0ZJUlNUX0xJTkUpOiBBZGp1c3QgZm9yIGRlYXRoIG9mIFZFUlNJT05fU1RSSU5HLgoJKiBtODhrL2x1bmEuaCAoVkVSU0lPTl9JTkZPMSk6IFRpZHkuCgkqIG04OGsvc3lzdjQuaCAoVkVSU0lPTl9JTkZPMSk6IExpa2V3aXNlLgoJKiBtODhrLmMgKG91dF9yY3NfaWQsIHRtX3Jjc19pZCk6IEtpbGwuCgkob3V0cHV0X2ZpbGVfc3RhcnQpOiBBZGp1c3QgZm9yIGRlYXRoIG9mIFZFUlNJT05fU1RSSU5HLgoKMTk5OS0wOC0yNSAxMzo1MSAtMDcwMCAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAYXNjZW5kLmNvbT4KCgkqIGNwcGxpYi5jIChkZXRlY3RfaWZfbm90X2RlZmluZWQpOiBOZXcgZnVuY3Rpb24uCgkoZG9faWYpOiBVc2UgaXQgdG8gZGV0ZWN0IHBvdGVudGlhbCBvbmNlLW9ubHkgaGVhZGVycy4KCldlZCBBdWcgMjUgMTQ6MDA6MTggMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoY29tYmluZV9zdHJpbmdzKTogQWx3YXlzIHNldCBUUkVFX0NPTlNUQU5ULgoKV2VkIEF1ZyAyNSAxNToyNzoyMiAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbWJpbmUuYyAobm9uemVyb19iaXRzKSA6IEFsbG93IHNpbmdsZS1seSBzZXQgcmVnaXN0ZXJzIHRvIGJlCglhbnl3ZXJlIGluIHRoZSBmdW5jdGlvbiBvbmx5IGlmIHRoZXkgYXJlIHBzZXVkb3MgYW5kIHNldCBiZWZvcmUKCWJlaW5nIHVzZWQgKG5vdCBsaXZlIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24pLgoJKG51bV9zaWduX2JpdF9jb3BpZXMpIDogU2FtZS4KCShnZXRfbGFzdF92YWx1ZV92YWxpZGF0ZSkgOiBTYW1lLgoJKGdldF9sYXN0X3ZhbHVlKSA6IFNhbWUuCgpXZWQgQXVnIDI1IDExOjEzOjI5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGV4cHJlc3NfZnJvbSk6IFRyeSBoYXJkZXIgdG8gdW5pZnkgKCogYyBOKSBhbmQgKCogYyBNKQoJd2hlcmUgTiBhbmQgTSBhcmUgY29uc3RhbnQgYW5kIE4gaXMgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiBNLgoKV2VkIEF1ZyAyNSAxMzo1NTo0NyBFRFQgMTk5OSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogc2JpdG1hcC5oIChzYml0bWFwX2ludGVyc2VjdGlvbl9vZl9zdWNjcyk6IEFkZCBwcm90b3R5cGUuCgkoc2JpdG1hcF9pbnRlcnNlY3Rpb25fb2ZfcHJlZHMsIHNiaXRtYXBfdW5pb25fb2Zfc3VjY3MsCglzYml0bWFwX3VuaW9uX29mX3ByZWRzKTogQWRkIHByb3RvdHlwZXMuCgkqIHNiaXRtYXAuYyAoc2JpdG1hcF9pbnRlcnNlY3Rpb25fb2Zfc3VjY3MpOiBOZXcgZnVuY3Rpb24gdG8gY29tcHV0ZQoJdGhlIGludGVyc2VjdGlvbiBvZiBzdWNjZXNzb3JzIHdpdGggdGhlIG5ldyBmbG93IGdyYXBoIHN0cnVjdHVyZXMuCgkoc2JpdG1hcF9pbnRlcnNlY3Rpb25fb2ZfcHJlZHMpOiBOZXcgZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUKCWludGVyc2VjdGlvbiBvZiBwcmVkZWNlc3NvcnMgd2l0aCB0aGUgbmV3IGZsb3cgZ3JhcGggc3RydWN0dXJlcy4KCShzYml0bWFwX3VuaW9uX29mX3N1Y2NzKTogTmV3IGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIHVuaW9uIG9mCglzdWNjZXNzb3JzIHdpdGggdGhlIG5ldyBmbG93IGdyYXBoIHN0cnVjdHVyZXMuCgkoc2JpdG1hcF91bmlvbl9vZl9wcmVkcyk6IE5ldyBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSB1bmlvbiBvZgoJcHJlZGVjZXNzb3JzIHdpdGggdGhlIG5ldyBmbG93IGdyYXBoIHN0cnVjdHVyZXMuCgkqIGdjc2UuYyAoY29tcHV0ZV9yZG0sIGNvbXB1dGVfYXZhaWxhYmxlKTogVXNlIG5ldyBzYml0bWFwIHJvdXRpbmVzLgoJKGV4cHJfcmVhY2hlc19oZXJlX3ApOiBVc2UgZWRnZSBhbmQgYmFzaWNfYmxvY2sgc3RydWN0dXJlcyBpbnN0ZWFkCglvZiBzX3ByZWRzIGFuZCBzX3N1Y2NzLgoJKGNvbXB1dGVfY3Byb3BfYXZpbm91dCk6IFVzZSBuZXcgc2JpdG1hcCByb3V0aW5lcy4KCShwcmVfZXhwcl9yZWFjaGVzX2hlcmVfcCk6IFVzZSBlZGdlIGFuZCBiYXNpY19ibG9jayBzdHJ1Y3R1cmVzIGluc3RlYWQKCW9mIHNfcHJlZHMgYW5kIHNfc3VjY3MuCgkqIGZsb3cuYyAoY29tcHV0ZV9mbG93X2RvbWluYXRvcnMpOiBDb21wdXRlIGRvbWluYXRvcnMgdXNpbmcKCWVkZ2VzIGFuZCBiYXNpYyBibG9ja3MgaW5zdGVhZCBvZiBzX3ByZWRzIGFuZCBzX3N1Y2NzLgoKV2VkIEF1ZyAyNSAxMzo0MTo0NyBFRFQgMTk5OSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogbGlzdHMuYyAodW51c2VkX2luc25fbGlzdCwgdW51c2VkX2V4cHJfbGlzdCk6IE5ldyBmaWxlIGZvcgoJbWFpbnRhaW5pbmcgdmFyaW91cyB0eXBlcyBvZiBsaXN0cy4gTmV3IHN0YXRpY3MgZm9yIG1haW50YWluaW5nIGEKCWNhY2hlIG9mIGF2YWlsYWJsZSBJTlNOX0xJU1QgYW5kIEVYUFJfTElTVCBub2Rlcy4KCShmcmVlX2xpc3QpOiBTdGF0aWMgZnVuY3Rpb24gZm9yIGZyZWVpbmcgYSBsaXN0IG9mIElOU04vRVhQUiBub2Rlcy4KCShhbGxvY19JTlNOX0xJU1QpOiBGdW5jdGlvbiB0byBnZXQgYSBmcmVlIElOU05fTElTVCBub2RlLgoJKGFsbG9jX0VYUFJfTElTVCk6IEZ1bmN0aW9uIHRvIGdldCBhIGZyZWUgRVhQUl9MSVNUIG5vZGUuCgkoaW5pdF9FWFBSX0lOU05fTElTVF9jYWNoZSk6IEluaXRpYWxpemUgdGhlIGNhY2hlIGxpc3RzLgoJKGZyZWVfRVhQUl9MSVNUX2xpc3QpOiBGcmVlIGFuIGVudGlyZSBsaXN0IG9mIEVYUFJfTElTVCBub2Rlcy4KCShmcmVlX0lOU05fTElTVF9saXN0KTogRnJlZSBhbiBlbnRpcmUgbGlzdCBvZiBJTlNOX0xJU1Qgbm9kZXMuCgkoZnJlZV9FWFBSX0xJU1Rfbm9kZSk6IEZyZWUgYW4gaW5kaXZpZHVhbCBFWFBSX0xJU1Qgbm9kZS4KCShmcmVlX0lOU05fTElTVF9ub2RlKTogRnJlZSBhbiBpbmRpdmlkdWFsIElOU05fTElTVCBub2RlLgoJKiBoYWlmYS1zY2hlZC5jICh1bnVzZWRfaW5zbl9saXN0LCB1bnVzZWRfZXhwcl9saXN0KTogTW92ZWQgdG8gZmxvdy5jCgkoZnJlZV9saXN0LCBhbGxvY19JTlNOX0xJU1QsIGFsbG9jX0VYUFJfTElTVCk6IE1vdmVkIHRvIGZsb3cuYwoJKHJlbW92ZV9kZXBlbmRlbmNlLCBmcmVlX3BlbmRpbmdfbGlzdHMpOiBVc2UgbmV3IGdsb2JhbCByb3V0aW5lcy4KCShmbHVzaF9wZW5kaW5nX2xpc3RzLCBzY2hlZF9hbmFseXplX2luc24pOiBVc2UgbmV3IGdsb2JhbCByb3V0aW5lcy4KCShzY2hlZF9hbmFseXplLCBjb21wdXRlX2Jsb2NrX2JhY2t3YXJkX2RlcGVuZGVuY2VzKTogVXNlIG5ldyByb3V0aW5lcy4KCShzY2hlZF9hbmFseXplXzEsIHNjaGVkX2FuYWx5emVfMik6IFVzZSBuZXcgcm91dGluZXMuCgkoc2NoZWR1bGVfaW5zbnMpOiBVc2UgbmV3IGdsb2JhbCByb3V0aW5lcy4KCSogcnRsLmggKGluaXRfRVhQUl9JTlNOX0xJU1RfY2FjaGUsIGZyZWVfRVhQUl9MSVNUX2xpc3QpOiBBZGQgZnVuY3Rpb24KCXByb3RvdHlwZXMuCgkoZnJlZV9JTlNOX0xJU1RfbGlzdCwgZnJlZV9FWFBSX0xJU1Rfbm9kZSk6IEFkZCBwcm90b3R5cGVzLgoJKGZyZWVfSU5TTl9MSVNUX25vZGUsIGFsbG9jX0lOU05fTElTVCwgYWxsb2NfRVhQUl9MSVNUKTogQWRkIGZ1bmN0aW9uCglwcm90b3R5cGVzLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEluaXRpYWxpemUgbm9kZSBjYWNoZS4KCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgbGlzdHMubyB0byBsaXN0IG9mIG9iamVjdCBmaWxlcy4KCShsaXN0cy5vKTogQWRkIGRlcGVuZGVuY2llcy4KCldlZCBBdWcgMjUgMTc6MzE6NTYgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy92ODUwL3Y4NTAubWQ6IEZpeCBjb21waWxlIHRpbWUgd2FybmluZyBtZXNzYWdlcy4KCSogY29uZmlnL3Y4NTAvdjg1MC5jOiBGaXggY29tcGlsZSB0aW1lIHdhcm5pbmcgbWVzc2FnZXMuCgkqIGNvbmZpZy92ODUwL3Y4NTAuaDogRml4IGNvbXBpbGUgdGltZSB3YXJuaW5nIG1lc3NhZ2VzLgoKV2VkIEF1ZyAyNSAwOTo0NDo0MyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnZW5hdHRyLmMgKGdlbl9hdHRyKTogQWRkIHByb3RvdHlwZSBhcmd1bWVudHMgZm9yIGdldF9hdHRyXyooKS4KCVJlbW92ZSB1bnVzZWQgcHJvdG90eXBlIGZvciBgaW5pdF9sZW5ndGhzJy4KCldlZCBBdWcgMjUgMDk6MzI6MzEgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBNYXJrIHBhcmFtZXRlciBgc3RhY2tfc2l6ZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShleHBhbmRfY2FsbCk6IEluaXRpYWxpemUgdmFyaWFibGUgYGluc24nLgoJKGVtaXRfbGlicmFyeV9jYWxsKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBoaWdoX3RvX3NhdmUnLgoJKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogTGlrZXdpc2UuCgkoc3RvcmVfb25lX2FyZyk6IExpa2V3aXNlIGZvciB2YXJpYWJsZXMgYGxvd2VyX2JvdW5kJyBhbmQKCWB1cHBlcl9ib3VuZCcuCgoJKiBjb21iaW5lLmMgKHRyeV9jb21iaW5lKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlcyBgaTJfY29kZV9udW1iZXInCglhbmQgYG90aGVyX2NvZGVfbnVtYmVyJy4KCShmaW5kX3NwbGl0X3BvaW50KTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlcyBgcG9zJywgYHVuc2lnbmVkcCcgYW5kCglgaW5uZXInLgoJKHNpbXBsaWZ5X2lmX3RoZW5fZWxzZSk6IExpa2V3aXNlIGZvciB2YXJpYWJsZXMgYG9wJyBhbmQgYGMxJy4KCShzaW1wbGlmeV9hbmRfY29uc3RfaW50KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgd2lkdGgnLgoJKG1lcmdlX291dGVyX29wcyk6IExpa2V3aXNlLgoKCSogY3NlLmMgKHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24pOiBDYXN0IGFuIElOVFZBTCgpIHRvIGB1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24pOiBMaWtld2lzZS4KCShjc2VfaW5zbik6IEluaXRpYWxpemUgdmFyaWFibGVzIGBzcmNfZXF2X3ZvbGF0aWxlJywKCWBzcmNfZXF2X2luX21lbW9yeScsIGBzcmNfZXF2X2luX3N0cnVjdCcsIGBzcmNfZXF2X2hhc2gnIGFuZCBgc2V0cycuCgoJKiBmaW5hbC5jIChpbml0X2ZpbmFsKTogQ29uc3RpZnkgcGFyYW1ldGVyIGBmaWxlbmFtZScuCgkoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBNYXJrIHBhcmFtZXRlciBgb3B0aW1pemUnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkocHJvZmlsZV9mdW5jdGlvbik6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXJzIGBmaXJzdCcgYW5kIGBvcHRpbWl6ZScuCgkob3V0cHV0X3NvdXJjZV9saW5lKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgZmlsZScuCgoJKiBpbnRlZ3JhdGUuYyAoc3Vic3RfY29uc3RhbnRzKTogQ2FzdCBhIHZhbHVlIHRvIGBzaXplX3QnIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShtYXJrX3N0b3Jlcyk6IEluaXRpYWxpemUgdmFyaWFibGUgYG1vZGUnLiAgQ2FzdCBhIHZhbHVlIHRvCglgc2l6ZV90JyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGludGVncmF0ZS5oIChNQVlCRV9FWFRFTkRfQ09OU1RfRVFVSVZfVkFSUkFZKTogTGlrZXdpc2UuCgoJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBmaXJzdCcuCgkoc3RyZW5ndGhfcmVkdWNlKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBpbmNyZW1lbnQnLgoJKGNoZWNrX2RicmFfbG9vcCk6IExpa2V3aXNlIGZvciB2YXJpYWJsZSBgY29tcGFyaXNvbl92YWwnLiAgQ2FzdCBhCgl2YWx1ZSB0byBgc2l6ZV90JyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShsb2FkX21lbXMpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBlbmRfbGFiZWwnLgoKCSogb3V0cHV0LmggKGluaXRfZmluYWwpOiBDb25zdGlmeSBwYXJhbWV0ZXIuCgoJKiByZWxvYWQuYyAoZGVjb21wb3NlKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgYmFzZScuCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IExpa2V3aXNlIGZvciB2YXJpYWJsZSBgaXNfc2NhbGFyJy4KCShzcGlsbF9oYXJkX3JlZyk6IE1hcmsgcGFyYW1ldGVyIGBkdW1wZmlsZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKGNob29zZV9yZWxvYWRfcmVncyk6IEluaXRpYWxpemUgdmFyaWFibGUgYG1vZGUnLgoJKGVtaXRfcmVsb2FkX2luc25zKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBzdG9yZV9pbnNuJy4KCShyZWxvYWRfY3NlX25vb3Bfc2V0X3ApOiBNYXJrIHBhcmFtZXRlciBgaW5zbicgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShyZWxvYWRfY29tYmluZSk6IEluaXRpYWxpemUgdmFyaWFibGUgYHNldCcuCgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYGxvY2FsX2xhYmVsJy4KCShjb3B5X2xvb3BfYm9keSk6IENhc3QgYSB2YWx1ZSB0byBgc2l6ZV90JyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0CglvbmUuCgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBzaXplX3RyZWUnLgoJKGNvbnN0X2hhc2gpOiBBZGQgYW4gYGVsc2UgYWJvcnQoKScgaW4gYW4gaWYtZWxzZS1pZi1lbHNlIHNlcXVlbmNlLgoJKHJlbW92ZV9mcm9tX3BlbmRpbmdfd2Vha19saXN0KTogTWFyayBwYXJhbWV0ZXIgYG5hbWUnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgpXZWQgQXVnIDI1IDExOjE4OjM5IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBVc2UgZGVjbF9wcmludGFibGVfbmFtZSB3aGVuIG9wZW5pbmcKCWdjc2UgZHVtcCBmaWxlLgoKV2VkIEF1ZyAyNSAxMDo1NzoxMiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90ZWxmLmggKEFTTV9XRUFLRU5fTEFCRUwpOiBEZWZpbmUuCgkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IERlZmluZS4KCShUWVBFX0FTTV9PUCwgU0laRV9BU01fT1AsIFRZUEVfT1BFUkFORF9GT1JNQVQsCglBU01fREVDTEFSRV9SRVNVTFQsIEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FLAoJQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVCwgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRSk6IERlZmluZSBpZgoJbm90IGFscmVhZHkgZGVmaW5lZC4KCldlZCBBdWcgMjUgMDE6MzY6MTEgMTk5OSAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlQGhpYXVseTEuaGlhLm5yYy5jYT4KCgkqIGNhbGxzLmMgKGVtaXRfY2FsbF8xKTogVXNlIGNhbGxfcG9wL2NhbGxfdmFsdWVfcG9wIGZvciBhbGwgdmFsdWVzCglvZiBuX3BvcHBlZCB3aGVuIGNhbGwvY2FsbF92YWx1ZSBhcmUgbm90IGRlZmluZWQuCgpXZWQgQXVnIDI1IDAxOjI1OjE0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHRtLnRleGk6IEdOVSBDQyAtPiBHQ0MgY29udmVyc2lvbi4KCShDQzFfU1BFQyk6IEluZGljYXRlIGl0IGlzIHVzZWQgZm9yIGFsbCBsYW5ndWFnZSBmcm9udCBlbmRzLgoKVHVlIEF1ZyAyNCAyMzo0MzowMyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZmxvdy5jIChkZWxldGVfYmxvY2spOiBTcGVsbCBOT1RFX0lOU05fRUhfUkVHSU9OX0JFRyBhbmQKCU5PVEVfSU5TTl9FSF9SRUdJT05fRU5EIGNvcnJlY3RseS4KClR1ZSBBdWcgMjQgMjM6MjY6NDQgMTk5OSAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBob2xvZGVjay5jeWdudXMuY29tPgoJCQkgIEplZmYgTGF3IDxsYXdAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQXV0b21hdGljYWxseSB1bnJvbGwgbG9vcHMgaWYgdGhlCgl1bnJvbGxlZCBsb29wIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSByb2xsZWQgbG9vcCBzaXplLgoKCSogbG9vcC5jIChpbnNlcnRfYmN0KTogUmVwbGFjZSB1c2Ugb2Ygc2Rpdl9vcHRhYiB3aXRoIGFzcl9vcHRhYgoJYW5kIGRlbGV0ZSBjb21tZW50IHRoYXQgY29kZSBzaG91bGQgYmUgcmV3cml0dGVuLgoKVHVlIEF1ZyAyNCAyMjo1NjozNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoYWlmYS1zY2hlZC5jIChmaW5kX3JnbnMpOiBNYXJrIGEgYmxvY2sgZm91bmQgZHVyaW5nIHRoZSBERlMgc2VhcmNoCglhcyByZWFjaGFibGUuCgoJKiBoYWlmYS1zY2hlZC5jIChnZXRfdmlzdWFsX3RibF9sZW5ndGgpOiBGaXggb2ZmLWJ5LW9uZSBlcnJvci4KClR1ZSBBdWcgMjQgMjI6NDE6MDYgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBmaXhpbmMvbWtmaXhpbmMuc2g6IERvbid0IGZpeCB1d2luIGhlYWRlcnMuCgkqIGkzODYvdXdpbi5oIChNRF9TVEFSVEZJTEVfUFJFRklYKTogRGVmaW5lLgoJKExJTktfU1BFQyk6IEFkZCAtdSBfbWFpbiB3aGVuIGJ1aWxkaW5nIGV4ZWN1dGFibGVzLgoJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OKTogVXBkYXRlIGZyb20gQ3lnd2luLgoJKEFTTV9GSUxFX0VORCk6IFVzZSB0aGUgZGVmYXVsdCBmb3IgaXg4Ni1wZS4KCSogaTM4Ni94bS11d2luLmggKEhBVkVfQkNPUFkpOiBVbmRlZmluZS4KClR1ZSBBdWcgMjQgMjA6NDk6NDcgMTk5OSAgQXJ0IEhhYXMgIDxhaGFhc0BuZW9zb2Z0LmNvbT4KCgkqIGZpbmFsLmMgKG91dHB1dF9hZGRyX2NvbnN0KTogSGFuZGxlIGNhc2Ugd2hlcmUgQVNNX09QRU5fUEFSRU4KCWFuZCBBU01fQ0xPU0VfUEFSRU4gYXJlIGVtcHR5IHN0cmluZ3MuCgpXZWQgQXVnIDI1IDEyOjQ2OjIyIDE5OTkgIEZyZWQgRmlzaCAgPGZuZkBjeWdudXMuY29tPgoJCQkgIEdlb2ZmcmV5IEtlYXRpbmcgPGdlb2Zma0BjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKFBSRVBST0NFU1NPUl9ERUZJTkVTKTogTmV3IG1hY3JvLgoJKHByb3RvaXplLm8pOiAgVXNlIFBSRVBST0NFU1NPUl9ERUZJTkVTIGFuZCBEUklWRVJfREVGSU5FUy4KCSh1bnByb3RvaXplLm8pOiBEaXR0by4KCSh0ZXN0LXByb3RvaXplLXNpbXBsZSk6IERvbid0IGRlZmluZSBTVERfUFJPVE9fRElSLgoJKiBwcm90b2l6ZS5jOiBVc2UgUEFSQU1TIHJhdGhlciB0aGFuIFBST1RPLiAgTWlub3Igd2hpdGVzcGFjZQoJY2hhbmdlcyB0byBtYWtlICd0ZXN0LXByb3RvaXplLXNpbXBsZScgcGFzcy4KCShTVERfUFJPVE9fRElSKTogUmVtb3ZlIGRlZmluZS4KCShTVEFOREFSRF9FWEVDX1BSRUZJWCk6IFN1cHBseSBkZWZhdWx0IGRlZmluZS4KCShzdGFuZGFyZF9leGVjX3ByZWZpeCk6IE5ldyB2YXJpYWJsZSwgaW5pdCB0byBTVEFOREFSRF9FWEVDX1BSRUZJWC4KCSh0YXJnZXRfbWFjaGluZSk6IE5ldyB2YXJpYWJsZSwgaW5pdCB0byBERUZBVUxUX1RBUkdFVF9NQUNISU5FLgoJKHRhcmdldF92ZXJzaW9uKTogTmV3IHZhcmlhYmxlLCBpbml0IHRvIERFRkFVTFRfVEFSR0VUX1ZFUlNJT04uCgkoR0VUX0VOVl9QQVRIX0xJU1QpOiBOZXcgbWFjcm8uCgkoZGVmYXVsdF9zeXNjYWxsc19kaXIpOiBObyBsb25nZXIgaW5pdGlhbGl6ZWQgdG8gU1REX1BST1RPX0RJUi4KCShkb19wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBkZWZhdWx0X3N5c2NhbGxzX2RpciB1c2luZyBuZXcKCW1hY3Jvcy4gIFVzZSBpdCB0byBpbml0aWFsaXplIHN5c2NhbGxzX2Fic29sdXRlX2ZpbGVuYW1lLgoKVHVlIEF1ZyAyNCAxNjo1ODoxNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSoganVtcC5jIChqdW1wX29wdGltaXplXzEpOiBEbyBjbW92IG9wdCBvbiBhbnkgc2luZ2xlLXNldDsgZm9yY2UKCUIgaW50byBhIHJlZ2lzdGVyIGJlZm9yZSBlbWl0X2NvbmRpdGlvbmFsX21vdmUuCgpUdWUgQXVnIDI0IDE1OjM3OjAzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBSZWFzc29jaWF0ZSAoKyAoKyAoKiBhIGIpIGMpICgqIGQgZSkpCglhcyAoKyAoKyAoKiBhIGIpICgqIGQgZSkpIGMpLiAgRmFjdG9yIGEgY29tbW9uIHBvd2VyLW9mLXR3bwoJbXVsdGlwbGljYW5kIG91dCBvZiAoKyAoKiBhIGIpICgqIGMgZCkpLgoKVHVlIEF1ZyAyNCAxMTo0NjoxMCAxOTk5ICBCb2IgTWFuc29uIDxtYW5zb25AY3lnbnVzLmNvbT4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaGFpZmEtc2NoZWQuYyAoc3BsaXRfaGFyZF9yZWdfbm90ZXMpOiBNb3ZlIHRvIGZsb3cuYwoJKG5ld19pbnNuX2RlYWRfbm90ZXMpOiBMaWtld2lzZS4KCSh1cGRhdGVfbl9zZXRzKTogTGlrZXdpc2UuCgkodXBkYXRlX2Zsb3dfaW5mbyk6IE1vdmUgdG8gZmxvdy5jLCByZW5hbWVkIHRvIHVwZGF0ZV9saWZlX2luZm87CglleHRlbmQgdG8gaGFuZGxlIG11bHRpcGxlIHNvdXJjZSBpbnNucy4KCSogZmxvdy5jOiBJbmNsdWRlIHJlc291cmNlLmgKCSh1bmxpbmtfaW5zbl9jaGFpbik6IE5ldy4KCShzcGxpdF9oYXJkX3JlZ19ub3Rlcyk6IE5ldy4KCShtYXliZV9hZGRfZGVhZF9ub3RlKTogTmV3LgoJKG1heWJlX2FkZF9kZWFkX25vdGVfdXNlKTogTmV3LgoJKGZpbmRfaW5zbl93aXRoX25vdGUpOiBOZXcuCgkobmV3X2luc25fZGVhZF9ub3Rlcyk6IE5ldy4KCSh1cGRhdGVfbl9zZXRzKTogTmV3LgoJKHNldHNfcmVnX29yX3N1YnJlZ18xLCBzZXRzX3JlZ19vcl9zdWJyZWcpOiBOZXcuCgkobWF5YmVfcmVtb3ZlX2RlYWRfbm90ZXMpOiBOZXcuCgkodXBkYXRlX2xpZmVfaW5mbyk6IE5ldy4KCShwcmVwZW5kX3JlZ19ub3Rlcyk6IE5ldy4KCShyZXBsYWNlX2luc25zKTogTmV3LgoJKiBvdXRwdXQuaCAodXBkYXRlX2xpZmVfaW5mbyk6IERlY2xhcmUuCgkqIHJlY29nLmMgKHNwbGl0X2Jsb2NrX2luc25zKTogVXNlIHVwZGF0ZV9saWZlX2luZm8uCgkqIHJlc291cmNlLmMgKGZpbmRfZnJlZV9yZWdpc3Rlcik6IFVzZSByZWdfYWxsb2Nfb3JkZXIsIGRvbid0IHVzZQoJZml4ZWQgcmVncywgbWFrZSBzdXJlIHRoZSBtb2RlIGlzIHN1cHBvcnRlZCwgZG9uJ3QgdXNlIG5ldyByZWdzLgoJKHJlZ19kZWFkX3ApOiBOZXcuCgkqIHJ0bC5oIChyZXBsYWNlX2luc25zKTogRGVjbGFyZS4KClR1ZSBBdWcgMjQgMTM6NDg6MzkgMTk5OSAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBDb3BlIHdpdGggQ09ORF9FWFBScyB3aXRoIG9uZQoJbm9uLXJldHVybmluZyBicmFuY2guCgpNb24gQXVnIDIzIDIyOjI4OjE2IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBBbHdheXMgcGFzcyBkb3duIHRoZSB0YXJnZXQsIGV2ZW4gd2hlbiBub3QKCWRvaW5nIENTRS4KCjE5OTktMDgtMjQgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IERlZmluZSB0YXJnZXRfY3B1X2RlZmF1bHQgZm9yIHY4NTAgdGFyZ2V0cy4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlCgoJKiBjb25maWcvdjg1MC92ODUwLmggKFRBUkdFVF9DUFVfZ2VuZXJpYyk6IERlZmluZS4KCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBJbnNpc3QgdGhhdCBTSW1vZGUgYW5kIGxhcmdlciBjb25zdGFudAoJYWRkcmVzc2VzIGFyZSA0IGJ5dGUgYWxpZ25lZC4KCgkqIGNvbmZpZy92ODUwL3Y4NTAuYyAocHJpbnRfb3BlcmFuZCk6IENvcGUgd2l0aCAnUicgZm9ybWF0IERGbW9kZQoJYWRkcmVzc2VzLgoKVHVlIEF1ZyAyNCAwOTozMjowNyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnZW5hdHRyLmMgKGZ1bmN0aW9uX3VuaXRfZGVzYyk6IENvbnN0aWZ5IGEgY2hhciouICBBZGQgcHJvdG90eXBlLgoJKG1haW4pOiBBZGQgcHJvdG90eXBlcy4KCgkqIGdlbmF0dHJ0YWIuYyAoc3Vic3RpdHV0ZV9hZGRyZXNzLCB3cml0ZV9jb25zdF9udW1fZGVsYXlfc2xvdHMsCglhdHRyX2VxLCBhdHRyX251bWVyYWwsIGF0dHJfZXF1YWxfcCwgYXR0cl9jb3B5X3J0eCk6IFByb3RvdHlwZS4KCSh3cml0ZV9hdHRyX2dldCk6IEVtaXQgcHJvdG90eXBlcyBhbG9uZyB3aXRoIGZ1bmN0aW9uIGRlZmluaXRpb24uCgkod3JpdGVfZWxpZ2libGVfZGVsYXkpOiBNYXJrIGEgcGFyYW1ldGVyIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCSh3cml0ZV9jb21wbGV4X2Z1bmN0aW9uKTogRW1pdCBzdGF0aWMgcHJvdG90eXBlIGFsb25nIHdpdGgKCWZ1bmN0aW9uIGRlZmluaXRpb24uCgoJKiBnZW5lbWl0LmMgKGdlbl9zcGxpdCk6IEVtaXQgcHJvdG90eXBlcyBhbG9uZyB3aXRoIGZ1bmN0aW9uCglkZWZpbml0aW9uLgoKCSogZ2Vub3V0cHV0LmMgKG91dHB1dF9lcGlsb2d1ZSk6IEFkZCBwcm90b3R5cGUgdG8gYGluc25fb3V0ZnVuJy4KCUxpa2V3aXNlIGZvciBwcmVkaWNhdGVzIGFuZCBgaW5zbl9vcGVyYW5kX3ByZWRpY2F0ZScuCgkocHJvY2Vzc190ZW1wbGF0ZSk6IEVtaXQgc3RhdGljIHByb3RvdHlwZSBhbG9uZyB3aXRoIGZ1bmN0aW9uCglkZWZpbml0aW9uLgoKCSogZ2VucmVjb2cuYyAobWFrZV9pbnNuX3NlcXVlbmNlKTogQ29uc3RpZnkgYSBjaGFyKi4gIEFkZAoJcHJvdG90eXBlcyBmb3IgZ2V0X3NwbGl0XyooKS4KCSh3cml0ZV9zdWJyb3V0aW5lKTogRW1pdCBwcm90b3R5cGVzIGFsb25nIHdpdGggZnVuY3Rpb24KCWRlZmluaXRpb24uCgpUdWUgQXVnIDI0IDEyOjM1OjIwIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZ2NzZS5jIChmaW5kX2F2YWlsX3NldCk6IEZvbGxvdyBjaGFpbnMgb2YgcmVnaXN0ZXItcmVnaXN0ZXIgY29waWVzLgoJVXNlIG9wcnNfbm90X3NldF9wIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmUKCXN1YnN0aXR1dGVkLgoJKGNwcm9wX2luc24pOiBEb24ndCB2ZXJpZnkgdGhlIHJldHVybiB2YWx1ZSBvZiBmaW5kX2F2YWlsX3NldCB3aXRoCglvcHJzX25vdF9zZXRfcC4KCgkqIGdjc2UuYyAoY3Byb3BfanVtcCk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiBjcHJvcF9pbnNuLgoJKGNwcm9wX2NjMF9qdW1wKTogTmV3IGZ1bmN0aW9uLgoJKGNwcm9wX2luc24pOiBCcmVhayBvdXQgbmV3IGZ1bmN0aW9uIGNwcm9wX2p1bXAgYW5kIHVzZSBpdC4KCUFsc28gdXNlIGNwcm9wX2NjMF9qdW1wIGZvciBtYWNoaW5lcyB3aXRoIENDMC4KCShjcHJvcCk6IERvbid0IGNyYXNoIGlmIGNwcm9wX2luc24gdHVybmVkIHRoZSBpbnNuIGludG8gYSBOT1RFLgoKCSogdHJlZS5oIChjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX3NldGptcCwKCWN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfbG9uZ2ptcCk6IERlbGV0ZSBkZWNsYXJhdGlvbnMuCgkqIGRzcDE2eHguYzogSW5jbHVkZSAiZnVuY3Rpb24uaCIuCgkqIGVseHNpLmM6IExpa2V3aXNlLgoJKiBnbWljcm8uYzogTGlrZXdpc2UuCgkqIGg4MzAwLmM6IExpa2V3aXNlLgoJKiBpMzcwLmM6IExpa2V3aXNlLgoJKiBtMzJyLmM6IExpa2V3aXNlLgoJKiBtbjEwMjAwLmM6IExpa2V3aXNlLgoJKiBtbjEwMzAwLmM6IExpa2V3aXNlLgoJKiBuczMyay5jOiBMaWtld2lzZS4KCSogc3B1ci5jOiBMaWtld2lzZS4KCSogdjg1MC5jOiBMaWtld2lzZS4KCgkqIHJ0bC5oIChydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycyk6IERlY2xhcmUuCgkqIHRvcGxldi5jIChydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycyk6IERvbid0IGRlY2xhcmUuCgkqIGNzZS5jOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYzogTGlrZXdpc2UuCgkqIGVtaXQtcnRsLmM6IExpa2V3aXNlLgoKVHVlIEF1ZyAyNCAwMjo0Nzo0NCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IEZpeCBhcmd1bWVudHMgdG8gVFJVTFlfTk9PUF9UUlVOQ0FUSU9OCgljYWxsLgoKMTk5OS0wOC0yNCBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSoganVtcC5jIChkZWxldGVfYmFycmllcl9zdWNjZXNzb3JzKSBNYXRjaCAoc2V0IChwYykgKHBjKSkgaW5zbgoJZXhhY3RseS4KCk1vbiBBdWcgMjMgMjM6MzU6NTIgMTk5OSAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGNzLnR1LWJlcmxpbi5kZT4KCgkqIGNwcC50ZXhpOiBBZGQgYSBub2RlIGRvY3VtZW50aW5nIG1hY3JvIHZhcmFyZ3MgKGNvcGllZAoJZnJvbSBleHRlbmQudGV4aSkuCgoxOTk5LTA4LTIzIDIyOjIzIC0wNzAwICBaYWNrIFdlaW5iZXJnICA8emFja0BiaXRtb3Zlci5jb20+CgoJKiBjcHBzcGVjLmM6IFB1dCBhIG51bGwgcG9pbnRlciBhdCB0aGUgZW5kIG9mIHRoZSBuZXcgYXJndi4KCk1vbiBBdWcgMjMgMjE6MjM6MjQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBSZW1vdmUgY29kZSB0byBzZWxlY3QvZGUtc2VsZWN0IHRoZSBoYWlmYQoJc2NoZWR1bGVyLiAgRXZlcnkgc2NoZWR1bGVkIHBvcnQgZ2V0cyBoYWlmYSBub3cuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogZmxhZ3MuaCwgZ2VuYXR0cnRhYi5jLCBydGwuaCwgdG9wbGV2LmM6IFJlbW92ZSBIQUlGQSBpZmRlZnMuCgkqIHNjaGVkLmMgRGVsZXRlZC4KCSogTWFrZWZpbGUuaW46IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KCk1vbiBBdWcgMjMgMTY6MDQ6MTMgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBvcHRhYnMuYyAocHJlcGFyZV9jbXBfaW5zbik6IFR1cm4gQ09NUEFSSVNPTiBhcmcgaW50byBhIHBvaW50ZXIuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHByZXBhcmVfZmxvYXRfbGliX2NtcCk6IExpa2V3aXNlLgoJVXNlIEZMT0FUX0xJQl9DT01QQVJFX1JFVFVSTlNfQk9PTC4KCSogZXhwci5oIChlbWl0X2Zsb2F0X2xpYl9jbXApOiBEZWxldGUgZGVjbGFyYXRpb24uCgkqIHRtLnRleGkgKEZMT0FUX0xJQl9DT01QQVJFX1JFVFVSTlNfQk9PTCk6IERvY3VtZW50LgoJKiBzcGFyYy5oIChGTE9BVF9MSUJfQ09NUEFSRV9SRVRVUk5TX0JPT0wpOiBEZWZpbmUuCgkqIHNwYXJjLm1kIChiY2MgYW5kIHNjYyBwYXR0ZXJucyk6IERvbid0IGhhbmRsZSBURm1vZGUgY29tcGFyaXNvbnMKCXNwZWNpYWxseS4KCShjbXB0Zik6IE5vdyBjb25kaXRpb25hbCBvbiBUQVJHRVRfSEFSRF9RVUFELgoKRnJpIEF1ZyAyMCAxNzo1MjoyNyAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZXNvdXJjZS5jIChtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBVc2UKCVBJQ19PRkZTRVRfVEFCTEVfUkVHX0NBTExfQ0xPQkJFUkVELgoKRnJpIEF1ZyAyMCAxOTowNzo1NSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBydGwuYyAocnR4X2NsYXNzLCBub3RlX2luc25fbmFtZSwgcmVnX25vdGVfbmFtZSk6IENvbnN0aWZ5LgoKCSogcnRsLmggKHJ0eF9jbGFzcywgcmVnX25vdGVfbmFtZSwgbm90ZV9pbnNuX25hbWUpOiBMaWtld2lzZS4KCgkqIGdlbm9waW5pdC5jIChnZW5faW5zbik6IFVzZSBhY2Nlc3NvciBtYWNybywgbm90IGBydHhfY2xhc3MnLgoKRnJpIEF1ZyAyMCAxODo1Mzo0MyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBydGwuaCAocnR4X2Zvcm1hdCk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBydGwuYyAocnR4X2Zvcm1hdCk6IExpa2V3aXNlLgoJKGNvcHlfcnR4LCBjb3B5X21vc3RfcnR4LCByZWFkX3J0eCk6IExpa2V3aXNlLgoJKGluaXRfcnRsKTogVXNlIGFjY2Vzc29yIG1hY3JvLCBub3QgYHJ0eF9mb3JtYXQnLgoKCSogYWxpYXMuYyAocnR4X2VxdWFsX2Zvcl9tZW1yZWZfcCwgZmluZF9zeW1ib2xpY190ZXJtKTogQ29uc3RpZnkgYQoJY2hhciouCgoJKiBjYWxsZXItc2F2ZS5jIChtYXJrX3JlZmVyZW5jZWRfcmVncyk6IExpa2V3aXNlLgoKCSogY29tYmluZS5jIChzdWJzdCwgbWFrZV9jb21wb3VuZF9vcGVyYXRpb24sIGtub3duX2NvbmQsCglnZW5fcnR4X2NvbWJpbmUsIHVwZGF0ZV90YWJsZV90aWNrLCBnZXRfbGFzdF92YWx1ZV92YWxpZGF0ZSwKCXVzZV9jcm9zc2VzX3NldF9wLCBtYXJrX3VzZWRfcmVnc19jb21iaW5lLCBtb3ZlX2RlYXRocyk6IExpa2V3aXNlLgoKCSogY3NlLmMgKHJ0eF9jb3N0LCBtZW50aW9uX3JlZ3MsIGNhbm9uX2hhc2gsIGV4cF9lcXVpdl9wLAoJcmVmZXJzX3RvX3AsIGNhbm9uX3JlZywgZm9sZF9ydHgsIGNzZV9wcm9jZXNzX25vdGVzLAoJY291bnRfcmVnX3VzYWdlKTogTGlrZXdpc2UuCgoJKiBlbWl0LXJ0bC5jIChnZW5fcnR4LCBjb3B5X3J0eF9pZl9zaGFyZWQsIHJlc2V0X3VzZWRfZmxhZ3MpOgoJTGlrZXdpc2UuCgoJKiBmaW5hbC5jIChsZWFmX3JlbnVtYmVyX3JlZ3NfaW5zbik6IExpa2V3aXNlLgoKCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncywgZmluZF91c2VfYXNfYWRkcmVzcywgZHVtcF9mbG93X2luZm8sCglkdW1wX2VkZ2VfaW5mbywgY291bnRfcmVnX3JlZmVyZW5jZXMpOiBMaWtld2lzZS4KCgkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzXzEsIHdhbGtfZml4dXBfbWVtb3J5X3N1YnJlZywKCWZpeHVwX3N0YWNrXzEsIHB1cmdlX2FkZHJlc3NvZl8xLCBpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSk6CglMaWtld2lzZS4KCgkqIGdjc2UuYyAob3Byc191bmNoYW5nZWRfcCwgaGFzaF9leHByXzEsIGV4cHJfZXF1aXZfcCwKCW9wcnNfbm90X3NldF9wLCBleHByX2tpbGxlZF9wLCBjb21wdXRlX3RyYW5zcCwgZmluZF91c2VkX3JlZ3MsCglhZGRfbGFiZWxfbm90ZXMpOiBMaWtld2lzZS4KCgkqIGdlbmF0dHJ0YWIuYyAoYXR0cl9ydHgsIGF0dHJfY29weV9ydHgsIGVuY29kZV91bml0c19tYXNrLAoJY2xlYXJfc3RydWN0X2ZsYWcsIGNvdW50X3N1Yl9ydHhzLCBjb3VudF9hbHRlcm5hdGl2ZXMsCgljb21wYXJlc19hbHRlcm5hdGl2ZXNfcCwgY29udGFpbmVkX2luX3AsIHdhbGtfYXR0cl92YWx1ZSwKCXdyaXRlX2V4cHJfYXR0cl9jYWNoZSk6IExpa2V3aXNlLgoKCSogZ2VuY29uZmlnLmMgKHdhbGtfaW5zbl9wYXJ0KTogTGlrZXdpc2UuCgoJKiBnZW5lbWl0LmMgKG1heF9vcGVyYW5kXzEsIGdlbl9leHApOiBMaWtld2lzZS4KCgkqIGdlbmV4dHJhY3QuYyAod2Fsa19ydHgpOiBMaWtld2lzZS4KCgkqIGdlbmZsYWdzLmMgKG51bV9vcGVyYW5kcyk6IExpa2V3aXNlLgoKCSogZ2Vub3V0cHV0LmMgKHNjYW5fb3BlcmFuZHMpOiBMaWtld2lzZS4KCgkqIGdlbnBlZXAuYyAobWF0Y2hfcnR4KTogTGlrZXdpc2UuCgoJKiBnZW5yZWNvZy5jIChhZGRfdG9fc2VxdWVuY2UpOiBMaWtld2lzZS4KCgkqIGhhaWZhLXNjaGVkLmMgKG1heV90cmFwX2V4cCwgc2NoZWRfYW5hbHl6ZV8yLCBhdHRhY2hfZGVhdGhzKToKCUxpa2V3aXNlLgoKCSogaW50ZWdyYXRlLmMgKHNhdmVfY29uc3RhbnRzLCBjb3B5X2Zvcl9pbmxpbmUsCgljb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgc3Vic3RfY29uc3RhbnRzLCByZXN0b3JlX2NvbnN0YW50cyk6CglMaWtld2lzZS4KCgkqIGp1bXAuYyAgKG1hcmtfanVtcF9sYWJlbCwgaW52ZXJ0X2V4cCwgcmVkaXJlY3RfZXhwLAoJcnR4X3JlbnVtYmVyZWRfZXF1YWxfcCwgcnR4X2VxdWFsX2Zvcl90aHJlYWRfcCk6IExpa2V3aXNlLgoKCSogbG9jYWwtYWxsb2MuYyAoY29udGFpbnNfcmVwbGFjZV9yZWdzLCBtZW1yZWZfcmVmZXJlbmNlZF9wKToKCUxpa2V3aXNlLgoKCSogbG9vcC5jIChyZWNvcmRfZXhjZXNzX3JlZ3MsIHJ0eF9lcXVhbF9mb3JfbG9vcF9wLAoJYWRkX2xhYmVsX25vdGVzLCByZXBsYWNlX2NhbGxfYWRkcmVzcywgY291bnRfbm9uZml4ZWRfcmVhZHMsCglpbnZhcmlhbnRfcCwgZmluZF9zaW5nbGVfdXNlX2luX2xvb3AsIGZpbmRfbWVtX2dpdnMsCglmaW5kX2xpZmVfZW5kLCBtYXliZV9lbGltaW5hdGVfYml2XzEsIHVwZGF0ZV9yZWdfbGFzdF91c2UpOgoJTGlrZXdpc2UuCgoJKiBwcmludC1ydGwuYyAocmVnX25hbWVzLCBwcmludF9ydHgpOiBMaWtld2lzZS4KCgkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4XzEsIGZpbmRfc2luZ2xlX3VzZV8xKTogTGlrZXdpc2UuCgoJKiByZWctc3RhY2suYyAoc3RhY2tfcmVnc19tZW50aW9uZWRfcCwgcmVjb3JkX2xhYmVsX3JlZmVyZW5jZXMsCglyZWNvcmRfcmVnX2xpZmVfcGF0LCBzd2FwX3J0eF9jb25kaXRpb24sIGdvdG9fYmxvY2tfcGF0LAoJcHJpbnRfYmxvY2tzKTogTGlrZXdpc2UuCgoJKiByZWdjbGFzcy5jIChmaXhfcmVnaXN0ZXIsIHJlY29yZF9hZGRyZXNzX3JlZ3MsCglyZWdfc2Nhbl9tYXJrX3JlZnMpOiBMaWtld2lzZS4KCgkqIHJlZ21vdmUuYyAoc3RhYmxlX2J1dF9mb3JfcCk6IExpa2V3aXNlLgoKCSogcmVsb2FkLmMgKGxvY19tZW50aW9uZWRfaW5fcCwgb3BlcmFuZHNfbWF0Y2hfcCwKCWZpbmRfcmVsb2Fkc190b3BsZXZzdWJzdF9yZWdfZXF1aXZzLCBmaW5kX3JlbG9hZHNfYWRkcmVzc18xLAoJY29weV9yZXBsYWNlbWVudHMsIHJlZmVyc190b19yZWdub19mb3JfcmVsb2FkX3AsCglyZWZlcnNfdG9fbWVtX2Zvcl9yZWxvYWRfcCwgZmluZF9pbmNfYW1vdW50LCByZWdub19jbG9iYmVyZWRfcCwKCXJlbG9hZF93aGVuX25lZWRlZF9uYW1lLCByZWdfY2xhc3NfbmFtZXMsIGRlYnVnX3JlbG9hZF90b19zdHJlYW0pOgoJTGlrZXdpc2UuCgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzLCBzY2FuX3BhcmFkb3hpY2FsX3N1YnJlZ3MsCglkZWxldGVfYWRkcmVzc19yZWxvYWRzXzEsIGNvdW50X29jY3VycmVuY2VzLAoJcmVsb2FkX2NzZV9tZW1fY29uZmxpY3RfcCwgcmVsb2FkX2NvbWJpbmVfbm90ZV91c2UsCglhZGRfYXV0b19pbmNfbm90ZXMpOiBMaWtld2lzZS4KCgkqIHJlc291cmNlLmMgKG1hcmtfcmVmZXJlbmNlZF9yZXNvdXJjZXMsIG1hcmtfc2V0X3Jlc291cmNlcyk6CglMaWtld2lzZS4KCgkqIHJ0bGFuYWwuYyAocnR4X3Vuc3RhYmxlX3AsIHJ0eF92YXJpZXNfcCwgcnR4X2FkZHJfdmFyaWVzX3AsCglyZWdfbWVudGlvbmVkX3AsIHJlZ3Nfc2V0X2JldHdlZW5fcCwgbW9kaWZpZWRfYmV0d2Vlbl9wLAoJbW9kaWZpZWRfaW5fcCwgcmVmZXJzX3RvX3JlZ25vX3AsIHJlZ19vdmVybGFwX21lbnRpb25lZF9wLAoJcnR4X2VxdWFsX3AsIHZvbGF0aWxlX2luc25fcCwgdm9sYXRpbGVfcmVmc19wLCBzaWRlX2VmZmVjdHNfcCwKCW1heV90cmFwX3AsIGluZXF1YWxpdHlfY29tcGFyaXNvbnNfcCwgcmVwbGFjZV9ydHgsIHJlcGxhY2VfcmVncywKCWptcF91c2VzX3JlZ19vcl9tZW0sIGZvcl9lYWNoX3J0eCwgcmVnbm9fdXNlX2luKTogTGlrZXdpc2UuCgoJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplXzIsIGF0dGFjaF9kZWF0aHMpOiBMaWtld2lzZS4KCgkqIHN0dXBpZC5jIChzdHVwaWRfbWFya19yZWZzKTogTGlrZXdpc2UuCgoJKiB1bnJvbGwuYyAocmVtYXBfc3BsaXRfYml2cyk6IExpa2V3aXNlLgoKCSogdmFyYXNtLmMgKG1hcmtfY29uc3RhbnRzKTogTGlrZXdpc2UuCgoJKiBhMjlrL2EyOWsuYyAodXNlc19sb2NhbF9yZWdfcCk6IExpa2V3aXNlLgoKCSogYWxwaGEvYWxwaGEuYyAoc3VtbWFyaXplX2luc24pOiBMaWtld2lzZS4KCgkqIGFybS9hcm0uYyAoc3ltYm9sX21lbnRpb25lZF9wLCBsYWJlbF9tZW50aW9uZWRfcCwKCWVsaW1pbmF0ZV9scjJpcCk6IExpa2V3aXNlLgoKCSogYXJtL3RodW1iLmMgKHN5bWJvbF9tZW50aW9uZWRfcCwgbGFiZWxfbWVudGlvbmVkX3ApOiBMaWtld2lzZS4KCgkqIGkzODYvaTM4Ni5jIChzeW1ib2xpY19yZWZlcmVuY2VfbWVudGlvbmVkX3AsIGNvcHlfYWxsX3J0eCwKCXJlZ19tZW50aW9uZWRfaW5fbWVtKTogTGlrZXdpc2UuCgoJKiBuczMyay9uczMyay5jIChnbG9iYWxfc3ltYm9saWNfcmVmZXJlbmNlX21lbnRpb25lZF9wLAoJc3ltYm9saWNfcmVmZXJlbmNlX21lbnRpb25lZF9wKTogTGlrZXdpc2UuCgoJKiByb21wL3JvbXAuYyAodW5zaWduZWRfY29tcGFyaXNvbnNfcCwgaGFzaF9ydHgpOiBMaWtld2lzZS4KCgkqIHNoL3NoLmMgKHJlZ3NfdXNlZCwgbWFya191c2UpOiBMaWtld2lzZS4KCgkqIHZheC92YXguYyAodmF4X3J0eF9jb3N0KTogTGlrZXdpc2UuCgpGcmkgQXVnIDIwIDE4OjM4OjQzIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIG1hY2htb2RlLmggKG1vZGVfbmFtZSk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBydGwuYyAobW9kZV9uYW1lKTogTGlrZXdpc2UuCgoJKiBnZW5vcGluaXQuYyAoZ2VuX2luc24pOiBVc2UgYWNjZXNzb3IgbWFjcm8sIG5vdCBgbW9kZV9uYW1lJy4KCgkqIG9wdGFicy5jIChpbml0X2xpYmZ1bmNzKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIHByaW50LXRyZWUuYyAobW9kZV9uYW1lKTogUmVtb3ZlIHJlZHVuZGFudCBkZWNsYXJhdGlvbi4KCShwcmludF9ub2RlKTogVXNlIGFjY2Vzc29yIG1hY3JvLCBub3QgYG1vZGVfbmFtZScuCgoJKiByZWxvYWQxLmMgKGR1bXBfbmVlZHMpOiBDb25zdGlmeSBhIGNoYXIqLiAgVXNlIGFjY2Vzc29yIG1hY3JvLAoJbm90IGBtb2RlX25hbWUnLgoJKG5ld19zcGlsbF9yZWcpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogdHJlZS5jIChtb2RlX25hbWUpOiBSZW1vdmUgcmVkdW5kYW50IGRlY2xhcmF0aW9uLgoKRnJpIEF1ZyAyMCAxODozMToyNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBydGwuYyAocnR4X25hbWUpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogcnRsLmggKHJ0eF9uYW1lLCBmaXhfc2NoZWRfcGFyYW0pOiBMaWtld2lzZS4KCgkqIGdtaWNyby9nbWljcm8uYyAocnR4X25hbWUpOiBSZW1vdmUgcmVkdW5kYW50IGRlY2xhcmF0aW9uLgoJKG15cHIpOiBVc2UgYWNjZXNzb3IgbWFjcm8sIG5vdCBgcnR4X25hbWUnLgoKCSogZ2VuZW1pdC5jIChwcmludF9jb2RlKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGdlbm9waW5pdC5jIChnZW5faW5zbik6IFVzZSBhY2Nlc3NvciBtYWNybywgbm90IGBydHhfbmFtZScuCgoJKiBnZW5wZWVwLmMgKHByaW50X2NvZGUpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogZ2VucmVjb2cuYyAocHJpbnRfY29kZSk6IExpa2V3aXNlLgoKCSogZ3JhcGguYyAoc3RhcnRfZmN0LCBzdGFydF9iYiwgbm9kZV9kYXRhLCBkcmF3X2VkZ2UsIGVuZF9mY3QsCgllbmRfYmIpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShkcmF3X2VkZ2UpOiBDb25zdGlmeSBhIGNoYXIqLgoJKGVuZF9iYik6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyLgoKCSogaGFpZmEtc2NoZWQuYyAoZml4X3NjaGVkX3BhcmFtLCBzYWZlX2NvbmNhdCwgcHJpbnRfZXhwCglwcmludF9ibG9ja192aXN1YWxpemF0aW9uKTogQ29uc3RpZnkgYSBjaGFyKi4KCkZyaSBBdWcgMjAgMTU6MDI6MTAgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGMtY29tbW9uLmMgKGNfZ2V0X2FsaWFzX3NldCk6IFVwZGF0ZSBjb21tZW50LgoKMTk5OS0wOC0yMCAgQW5kcmVhcyBKYWVnZXIgIDxhakBhcnRodXIucmhlaW4tbmVja2FyLmRlPgoKCSogbGludXguaCAoTElCX1NQRUMpOiBBZGRlZC4KCkZyaSBBdWcgMjAgMjI6MzI6MTcgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoU1RBUlRGSUxFX1NQRUMpOiBEb24ndCBkZWYuCgoxOTk5LTA4LTE5IDE4OjQzIC0wNzAwICBaYWNrIFdlaW5iZXJnICA8emFja0BiaXRtb3Zlci5jb20+CgoJKiB0cmVlLmMgKGV4cHJfY2hlY2spOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KCjE5OTktMDgtMTkgMTQ6NDQgLTA3MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQGJpdG1vdmVyLmNvbT4KCgkqIHJ0bC5kZWYgKE5PVEUpOiBDaGFuZ2UgZm9ybWF0IHRvICJpdXUwbiIuCgkoQUREUl9ESUZGX1ZFQyk6IENoYW5nZSBmb3JtYXQgdG8gImVFZWUwIi4KCShBRERSRVNTT0YpOiBDaGFuZ2UgZm9ybWF0IHRvICJlaXQiLgoKCSogcnRsLmggKHJ0dmVjKTogTWFrZSAiZWxlbSIgYW4gYXJyYXkgb2YgcnR4LCBub3QgcnR1bmlvbi4KCShSVFZFQ19FTFQpOiBDaGFuZ2UgdG8gbWF0Y2guCgkoWFZFQ0VYUCk6IFVzZSBYVkVDIGFuZCBSVFZFQ19FTFQuCgkoSU5TTl9VSUQsIElOU05fQ09ERSwgQ09ERV9MQUJFTF9OVU1CRVIsIE5PVEVfTElORV9OVU1CRVIsCglBRERSRVNTT0ZfUkVHTk8sIFJFR05PLCBTVUJSRUdfV09SRCk6IFVzZSBYSU5ULgoJKFBSRVZfSU5TTiwgTkVYVF9JTlNOLCBQQVRURVJOLCBSRUdfTk9URVMsCglDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UsIFNVQlJFR19SRUcsIFNFVF9TUkMsIFNFVF9ERVNULAoJVFJBUF9DT05ESVRJT04sIFRSQVBfQ09ERSk6IFVzZSBYRVhQLgoJKElOVFZBTCk6IFVzZSBYV0lOVC4KCShBRERSRVNTT0ZfREVDTCk6IFVzZSBYVFJFRS4KCShTRVRfQUREUkVTU09GX0RFQ0wpOiBEZWxldGUuCgkoTk9URV9ERUNMX05BTUUsIE5PVEVfREVDTF9DT0RFLCBOT1RFX0RFQ0xfUlRMLAoJTk9URV9ERUNMX0lERU5USUZJRVIsIE5PVEVfREVDTF9UWVBFKTogS2lsbC4gIFRoZXNlIGhhdmUgYmVlbgoJaWZkZWZlZCBvdXQgc2luY2UgMi42IGF0IGxlYXN0LgoJKGdlbl9ydHZlY192dik6IERlbGV0ZSBwcm90b3R5cGUuCgoJKiBydGwuaCAocnR2ZWNfYWxsb2MpOiBydC0+ZWxlbSBpcyBub3cgYW4gYXJyYXkgb2YgcnR4LAoJbm90IHJ0dW5pb24uCgkoY29weV9tb3N0X3J0eCk6IEhhbmRsZSAndCcgZm9ybWF0IGxldHRlci4KCSogZW1pdC1ydGwuYyAoZ2VuX3J0dmVjX3YpOiBydF92YWwtPmVsZW0gaXMgYW4gYXJyYXkgb2YgcnR4LgoJKGdlbl9ydHZlY192dik6IERlbGV0ZSBmdW5jdGlvbi4gIEFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gdXNlCglnZW5fcnR2ZWNfdiBpbnN0ZWFkLgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogTW92ZSBzcGVjaWFsIGNhc2luZyBvZiBOT1RFcyB0bwoJdGhlICcwJyBmb3JtYXQgbGV0dGVyLgoKCSogZnVuY3Rpb24uYyAoZ2VuX21lbV9hZGRyZXNzb2YpOiBEb24ndCB1c2UKCVNFVF9BRERSRVNTT0ZfREVDTDsgcHJvdmlkZSBgZGVjbCcgdG8gZ2VuX3J0eF9BRERSRVNTT0YKCWluc3RlYWQuCgkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IExpa2V3aXNlLgoJQ29weSAndCcgc2xvdHMgd2l0aCBYVFJFRS4KCShzdWJzdF9jb25zdGFudHMpOiBUcmVhdCAndCcgc2xvdHMgbGlrZSAnW3N3aV0nIHNsb3RzLgoJKiBjc2UuYyAoY2Fub25faGFzaCwgZXhwX2VxdWl2X3ApOiBUcmVhdCAndCcgc2xvdHMgbGlrZQknMCcgc2xvdHMuCgkqIGp1bXAuYyAocnR4X2VxdWFsX2Zvcl90aHJlYWRfcCk6IExpa2V3aXNlLgoJKiBydGxhbmFsLmMgKHJ0eF9lcXVhbF9wKTogTGlrZXdpc2UuCgkqIHN0bXQuYyAoZXhwYW5kX2VuZF9jYXNlKTogZ2VuX3J0eF9BRERSX0RJRkZfVkVDIG5vdyB0YWtlcwoJb25seSBmb3VyIGFyZ3VtZW50cy4KCSogZ2VuZ2VucnRsLmMgKHR5cGVfZnJvbV9mb3JtYXQpOiBQcm92aWRlIGNvcnJlY3QgdHlwZXMgZm9yCgknYicgYW5kICd0JyBzbG90cy4KCgoJKiB0cmVlLmggW0VOQUJMRV9DSEVDS0lOR10gKFRSRUVfQ0hFQ0ssIFRSRUVfQ0xBU1NfQ0hFQ0spOgoJSWYgYSByZWNlbnQgZ2NjIGlzIGluIHVzZSAoYWx3YXlzIGluIHN0YWdlMiBhbmQgYmV5b25kKSwgdXNlCglzdGF0ZW1lbnQgZXhwcmVzc2lvbnMsIHNvIHdlIGRvbid0IG1ha2UgYSBmdW5jdGlvbiBjYWxsIHVubGVzcwoJdGhlIGNoZWNrIGZhaWxzLiAgRXZhbHVhdGUgYXJndW1lbnRzIGV4YWN0bHkgb25jZS4KCShDSEFJTl9DSEVDSywgRE9fQ0hFQ0ssIERPX0NIRUNLMSwgVFJFRV9DSEVDSzEsCglUUkVFX0NMQVNTX0NIRUNLMSwgVFlQRV9DSEVDSzEsIERFQ0xfQ0hFQ0sxLCBDU1RfQ0hFQ0sxKToKCURlbGV0ZS4KCShDU1RfT1JfQ09OU1RSVUNUT1JfQ0hFQ0ssIEVYUFJfQ0hFQ0spOiBSZWRlZmluZSBzdWNoIHRoYXQKCXRoZXkgZXZhbHVhdGUgdGhlaXIgYXJndW1lbnRzIGV4YWN0bHkgb25jZSwgaXJyZXNwZWN0aXZlIG9mCgl0aGUgY29tcGlsZXIgaW4gdXNlLgoKCSogdHJlZS5jIFtFTkFCTEVfQ0hFQ0tJTkddOiBEZWZpbmUgd2hpY2hldmVyIHNldCBvZiBmdW5jdGlvbnMKCWlzIHVzZWQgYnkgdGhlIGN1cnJlbnRseS1lbmFibGVkIGNoZWNrIG1hY3Jvcy4gIFRoaXMgaXM6CgkodHJlZV9jaGVja19mYWlsZWQsIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkKTogRm9yIGdjYy4KCSh0cmVlX2NoZWNrLCB0cmVlX2NsYXNzX2NoZWNrLCBjc3Rfb3JfY29uc3RydWN0b3JfY2hlY2ssCglleHByX2NoZWNrKTogRm9yIG90aGVyIGNvbXBpbGVycy4KCgkqIGdlbmNoZWNrLmM6IERvIG5vdCBkZWZpbmUgYW55ICpfQ0hFQ0sxIG1hY3Jvcy4KClRodSBBdWcgMTkgMTQ6NDI6MzggMTk5OSAgTWlrZSBTdHVtcCA8bXJzQHdycy5jb20+CgkJCSAgTWFyayBNaXRjaGVsbCA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogYy1jb21tb24uYyAoY19nZXRfYWxpYXNfc2V0KTogRml4IHN1cHBvcnQgZm9yIHBvaW50ZXJzIGFuZAoJcmVmZXJlbmNlcy4KClRodSBBdWcgMTkgMTE6NTE6MjIgRURUIDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGFsaWFzLmM6IEluY2x1ZGUgdHJlZS5oLgoJKG5vbmxvY2FsX3JlZmVyZW5jZV9wLCBtYXJrX2NvbnN0YW50X2Z1bmN0aW9uKTogTmV3IGZ1bmN0aW9ucy4KCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzKTogQ2FsbCBtYXJrX2NvbnN0YW50X2Z1bmN0aW9uLgoJKiBydGwuaCAobWFya19jb25zdGFudF9mdW5jdGlvbik6IERlY2xhcmUgaXQuCgpUaHUgQXVnIDE5IDE1OjAyOjAxIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvcnM2MDAwL3JzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IEZpeCB0ZXN0IGZvcgoJdW5yZWNvZ25pemFibGUgc3dpdGNoZXMuCgpXZWQgQXVnIDE4IDIzOjMxOjU3IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBTZXQgaXggZmllbGQgYWZ0ZXIgc29ydGluZy4KCShyZWNvbWJpbmVfZ2l2cyk6IFJlbW92ZSBib2d1cyBpbmRleCAvIGdpdiBsb2Nrc3RlcCBsb29waW5nLgoKV2VkIEF1ZyAxOCAxODoyMDo0MCAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGV4cG1lZC5jIChlbWl0X3N0b3JlX2ZsYWcpOiBJZiBVTlNJR05FRFAsIGNhbGwgdW5zaWduZWRfY29uZGl0aW9uCglvbiBDT0RFLgoJKGVtaXRfc3RvcmVfZmxhZ19mb3JjZSk6IFVzZSBkb19jb21wYXJlX3J0eF9hbmRfanVtcC4KCShkb19jbXBfYW5kX2p1bXApOiBGb3JtYXR0aW5nIGZpeGVzLgoJKiBleHByLmMgKGRvX2NvbXBhcmVfYW5kX2p1bXApOiBSZW5hbWVkIGZyb20gY29tcGFyZTsgY2hhbmdlZCB0byBjYWxsCglkb19jb21wYXJlX3J0eF9hbmRfanVtcCBpbnN0ZWFkIG9mIGNvbXBhcmVfZnJvbV9ydHguCgkoZG9fY29tcGFyZV9ydHhfYW5kX2p1bXApOiBOZXcgZnVuY3Rpb247IG1vc3RseSBjb3BpZWQgZnJvbQoJY29tcGFyZV9mcm9tX3J0eC4KCShkb19qdW1wX2Zvcl9jb21wYXJlKTogRGVsZXRlLgoJKGV4cGFuZF9leHByKTogVXNlIGRvX2NvbXBhcmVfcnR4X2FuZF9qdW1wIHdoZW4gaGFuZGxpbmcgTUFYX0VYUFIgYW5kCglNSU5fRVhQUi4KCShkb19qdW1wKTogVXNlIGRvX2NvbXBhcmVfYW5kX2p1bXAgb3IgZG9fY29tcGFyZV9ydHhfYW5kX2p1bXAgaW5zdGVhZAoJb2YgY29tcGFyZS9kb19qdW1wX2Zvcl9jb21wYXJlIHBhaXJzLgoJKGRvX2p1bXBfYnlfcGFydHNfZ3JlYXRlcik6IFVzZSBkb19qdW1wX2J5X3BhcnRzX2dyZWF0ZXJfcnR4LgoJKGRvX2p1bXBfYnlfcGFydHNfZ3JlYXRlcl9ydHgpOiBVc2UgZG9fY29tcGFyZV9ydHhfYW5kX2p1bXAgaW5zdGVhZCBvZgoJY29tcGFyZV9mcm9tX3J0eC9kb19qdW1wX2Zvcl9jb21wYXJlIHBhaXJzLgoJKGRvX2p1bXBfYnlfcGFydHNfZXF1YWxpdHkpOiBMaWtld2lzZS4KCShkb19qdW1wX2J5X3BhcnRzX2VxdWFsaXR5X3J0eCk6IExpa2V3aXNlLgoJKiBleHByLmggKGRvX2NvbXBhcmVfcnR4X2FuZF9qdW1wKTogRGVjbGFyZS4KCSogb3B0YWJzLmMgKHByZXBhcmVfY21wX2luc24pOiBOZXcgZnVuY3Rpb24sIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIGNvZGUKCXRoYXQgdXNlZCB0byBiZSBpbiBlbWl0X2NtcF9pbnNuLgoJKGNtcF9hdmFpbGFibGVfcCk6IE5ldyBmdW5jdGlvbi4KCShwcmVwYXJlX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCgkoZW1pdF9jbXBfYW5kX2p1bXBfaW5zbl8xKTogTmV3IGZ1bmN0aW9uLCBjb250YWlucyBzb21lIGNvZGUgdGhhdCB1c2VkCgl0byBiZSBpbiBlbWl0X2NtcF9pbnNuLgoJKHByZXBhcmVfZmxvYXRfbGliX2NtcCk6IFJlbmFtZWQgZnJvbSBlbWl0X2Zsb2F0X2xpYl9jbXA7IGNoYW5nZSBzb21lCglwYXJhbWV0ZXJzIHRvIGJlIHBvaW50ZXJzOyBkb24ndCBlbWl0IGZpbmFsIGNvbXBhcmUgYnV0IG1vZGlmeSBzb21lIG9mCgl0aGUgdmFsdWVzIHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3Mgc28gdGhlIGNhbGxlciBjYW4gcGVyZm9ybSB0aGUKCWNvcnJlY3QgY29tcGFyaXNvbi4KCShleHBhbmRfYmlub3ApOiBDYWxsIGVtaXRfc3RvcmVfZmxhZ19mb3JjZSB3aXRoIHNpZ25lZCBmb3JtcyBvZgoJY29tcGFyaXNvbiBjb2RlLgoJKGV4cGFuZF9hYnMpOiBVc2UgZG9fY29tcGFyZV9ydHhfYW5kX2p1bXAgaW5zdGVhZCBvZiBjb21wYXJlX2Zyb21fcnR4LwoJZW1pdF9qdW1wX2luc24gcGFpci4KCShlbWl0X2NtcF9hbmRfanVtcF9pbnNuKTogVXNlIHByZXBhcmVfY21wX2luc24gYW5kCgllbWl0X2NtcF9hbmRfanVtcF9pbnNuXzEuICBDYWxsIGVtaXRfcXVldWUuCgkoZW1pdF9jbXBfaW5zbik6IEp1c3QgY2FsbCBlbWl0X2NtcF9hbmRfanVtcF9pbnNucyB3aXRoIHplcm8gZm9yIExBQkVMCglhcmcuCgkqIGZsb3cuYyAodGlkeV9mYWxsdGhydV9lZGdlKTogSWYgSEFWRV9jYzAsIHZlcmlmeSBpbnNuIGJlZm9yZSBhCglqdW1wIHNldHMgY2MwIGJlZm9yZSBkZWxldGluZyBpdC4KCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogU2ltaWxhciBjaGFuZ2VzIGluIHNldmVyYWwgcGxhY2VzLgoJKGNvcHlfbG9vcF9ib2R5KTogSWYgSEFWRV9jYzAsIHZlcmlmeSBpbnNuIGJlZm9yZSBhIGp1bXAgc2V0cyBjYzAKCWJlZm9yZSBkZWxldGluZyBpdC4KCldlZCBBdWcgMTggMDY6Mzc6NDQgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBNYWtlZmlsZS5pbiAoaW5zbi1yZWNvZy5vKTogVXBkYXRlIGRlcGVuZGVuY2llcy4KCSogZ2VucmVjb2cuYyAobWFpbik6IE1ha2UgZ2VuZXJhdGVkIGZpbGUgaW5jbHVkZSAiZnVuY3Rpb24uaCIuCgpTYXQgQXVnIDE0IDAwOjU0OjU3IDE5OTkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAY3lnbnVzLmNvbT4KCgkqIGNzZS5jIChjc2VfaW5zbik6IENhbGwgbmV2ZXJfcmVhY2hlZF93YXJuaW5nIHdoZW4gYSBqdW1wIGlzCgljaGFuZ2VkIHRvIGJlIHVuY29uZGl0aW9uYWwuCgkqIGZsYWdzLmg6IERlY2xhcmUgd2Fybl9ub3RyZWFjaGVkLgoJKiBmbG93LmMgKGRlbGV0ZV9ibG9jayk6IENhbGwgbmV2ZXJfcmVhY2hlZF93YXJuaW5nIHdoZW4KCWEgYmxvY2sgaXMgZGVsZXRlZC4KCSoganVtcC5jIChkZWxldGVfYmFycmllcl9zdWNjZXNzb3JzKTogQ2FsbCBuZXZlcl9yZWFjaGVkX3dhcm5pbmcKCXdoZW4gd2UgZGVsZXRlIGV2ZXJ5dGhpbmcgYWZ0ZXIgYSBCQVJSSUVSLgoJKG5ldmVyX3JlYWNoZWRfd2FybmluZyk6IE5ldyBmdW5jdGlvbi4KCSogcnRsLmg6IERlY2xhcmUgbmV2ZXJfcmVhY2hlZF93YXJuaW5nLgoJKiB0b3BsZXYuYyAod2Fybl9ub3RyZWFjaGVkKTogTmV3IHZhcmlhYmxlLgoJKGxhbmdfaW5kZXBlbmRlbnRfb3B0aW9ucyk6IFNldCB3YXJuX25vdHJlYWNoZWQKCXdoZW4gLVd1bnJlYWNoYWJsZS1jb2RlLgoJKGNvbXBpbGVfZmlsZSk6IFdlIG5lZWQgbGluZSBudW1iZXJzIGZvciAtV3VucmVhY2hhYmxlLWNvZGUuCgpUdWUgQXVnIDE3IDIyOjA2OjExIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGhhaWZhLXNjaGVkLmMgKGluc25fdW5pdCk6IEZpeCB0eXBvIG9uIG91dCBvZiByYW5nZSB0ZXN0LgoJKiBzY2hlZC5jIChpbnNuX3VuaXQpOiBMaWtld2lzZS4KClR1ZSBBdWcgMTcgMjE6NTc6MjMgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3Rlcyk6IEhhbmRsZSBSRUdfRUhfUkVUSFJPVy4KClR1ZSBBdWcgMTcgMTc6Mzk6NDMgRURUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoY3JlYXRlX2VkZ2VfbGlzdCk6IFVzZSB4bWFsbG9jLCBub3QgbWFsbG9jLgoKVHVlIEF1ZyAxNyAwMTo0MDo1NCAxOTk5ICBMb3JlbiBSaXR0bGUgIDxsanJpdHRsZUBhY20ub3JnPgoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAobm9fZG91YmxlX3NsYXNoKTogRG8gbm90IHRyYXNoIHNpbmdsZS1saW5lCglDLXN0eWxlIGNvbW1lbnRzLiAgRG8gbm90IGxvc2UgdGhlIGNoYXJhY3RlciBiZWZvcmUgZG91YmxlIHNsYXNoLgoKTW9uIEF1ZyAxNiAxODowODoyMiBFRFQgMTk5OSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogYmFzaWMtYmxvY2suaCAoc3RydWN0IGVkZ2VfbGlzdCk6IFN0dWN0dXJlIHRvIG1haW50YWluIGEgdmVjdG9yCglvZiBlZGdlcy4KCShFREdFX0lOREVYX05PX0VER0UsIEVER0VfSU5ERVgsIElOREVYX0VER0VfUFJFRF9CQiwgSU5ERVhfRURHRV9TVUNDX0JCLAoJIElOREVYX0VER0UsIE5VTV9FREdFUyk6IE5ldyBNYWNyb3MgZm9yIGFjY2Vzc2luZyBlZGdlIGxpc3QuCgkoY3JlYXRlX2VkZ2VfbGlzdCwgZnJlZV9lZGdlLUxpc3QsIHByaW50X2VkZ2VfbGlzdCwgdmVyaWZ5X2VkZ2VfbGlzdCk6CglOZXcgZnVuY3Rpb24gcHJvdG90eXBlcy4KCSogZmxvdy5jIChjcmVhdGVfZWRnZV9saXN0KTogRnVuY3Rpb24gdG8gY3JlYXRlIGFuIGVkZ2UgbGlzdC4KCShmcmVlX2VkZ2VfbGlzdCk6IERpc2NhcmRzIG1lbW9yeSB1c2VkIGJ5IGFuIGVkZ2UgbGlzdC4KCShwcmludF9lZGdlX2xpc3QpOiBEZWJ1ZyBvdXRwdXQgc2hvd2luZyBhbiBlZGdlIGxpc3QuCgkodmVyaWZ5X2VkZ2VfbGlzdCk6IEludGVybmFsIGNvbnNpc3RlbmN5IGNoZWNrIGZvciBhbiBlZGdlIGxpc3QuCgkoZmluZF9lZGdlX2luZGV4KTogRnVuY3Rpb24gdG8gZmluZCBhbiBlZGdlIGluZGV4IGZvciBhIHByZWQgYW5kIHN1Y2MuCgpNb24gQXVnIDE2IDExOjU2OjM2IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmMgKHR5cGVfaGFzaF9hZGQpOiBVc2UgcGVybWFsbG9jIHRvIGFsbG9jYXRlIG5vZGVzIGluIHRoZQoJaGFzaHRhYmxlLgoKTW9uIEF1ZyAxNiAxNzowNDoxNSAxOTk5ICBKb3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIG1pcHMuaCAoQ0xBU1NfQ0FOTk9UX0NIQU5HRV9TSVpFKTogRGVmaW5lLgoKRnJpIEF1ZyAxMyAxNToyMDo0MyAxOTk5ICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CgoJKiBjb25maWcvaTM4Ni9mcmVlYnNkLmggKEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUCk6IERlZmluZS4KCkZyaSBBdWcgMTMgMTA6MjE6MjggMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQWxsb3cgbWFjaGluZSBkZXBlbmRlbnQKCXJlb3JnYW5pemF0aW9uIHBhc3MgdG8gcGxhY2UgaW5mb3JtYXRpb24gaW50byB0aGUgUlRMIGR1bXAKCWZpbGUgaWYgaXQgc28gd2lzaGVzLgoKU3VuIEF1ZyAxNSAxMjo0MToyMSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBleHBsb3cuYyAoaGFyZF9mdW5jdGlvbl92YWx1ZSk6IFVzZSBWT0lEbW9kZSBpbnN0ZWFkIG9mCglNQVhfTUFDSElORV9NT0RFLgoJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBMaWtld2lzZS4KCSogc3Rvci1sYXlvdXQuYyAoZ2V0X2Jlc3RfbW9kZSk6IExpa2V3aXNlLgoKCSogZ2VuZW1pdC5jIChnZW5fZXhwYW5kKTogSWYgbmV4dCBpcyBNQVRDSF9QQVJfRFVQLCB0aGVuIG91dHB1dAoJZW1pdCBjYWxsIGluc3RlYWQgb2YgZW1pdF9pbnNuIGNhbGwuCgpTYXQgQXVnIDE0IDE1OjA0OjA2IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY29uZmlndXJlLmluOiBIYW5kbGUgLS1kaXNhYmxlL2VuYWJsZS13aW4zMi1yZWdpc3RyeS4KCSogaW5zdGFsbC50ZXhpOiBEb2N1bWVudCAtLWRpc2FibGUvZW5hYmxlLXdpbjMyLXJlZ2lzdHJ5LgoJKiBhY2NvbmZpZy5oIChFTkFCTEVfV0lOMzJfUkVHSVNUUlkpOiBOZXcgbWFjcm8uCgkoV0lOMzJfUkVHSVNUUllfS0VZKTogTmV3IG1hY3JvLgoJKiBwcmVmaXguYzogVXNlIHRvIGVuYWJsZS9kaXNhYmxlIHdpbjMyLXNwZWNpZmljIGNvZGUuCgkobG9va3VwX2tleSk6IFVzZSB2ZXJzaW9uZWQga2V5LgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgkqIGNvbmZpZy5pbjogTGlrZXdpc2UuCgpGcmkgQXVnIDEzIDE3OjQxOjU1IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwcGxpYi5jIChyZWFkX2xpbmVfbnVtYmVyKTogTmV3IGZuLCBzcGxpdCBvdXQgb2YuLi4KCShkb19saW5lKTogSGVyZS4KCkZyaSBBdWcgMTMgMTQ6MTg6MjcgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJdHJlZS5jIChsYW5nX3Vuc2F2ZV9leHByX25vdykgOiBOZXcuCgkodW5zYXZlX2V4cHJfbm93KTogQ2FsbCBsYW5nX3Vuc2F2ZV9leHByX25vdy4KCXRyZWUuaCAobGFuZ191bnNhdmVfZXhwcl9ub3cpIDogTmV3LgoKRnJpIEF1ZyAxMyAwMDo0OTo0NiAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoZmxhZ19uZXdfZXhjZXB0aW9ucyk6IE9uIGJ5IGRlZmF1bHQuCgoxOTk5LTA4LTEzICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChHQ0NfRk9SX1RBUkdFVCk6IE1vdmUgLUIuLyBhZnRlciB0aGUgdG9vbGRpciAtQi4KCkZyaSBBdWcgMTMgMDE6Mjk6NTcgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBkd2FyZm91dC5jIChmdW5kYW1lbnRhbF90eXBlX2NvZGUpOiBSZXR1cm4gRlRfYm9vbGVhbiBmb3IKCUlOVEVHRVJfVFlQRSB3aXRoIHByZWNpc2lvbj09MSwgaXQncyBfX2phdmFfYm9vbGVhbi4KClRodSBBdWcgMTIgMjM6NTE6MDQgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZ2xvYmFsLmMgKHBydW5lX3ByZWZlcmVuY2VzKTogTW92ZSBzb21lIGludmFyaWFudHMgb3V0IG9mIHRoZQoJaW5uZXIgbG9vcC4KClRodSBBdWcgMTIgMTU6MzA6MjkgMTk5OSAgSmVzc2UgUGVycnkgIChqYXBAdW54LmRlYy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGFscGhhKi1kZWMtb3NmKik6IEFkZCBvc2Y1LgoKU3VuIEF1ZyAgMSAyMjoyNDowMyAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwaGlsYkBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBSZXdvcmsgaGFuZGxpbmcgb2YgQVJNIEdOVS9MaW51eCBzbGlnaHRseS4KCShhcm0qLSotbGludXgtZ251b2xkbGQpOiBOZXcgdGFyZ2V0LgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgkqIGluc3RhbGwudGV4aSAoQ29uZmlndXJhdGlvbnMpOiBBZGQgYXJtLSotbGludXgtZ251e29sZGxkfSBhbmQKCWFybS0qLWVsZi4gIE1lbnRpb24gdGhhdCBhcm0tKi1saW51eC1nbnVhb3V0IGlzIG9ic29sZXRlLgoJKiBjb25maWcvYXJtL2xpbnV4LW9sZGxkLmg6IE5ldyBmaWxlLgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZjI2Lmg6IERvbid0IGluY2x1ZGUgbGludXgtZWxmLmguCgkoVEFSR0VUX0RFRkFVTFQsIFNVQlRBUkdFVF9MSU5LX1NQRUMsIFNVQlRBUkdFVF9FWFRSQV9BU01fU1BFQyk6CglEb24ndCBkZWZpbmUuCgkqIGNvbmZpZy9hcm0vbGludXgtZWxmLmggKEFTTV9TUEVDKTogRGVmaW5lLgoJKFRBUkdFVF9ERUZBVUxULCBTVUJUQVJHRVRfRVhUUkFfTElOS19TUEVDLAoJU1VCVEFSR0VUX0VYVFJBX0FTTV9TUEVDLCBDUFBfQVBDU19QQ19ERUZBVUxUKTogQWRkIGRlZmluaXRpb25zCglmb3IgMjYtYml0IEFQQ1MgYW5kIG9sZCBsaW5rZXIuCgkoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgYF9fYXJtX18nOyBkb24ndCBkZWZpbmUgYGFybScgb3IKCWBhcm1fZWxmJy4KCShGUF9ERUZBVUxUKTogRGVmaW5lIHRvIEZQX1NPRlQzIGZvciBhbGwgbWFjaGluZXMuCgkqIGNvbmZpZy9hcm0vbGludXgtYW91dC5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSBgX19hcm1fXyc7Cglkb24ndCBkZWZpbmUgYGFybScgb3IgYGFybV9lbGYnLgoJKiBjb25maWcvYXJtL3QtbGludXggKEVYVFJBX01VTFRJTElCX1BBUlRTLCBNVUxUSUxJQl9PUFRJT05TLAoJTVVMVElMSUJfRElSTkFNRVMpOiBEZWZpbmUuICBGaXggdHlwbyBpbiBjb21tZW50LgoKVGh1IEF1ZyAxMiAxMDoxNDo0NyAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogcnRsLnRleGk6IEZpeCB0eXBvLgoKV2VkIEF1ZyAxMSAyMzo1MDo1NyAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoQysrIERpYWxlY3QgT3B0aW9ucyk6IEFkZCAtZm1zLWV4dGVuc2lvbnMuCgpXZWQgQXVnIDExIDEyOjU5OjM3IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBleHRlbmQudGV4aSAoQysrIFNpZ25hdHVyZXMpOiBSZW1vdmUgbm9kZS4KCSogaW52b2tlLnRleGk6IFJlbW92ZSBkaXNjdXNzaW9uIG9mIC1maGFuZGxlLXNpZ25hdHVyZXMsCglzaWduYXR1cmUsIHNpZ29mLCBfX3NpZ25hdHVyZV9fLCBhbmQgX19zaWdvZl9fLgoKV2VkIEF1ZyAxMSAwMzozODoyNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoSkFWQUdDKTogUmVtb3ZlZC4KCldlZCBBdWcgMTEgMDI6MTM6MjYgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbi5oIChBU01fT1VUUFVUX0FMSUdORURfQlNTKTogRGVmaW5lLgoKMTk5OS0wOC0xMSBNYXJrIEVsYnJlY2h0IDxzbm93YmFsbDNAYmlnZm9vdC5jb20+CgoJKiBpMzg2L2RqZ3BwLmggKEFTTV9PVVRQVVRfQUxJR05FRF9CU1MpOiBEZWZpbmUuCgoxOTk5LTA4LTExICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm0uY29tKQoKCSogZW1pdC1ydGwuYyAobWFya19yZWdfcG9pbnRlcik6IERvbid0IGluY3JlYXNlIHRoZSBhbGlnbm1lbnQgb2YKCWEgcmVnaXN0ZXIgdGhhdCBpcyBhbHJlYWR5IGtub3duIHRvIGJlIGEgcG9pbnRlci4KCjE5OTktMDgtMTEgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL2luY2xoYWNrLnRwbDogT25seSBpbnN0YWxsIGFzc2VydC5oIGNvbmRpdGlvbmFsbHkuCgkqIGZpeGluYy9pbmNsaGFjay5zaDogUmVnZW5lcmF0ZWQuCgkqIGZpeGluYy9maXhpbmNsLnNoOiBSZWdlbmVyYXRlZC4KCldlZCBBdWcgMTEgMDA6MzQ6MjIgMTk5OSAgSm9lIEJ1Y2sgIDxqYnVja0BzeW5vcHN5cy5jb20+CgoJKiBpbnZva2UudGV4aTogcy9HTlUgQ0MvR0NDLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBnY2MudGV4aS4KCUZpeCBkb2N1bWVudGF0aW9uIG9mIC1hbnNpIGZsYWcgdG8gZGVzY3JpYmUgaXRzIEMrKyBiZWhhdmlvci4KCVJlbW92ZSBib2d1cyByZWZlcmVuY2UgdG8gR0NDIDIuOS4KClR1ZSBBdWcgMTAgMTc6MTk6MDIgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlnL3NoL3NoLmMgKG1hY2hpbmVfZGVwZW5kZW50X3Jlb3JnKTogT25seSBjYWxsIFBVVF9NT0RFIG9uCglub3RlIGlmIGl0IGlzIG5vbi1OVUxMLgoKVHVlIEF1ZyAxMCAxMDo0Nzo0MiBFRFQgMTk5OSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmggKGVoX25lc3RpbmdfaW5mbyk6IEFkZCBuZXcgc3RydWN0dXJlIGRlZmluaXRpb24uCgkoaW5pdF9laF9uZXN0aW5nX2luZm8sIGZyZWVfZWhfbmVzdGluZ19pbmZvKTogQWRkIGZ1bmN0aW9uIHByb3RvdHlwZXMuCgkocmVhY2hhYmxlX2hhbmRsZXJzLCB1cGRhdGVfcmV0aHJvd19yZWZlcmVuY2VzKTogQWRkIGZ1bmN0aW9uCglwcm90b3R5cGVzLgoJKiBydGwuaCAoc3RydWN0IHJ0dmVjX2RlZik6IFVwZGF0ZSBjb21tZW50cy4gIFJFR19FSF9SRVRIUk9XIHRha2VzCglhIHJldGhyb3cgc3ltYm9sIGluc3RlYWQgb2YgYW4gaW50ZWdlciBleGNlcHRpb24gcmVnaW9uIG51bWJlci4KCSogZmxvdy5jIChNYWtlX2VkZ2VzKTogVXNlIG5ldyBleGNlcHRpb24gbmVzdGluZyByb3V0aW5lcyB0byBkZXRlcm1pbmUKCXdoaWNoIGhhbmRsZXJzIGFyZSByZWFjaGFibGUgZnJvbSBhIENBTEwgb3IgYXN5bmNocm9ub3VzIGluc24uCglEb24ndCBhZGQgYW4gZWRnZSBmb3IgY2FsbHMgd2l0aCBhIFJFR19FSF9SRUdJT04gb2YgLTEgdG8gbm9uLWxvY2FsCglnb3RvIHJlY2VpdmVycy4KCShkZWxldGVfZWhfcmVnaW9ucyk6IFVwZGF0ZSByZXRocm93IGxhYmVscywgYW5kIGRvbid0IGRlbGV0ZQoJcmVnaW9ucyB3aGljaCBhcmUgdGhlIHRhcmdldCBvZiBhIHJldGhyb3cuCgkqIGV4Y2VwdC5jIChzdHJ1Y3QgZnVuY19laF9lbnRyeSk6IEFkZCByZXRocm93X3JlZiBmaWVsZCwgbm93IHdlIGNhbgoJYXZvaWQgb3ZlcmxvYWRpbmcgdGhlIFNZTUJPTF9SRUZfVVNFRCBmbGFnLgoJKHJldGhyb3dfc3ltYm9sX21hcCk6IFVzZSBuZXcgcmV0aHJvd19yZWYgZmllbGQuCgkocmV0aHJvd191c2VkKTogVXNlIG5ldyByZXRocm93X3JlZiBmaWVsZC4KCShleHBhbmRfcmV0aHJvdyk6IFJFR19FSF9SRVRIUk9XIG5vdyBoYXMgYSBTWU1CT0xfUkVGIGluc3RlYWQKCW9mIGFuIGludGVnZXIuICBGaXggZm9ybWF0dGluZy4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogVXNlIG5ldyByZXRocm93X3JlZiBmaWVsZC4KCShjYW5fdGhyb3cpOiBDaGVjayBmb3IgRUhfUkVHSU9OX05PVEUgYmVmb3JlIGRlY2lkaW5nCgl3aGV0aGVyIGEgQ0FMTCBjYW4gdGhyb3cgb3Igbm90LgoJKHNjYW5fcmVnaW9uKTogQ2FsbCByZXRocm93X3VzZWQoKSBpbnN0ZWFkIG9mIGFjY2Vzc2luZyBkYXRhIHN0cnVjdHVyZS4KCSh1cGRhdGVfcmV0aHJvd19yZWZlcmVuY2VzKTogTmV3IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSBvbmx5IHJlZ2lvbnMKCXdoaWNoIGFyZSBzdGlsbCB0YXJnZXRzIG9mIGEgcmV0aHJvdyBhcmUgZmxhZ2dlZCBhcyBzdWNoLgoJKHByb2Nlc3NfbmVzdGluZm8pOiBOZXcgc3RhdGljIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgYSBoYW5kbGVyCglsaXN0IGZvciBhIHNwZWNpZmljIHJlZ2lvbi4KCShpbml0X2VoX25lc3RpbmdfaW5mbyk6IE5ldyBmdW5jdGlvbiB0byBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZQoJdGhlIGxpc3Qgb2YgYWxsIEVIIGhhbmRsZXJzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWdpb25zLgoJKHJlYWNoYWJsZV9oYW5kbGVycyk6IE5ldyBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgbGlzdCBvZiBoYW5kbGVycwoJcmVhY2hhYmxlIGZyb20gYSBzcGVjaWZpYyByZWdpb24gYW5kIGluc24uCgkoZnJlZV9laF9uZXN0aW5nX2luZm8pOiBOZXcgZnVuY3Rpb24gdG8gZGlzcG9zZSBvZiBhIGxpc3Qgb2YKCXJlYWNoYWJsZSBoYW5kbGVycy4KClR1ZSBBdWcgMTAgMTA6Mzk6MzEgRURUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoc3BsaXRfZWRnZSk6IFNldCBKVU1QX0xBQkVMIGZpZWxkLgoJKGNvbW1pdF9vbmVfZWRnZV9pbnNlcnRpb24pOiBTZXQgaGVhZCBjb3JyZWN0bHkgZm9yIGluc2VydF9iZWZvcmUuCglXaGVuIGluc2VydGluZyBpbnNucywgdXBkYXRlIGluc24gYmxvY2sgbnVtYmVycyBpZiBhbGxvY2F0ZWQuCgpUdWUgQXVnIDEwIDA5OjI2OjA3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZnJhbWVfZGVidWdfZXhwciwgYWRkX2luY29tcGxldGVfdHlwZSwKCXJldHJ5X2luY29tcGxldGVfdHlwZXMpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShzdHJpcGF0dHJpYnV0ZXMsIGR3YXJmX2NmaV9uYW1lLCBBU01fT1VUUFVUX0RXQVJGX1NUUklORywKCWR3YXJmX3RhZ19uYW1lLCBkd2FyZl9hdHRyX25hbWUsIGR3YXJmX2Zvcm1fbmFtZSwKCWR3YXJmX3N0YWNrX29wX25hbWUsIGR3YXJmX3R5cGVfZW5jb2RpbmdfbmFtZSwgYWRkX0FUX3N0cmluZywKCWR3YXJmMl9uYW1lLCBhZGRfbmFtZV9hdHRyaWJ1dGUsIGxvb2t1cF9maWxlbmFtZSwgZHdhcmYyb3V0X2xpbmUsCglkd2FyZjJvdXRfc3RhcnRfc291cmNlX2ZpbGUsIGR3YXJmMm91dF9kZWZpbmUsIGR3YXJmMm91dF91bmRlZik6CglDb25zdGlmeSBhIGNoYXIqLgoKCSogZHdhcmYyb3V0LmggKGR3YXJmMm91dF9kZWZpbmUsIGR3YXJmMm91dF91bmRlZiwKCWR3YXJmMm91dF9zdGFydF9zb3VyY2VfZmlsZSwgZHdhcmYyb3V0X2xpbmUpOiBMaWtld2lzZS4KClR1ZSBBdWcgMTAgMDk6MjE6NDYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogb3V0cHV0LmggKGFzc2VtYmxlX25hbWUpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogdmFyYXNtLmMgKFVOSVFVRV9TRUNUSU9OLCBhc3NlbWJsZV9zdGFydF9mdW5jdGlvbiwKCWFzc2VtYmxlX3ZhcmlhYmxlLCBhc3NlbWJsZV9uYW1lKTogTGlrZXdpc2UuCgoJKiBkd2FyZjJvdXQuYyAoQVNNX05BTUVfVE9fU1RSSU5HKTogTGlrZXdpc2UuCgoJKiBhcm0vcGUuYyAoYXJtX3BlX3VuaXF1ZV9zZWN0aW9uKTogTGlrZXdpc2UuCgoJKiBpMzg2L2N5Z3dpbi5oIChTVFJJUF9OQU1FX0VOQ09ESU5HKTogTGlrZXdpc2UuCgoJKiBpMzg2L2kzODYtaW50ZXJpeC5oIChTVFJJUF9OQU1FX0VOQ09ESU5HKTogTGlrZXdpc2UuCgoJKiBpMzg2L2ludGVyaXguYyAoaTM4Nl9wZV91bmlxdWVfc2VjdGlvbik6IExpa2V3aXNlLgoKCSogaTM4Ni93aW4zMi5oIChTVFJJUF9OQU1FX0VOQ09ESU5HKTogTGlrZXdpc2UuCgoJKiBpMzg2L3dpbm50LmMgKGkzODZfcGVfdW5pcXVlX3NlY3Rpb24pOiBMaWtld2lzZS4KCgkqIG0zMnIvbTMyci5oIChBU01fT1VUUFVUX0xBQkVMUkVGKTogTGlrZXdpc2UuCgoJKiBtbjEwMjAwL21uMTAyMDAuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IExpa2V3aXNlLgoKCSogbW4xMDMwMC9tbjEwMzAwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBMaWtld2lzZS4KCgkqIHBhL3BhLmMgKG91dHB1dF9jYWxsKTogTGlrZXdpc2UuCgoJKiBwYS9wYS5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogTGlrZXdpc2UuCgoJKiBwYS9zb20uaCAoQVNNX09VVFBVVF9GVU5DVElPTl9QUkVGSVgpOiBMaWtld2lzZS4KCgkqIHJzNjAwMC9yczYwMDAuYyAocnM2MDAwX291dHB1dF9sb2FkX3RvY190YWJsZSwgb3V0cHV0X3RvYyk6CglMaWtld2lzZS4KCgkqIHJzNjAwMC9yczYwMDAuaCAoUlM2MDAwX09VVFBVVF9CQVNFTkFNRSwgU1RSSVBfTkFNRV9FTkNPRElORyk6CglMaWtld2lzZS4KCgkqIHJzNjAwMC9zb2wyLmggKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBMaWtld2lzZS4KCgkqIHJzNjAwMC9zeXN2NC5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FLCBBU01fT1VUUFVUX0lOVCwKCVNUUklQX05BTUVfRU5DT0RJTkcsIEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBMaWtld2lzZS4KCgkqIHY4NTAvdjg1MC5oIChBU01fT1VUUFVUX0xBQkVMUkVGKTogTGlrZXdpc2UuCgpNb24gQXVnICA5IDE5OjU0OjA1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHJlYWwuYyAoR0VUX1JFQUwsIFBVVF9SRUFMKTogVXNlIG1lbWNweSBpbnN0ZWFkIG9mIGJjb3B5LgoKTW9uIEF1ZyAgOSAxOTozNjowMCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiB0cmVlLmggKGxhbmdfaWRlbnRpZnkpOiBDb25zdGlmeSBhIGNoYXIqLgoJKHByaW50X2Vycm9yX2Z1bmN0aW9uKTogQWRkIGV4dGVybiBwcm90b3R5cGUuICBDb25zdGlmeSBhIGNoYXIqLgoKCSogYy1sYW5nLmMgKGxhbmdfaWRlbnRpZnkpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogb2JqYy9vYmpjLWFjdC5jIChsYW5nX2lkZW50aWZ5KTogQ29uc3RpZnkgYSBjaGFyKi4KCk1vbiBBdWcgIDkgMTY6MjE6NTMgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBnZW5wZWVwLmMgKG1haW4pOiBNYWtlIGdlbmVyYXRlZCBmaWxlIGluY2x1ZGUgImZ1bmN0aW9uLmgiLgoJKiBhcm0uYyAoZnVuY3Rpb25fcmVhbGx5X2Nsb2JiZXJzX2xyKTogRGVsZXRlIElOTElORV9IRUFERVIgY2FzZS4KCk1vbiBBdWcgIDkgMTA6MDg6NTAgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBNYWtlZmlsZS5pbjogVXBkYXRlIGRlcGVuZGVuY2llcy4KCSogYWxpYXMuYzogSW5jbHVkZSAiZnVuY3Rpb24uaCIKCSogYy1kZWNsLmM6IExpa2V3aXNlLgoJKiBjYWxsZXItc2F2ZS5jOiBMaWtld2lzZS4KCSogY2FsbHMuYzogTGlrZXdpc2UuCgkqIGNvbWJpbmUuYzogTGlrZXdpc2UuCgkqIGNzZS5jOiBMaWtld2lzZS4KCSogZXhwbG93LmM6IExpa2V3aXNlLgoJKiBmaW5hbC5jOiBMaWtld2lzZS4KCSogZ2xvYmFsLmM6IExpa2V3aXNlLgoJKiBncmFwaC5jOiBMaWtld2lzZS4KCSogbG9jYWwtYWxsb2MuYzogTGlrZXdpc2UuCgkqIGxvb3AuYzogTGlrZXdpc2UuCgkqIG9wdGFicy5jOiBMaWtld2lzZS4KCSogcHJvZmlsZS5jOiBMaWtld2lzZS4KCSogcmVjb2cuYzogTGlrZXdpc2UuCgkqIHJlZ2NsYXNzLmM6IExpa2V3aXNlLgoJKiByZWdtb3ZlLmM6IExpa2V3aXNlLgoJKiByZWxvYWQuYzogTGlrZXdpc2UuCgkqIHJlb3JnLmM6IExpa2V3aXNlLgoJKiByZXNvdXJjZS5jOiBMaWtld2lzZS4KCSogc2NoZWQuYzogTGlrZXdpc2UuCgkqIHN0dXBpZC5jOiBMaWtld2lzZS4KCSogY29uZmlnLzE3NTBhLzE3NTBhLmM6IExpa2V3aXNlLgoJKiBjb25maWcvYTI5ay9hMjlrLmM6IExpa2V3aXNlLgoJKiBjb25maWcvYXJjL2FyYy5jOiBMaWtld2lzZS4KCSogY29uZmlnL2FybS9hcm0uYzogTGlrZXdpc2UuCgkqIGNvbmZpZy9hcm0vdGh1bWIuYzogTGlrZXdpc2UuCgkqIGNvbmZpZy9jNHgvYzR4LmM6IExpa2V3aXNlLgoJKiBjb25maWcvY2xpcHBlci9jbGlwcGVyLmM6IExpa2V3aXNlLgoJKiBjb25maWcvY29udmV4L2NvbnZleC5jOiBMaWtld2lzZS4KCSogY29uZmlnL2Z4ODAvZng4MC5jOiBMaWtld2lzZS4KCSogY29uZmlnL2k4NjAvaTg2MC5jOiBMaWtld2lzZS4KCSogY29uZmlnL202OGsvbTY4ay5jOiBMaWtld2lzZS4KCSogY29uZmlnL204OGsvbTg4ay5jOiBMaWtld2lzZS4KCSogY29uZmlnL21pcHMvbWlwcy5jOiBMaWtld2lzZS4KCSogY29uZmlnL3BkcDExL3BkcDExLmM6IExpa2V3aXNlLgoJKiBjb25maWcvcHlyL3B5ci5jOiBMaWtld2lzZS4KCSogY29uZmlnL3JvbXAvcm9tcC5jOiBMaWtld2lzZS4KCSogY29uZmlnL3NoL3NoLmM6IExpa2V3aXNlLgoJKiBjb25maWcvdGFob2UvdGFob2UuYzogTGlrZXdpc2UuCgkqIGNvbmZpZy92YXgvdmF4LmM6IExpa2V3aXNlLgoJKiBjb25maWcvd2UzMmsvd2UzMmsuYzogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jOiBJbmNsdWRlICJmdW5jdGlvbi5oIi4KCShtZW1fbWluX2FsaWdubWVudCk6IFRlc3QgY3VycmVudF9mdW5jdGlvbiByYXRoZXIgdGhhbgoJcmVnbm9fcG9pbnRlcl9hbGlnbi4KCSogY29uZmlnL3BhL3BhLmM6IExpa2V3aXNlLgoJKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IERlbGV0ZSBkZWNsYXJhdGlvbiBvZgoJY3VycmVudF9mdW5jdGlvbl9vdXRnb2luZ19hcmdzX3NpemUuCgkqIGNvbmZpZy9hcmMvYXJjLmggKGN1cnJlbnRfZnVuY3Rpb25fdmFyYXJncyk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCSogY29uZmlnL2VseHNpL2VseHNpLmggKGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfYWxsb2NhKTogRGVsZXRlCglkZWNsYXJhdGlvbi4KCSogY29uZmlnL2kzNzAvaTM3MC5oIChjdXJyZW50X2Z1bmN0aW9uX291dGdvaW5nX2FyZ3Nfc2l6ZSk6IERlbGV0ZQoJZGVjbGFyYXRpb24uCgkqIGNvbmZpZy9pMzg2L2kzODYuaCAoRklOQUxJWkVfUElDKTogRGVsZXRlIGRlY2xhcmF0aW9uIG9mCgljdXJyZW50X2Z1bmN0aW9uX3VzZXNfcGljX29mZnNldF90YWJsZS4KCSogY29uZmlnL202OGsvYS11eC5oIChGVU5DVElPTl9FWFRSQV9FUElMT0dVRSk6IERlbGV0ZSBkZWNsYXJhdGlvbgoJb2YgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX3BvaW50ZXIuCgkqIGNvbmZpZy9tNjhrL2FsdG9zMzA2OC5oIChGVU5DVElPTl9FWFRSQV9FUElMT0dVRSk6IExpa2V3aXNlLgoJKiBjb25maWcvbTY4ay9saW51eC5oIChGVU5DVElPTl9FWFRSQV9FUElMT0dVRSk6IExpa2V3aXNlLgoJKiBjb25maWcvbTY4ay9tNjhrdjQuaCAoRlVOQ1RJT05fRVhUUkFfRVBJTE9HVUUpOiBMaWtld2lzZS4KCSogY29uZmlnL202OGsvbW90MzMwMC5oIChGVU5DVElPTl9FWFRSQV9FUElMT0dVRSk6IExpa2V3aXNlLgoJKiBjb25maWcvbTY4ay9wYmIuaCAoRlVOQ1RJT05fRVhUUkFfRVBJTE9HVUUpOiBMaWtld2lzZS4KCSogY29uZmlnL202OGsvdG93ZXItYXMuaCAoRlVOQ1RJT05fRVhUUkFfRVBJTE9HVUUpOiBMaWtld2lzZS4KCSogY29uZmlnL204OGsvbTg4ay5jOiBJbmNsdWRlICJmdW5jdGlvbi5oIgoJKGNhbGxfdXNlZF9yZWdzLCBjdXJyZW50X2Z1bmN0aW9uX3ByZXRlbmRfYXJnc19zaXplLAoJY3VycmVudF9mdW5jdGlvbl9vdXRnb2luZ19hcmdzX3NpemUsIGZyYW1lX3BvaW50ZXJfbmVlZGVkKTogRGVsZXRlCglkZWNsYXJhdGlvbnMuCgkqIGNvbmZpZy9tODhrL204OGsuaCAoY3VycmVudF9mdW5jdGlvbl9wcmV0ZW5kX2FyZ3Nfc2l6ZSk6IERlbGV0ZQoJZGVjbGFyYXRpb24uCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoY3VycmVudF9mdW5jdGlvbl9jYWxsc19hbGxvY2EpOiBEZWxldGUKCWRlY2xhcmF0aW9uLgoJKiBjb25maWcvbW4xMDIwMC9tbjEwMjAwLmggKGN1cnJlbnRfZnVuY3Rpb25fbmVlZHNfY29udGV4dCwKCXJ0eF9lcXVhbF9mdW5jdGlvbl92YWx1ZV9tYXR0ZXJzKTogRGVsZXRlIGRlY2xhcmF0aW9ucy4KCSogY29uZmlnL25zMzJrL25zMzJrIChjdXJyZW50X2Z1bmN0aW9uX3VzZXNfcGljX29mZnNldF90YWJsZSwKCWZsYWdfcGljKTogRGVsZXRlIGRlY2xhcmF0aW9ucy4KCSogY29uZmlnL3BhL3BhLmggKGN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemUsCgljdXJyZW50X2Z1bmN0aW9uX2RlY2wpOiBEZWxldGUgZGVjbGFyYXRpb25zLgoJKiBjb25maWcvcGEvc29tLmggKGN1cnJlbnRfZnVuY3Rpb25fdmFyYXJncyk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCSogY29uZmlnL3BkcDExL3BkcDExLmggKGN1cnJlbnRfZnVuY3Rpb25fcHJldGVuZF9hcmdzX3NpemUpOiBEZWxldGUKCWRlY2xhcmF0aW9uLgoJKiBjb25maWcvcHlyL3B5ci5oIChjdXJyZW50X2Z1bmN0aW9uX3ByZXRlbmRfYXJnc19zaXplLAoJY3VycmVudF9mdW5jdGlvbl9hcmdzX3NpemUsIGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfYWxsb2NhKTogRGVsZXRlCglkZWNsYXJhdGlvbnMuCgkqIGNvbmZpZy9zaC9zaC5oIChjdXJyZW50X2Z1bmN0aW9uX3ZhcmFyZ3MpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChjdXJyZW50X2Z1bmN0aW9uX291dGdvaW5nX2FyZ3Nfc2l6ZSwKCWN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfYWxsb2NhLCBjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOiBEZWxldGUKCWRlY2xhcmF0aW9ucy4KCSogY29uZmlnL3NwdXIvc3B1ci5oIChjdXJyZW50X2Z1bmN0aW9uX3ByZXRlbmRfYXJnc19zaXplLAoJY3VycmVudF9mdW5jdGlvbl9jYWxsc19hbGxvY2EpOiBEZWxldGUgZGVjbGFyYXRpb25zLgoJKiBjb25maWcvdjg1MC92ODUwLmMgKGN1cnJlbnRfZnVuY3Rpb25fb3V0Z29pbmdfYXJnc19zaXplKTogRGVsZXRlCglkZWNsYXJhdGlvbi4KCSogY29uZmlnL3ZheC92bXMuaCAoY3VycmVudF9mdW5jdGlvbl9uYW1lKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKiBnY3NlLmM6IEluY2x1ZGUgImZ1bmN0aW9uLmgiLgoJKGN1cnJlbnRfZnVuY3Rpb25fbmFtZSwgY3VycmVudF9mdW5jdGlvbl9jYWxsc19zZXRqbXApOiBEZWxldGUKCWRlY2xhcmF0aW9ucy4KCSogaGFpZmEtc2NoZWQuYzogSW5jbHVkZSAiZnVuY3Rpb24uaCIuCgkoZm9yY2VkX2xhYmVscyk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCSoganVtcC5jOiBMaWtld2lzZS4KCSogcmVnLXN0YWNrLmM6IExpa2V3aXNlLgoJKiByZWxvYWQxLmM6IExpa2V3aXNlLgoJKiBnZW5lbWl0LmMgKG1haW4pOiBNYWtlIGdlbmVyYXRlZCBmaWxlIGluY2x1ZGUgZnVuY3Rpb24uaC4KCSogZ2Vub3V0cHV0LmMgKG91dHB1dF9wcm9sb2d1ZSk6IExpa2V3aXNlLgoKCSogYnVpbHRpbnMuYyAoc2F2ZXJlZ3NfdmFsdWUsIGFwcGx5X2FyZ3NfdmFsdWUpOiBEZWxldGUgdmFyaWFibGVzLgoJKiBlbWl0LXJ0bC5jIChyZWdfcnR4X25vLCBmaXJzdF9sYWJlbF9udW0sIGZpcnN0X2luc24sIGxhc3RfaW5zbiwKCXNlcXVlbmNlX3J0bF9leHByLCBjdXJfaW5zbl91aWQsIGxhc3RfbGluZW51bSwgbGFzdF9maWxlbmFtZSwKCXJlZ25vX3BvaW50ZXJfZmxhZywgcmVnbm9fcG9pbnRlcl9mbGFnX2xlbmd0aCwgcmVnbm9fcG9pbnRlcl9hbGlnbiwKCXJlZ25vX3JlZ19ydHgsIHNlcXVlbmNlX3N0YWNrKTogRGVsZXRlIHZhcmlhYmxlcy4gIEFkZCBhY2Nlc3NvcgoJbWFjcm9zIGZvciBzb21lIG9mIHRoZW0uCgkoZW1pdF9maWxlbmFtZSwgZW1pdF9saW5lbm8pOiBEZWxldGUgZGVjbGFyYXRpb25zLgoJKGdlbl9yZWdfcnR4KTogVXNlIG1lbXNldC9tZW1jcHkgaW5zdGVhZCBvZiBiemVyby9iY29weS4gIEFjY2VzcwoJcmVnbm9fcG9pbnRlcl8qIHZhcmlhYmxlcyB0aHJvdWdoIGN1cnJlbnRfZnVuY3Rpb24uCgkoZ2VuX2lubGluZV9oZWFkZXJfcnR4KTogRGVsZXRlIGZ1bmN0aW9uLgoJKHNhdmVfZW1pdF9zdGF0dXMpOiBEZWxldGUgZnVuY3Rpb24uCgkoc2V0X25ld19sYXN0X2xhYmVsX251bSk6IE5ldyBmdW5jdGlvbi4KCShjbGVhcl9lbWl0X2NhY2hlcyk6IE5ldyBmdW5jdGlvbi4KCShyZXN0b3JlX2VtaXRfc3RhdHVzKTogSnVzdCBjbGVhciBsYXN0X2xhYmVsbnVtIGFuZCBjYWxsCgljbGVhcl9lbWl0X2NhY2hlcy4KCShnZXRfbGFzdF9pbnNuX2FueXdoZXJlKTogVmFyaWFibGUgc2VxdWVuY2Vfc3RhY2sgaXMgbm93IGFjY2Vzc2VkCgl0aHJvdWdoIG1hY3JvIHNlcV9zdGFjay4KCShhZGRfaW5zbl9hZnRlcik6IExpa2V3aXNlLgoJKGFkZF9pbnNuX2JlZm9yZSk6IExpa2V3aXNlLgoJKHJlbW92ZV9pbnNuKTogTGlrZXdpc2UuCgkocG9wX3RvcG1vc3Rfc2VxdWVuY2UpOiBMaWtld2lzZS4KCShpbl9zZXF1ZW5jZV9wKTogTGlrZXdpc2UuCgkoc3RhcnRfc2VxdWVuY2VfZm9yX3J0bF9leHByKTogTGlrZXdpc2UuCgkoc3RhcnRfc2VxdWVuY2UpOiBMaWtld2lzZSwgYW5kIGxpa2V3aXNlIGZvcgoJc2VxdWVuY2VfcnRsX2V4cHIvc2VxX3J0bF9leHByLgoJKHB1c2hfdG9wbW9zdF9zZXF1ZW5jZSk6IExpa2V3aXNlLgoJKGVuZF9zZXF1ZW5jZSk6IExpa2V3aXNlLgoJKGluaXRfdmlydHVhbF9yZWdzKTogTm93IHRha2VzIGEgInN0cnVjdCBlbWl0X3N0YXR1cyAqIiBhcmd1bWVudC4KCUFsbCBjYWxsZXJzIGNoYW5nZWQuICBTdG9yZSBpbnRvIHRoYXQgcG9pbnRlciBpbnN0ZWFkIG9mIGdsb2JhbHMuCgkoaW5pdF9lbWl0KTogQWxsb2NhdGUgZW1pdCBlbHQgb2YgY3VycmVudF9mdW5jdGlvbi4KCUNoYW5nZXMgZm9yIHNlcXVlbmNlX3J0bF9leHByL3NlcXVlbmNlX3N0YWNrIHJlbmFtaW5nLgoJQ2FsbCBjbGVhcl9lbWl0X2NhY2hlcyBpbnN0ZWFkIG9mIGRvaW5nIGl0IGluLWxpbmUuCglBY2Nlc3MgcmVnbm9fcG9pbnRlcl8qIHZhcmlhYmxlcyB0aHJvdWdoIGN1cnJlbnRfZnVuY3Rpb24uCgkoaW5pdF9lbWl0X29uY2UpIERvbid0IGNsZWFyIHNlcXVlbmNlX3N0YWNrLgoKCSogZXhwci5jIChwZW5kaW5nX3N0YWNrX2FkanVzdCwgaW5oaWJpdF9kZWZlcl9wb3AsIHBlbmRpbmdfY2hhaW4pOgoJRGVsZXRlIHZhcmlhYmxlcy4KCShhcmdfcG9pbnRlcl9zYXZlX2FyZWEpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkoZmluaXNoX2V4cHJfZm9yX2Z1bmN0aW9uKTogUmVuYW1lZCBmcm9tIGluaXRfcXVldWU7IG5vIGxvbmdlciBzdGF0aWMuCgkoaW5pdF9leHByKTogRG9uJ3QgY2FsbCBpbml0X3F1ZXVlLgoJKHNhdmVfZXhwcl9zdGF0dXMsIHJlc3RvcmVfZXhwcl9zdGF0dXMpOiBEZWxldGUgZnVuY3Rpb25zLgoJKGV4cGFuZF9leHByKTogQ2hhbmdlcyB0byByZWZsZWN0IG5ldyBsYXlvdXQgb2Ygc3RydWN0IGZ1bmN0aW9uLgoJRG9uJ3QgYWNjZXNzIGN1cnJlbnRfZnVuY3Rpb25fY2hlY2tfbWVtb3J5X3VzYWdlIHdoZW4gY3VycmVudF9mdW5jdGlvbgoJaXMgMC4KCSogZXhwci5oIChmb3JjZWRfbGFiZWxzLCBzYXZlX2V4cHJfcmVncywgc2F2ZXJlZ3NfdmFsdWUsCglhcHBseV9hcmdzX3ZhbHVlLCBjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2FsbG9jYSwgaW5oaWJpdF9kZWZlcl9wb3AsCgljdXJyZW50X2Z1bmN0aW9uX291dGdvaW5nX2FyZ3Nfc2l6ZSwgY3VycmVudF9mdW5jdGlvbl9hcmdfb2Zmc2V0X3J0eCwKCWN1cnJlbnRfZnVuY3Rpb25fdXNlc19jb25zdF9wb29sLCBmdW5jdGlvbl9jYWxsX2NvdW50LAoJY3VycmVudF9mdW5jdGlvbl91c2VzX3BpY19vZmZzZXRfdGFibGUsIG5vbmxvY2FsX2xhYmVscywKCWN1cnJlbnRfZnVuY3Rpb25faW50ZXJuYWxfYXJnX3BvaW50ZXIsIG5vbmxvY2FsX2dvdG9fc3RhY2tfbGV2ZWwsCgljdXJyZW50X2Z1bmN0aW9uX2NoZWNrX21lbW9yeV91c2FnZSwgbm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3RzLAoJcGVuZGluZ19zdGFja19hZGp1c3QsIHRhcmdldF90ZW1wX3Nsb3RfbGV2ZWwsIHRlbXBfc2xvdF9sZXZlbCk6IERlbGV0ZQoJZGVjbGFyYXRpb25zLgoJKGZpbmlzaF9leHByX2Zvcl9mdW5jdGlvbik6IERlY2xhcmUuCgkqIGZsYWdzLmggKGN1cnJlbnRfZnVuY3Rpb25faGFzX25vbmxvY2FsX2xhYmVsLAoJY3VycmVudF9mdW5jdGlvbl9oYXNfbm9ubG9jYWxfZ290bywgY3VycmVudF9mdW5jdGlvbl9pc190aHVuaywKCWN1cnJlbnRfZnVuY3Rpb25faGFzX2NvbXB1dGVkX2p1bXApOiBEZWxldGUgZGVjbGFyYXRpb25zLgoJKiBmbG93LmMgKGZvcmNlZF9sYWJlbHMpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkqIGZ1bmN0aW9uLmMgKGN1cnJlbnRfZnVuY3Rpb25fcG9wc19hcmdzLAoJY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX3N0cnVjdCwgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX3BjY19zdHJ1Y3QsCgljdXJyZW50X2Z1bmN0aW9uX25lZWRzX2NvbnRleHQsIGN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfc2V0am1wLAoJY3VycmVudF9mdW5jdGlvbl9jYWxsc19sb25nam1wLCBjdXJyZW50X2Z1bmN0aW9uX2hhc19ub25sb2NhbF9sYWJlbCwKCWN1cnJlbnRfZnVuY3Rpb25faGFzX25vbmxvY2FsX2dvdG8sIGN1cnJlbnRfZnVuY3Rpb25faXNfdGh1bmssCgljdXJyZW50X2Z1bmN0aW9uX2hhc19jb21wdXRlZF9qdW1wLCBjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2FsbG9jYSwKCWN1cnJlbnRfZnVuY3Rpb25fY29udGFpbnNfZnVuY3Rpb25zLCBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfcG9pbnRlciwKCWN1cnJlbnRfZnVuY3Rpb25fZXBpbG9ndWVfZGVsYXlfbGlzdCwgY3VycmVudF9mdW5jdGlvbl9hcmdzX3NpemUsCgljdXJyZW50X2Z1bmN0aW9uX3ByZXRlbmRfYXJnc19zaXplLCBjdXJyZW50X2Z1bmN0aW9uX2FyZ19vZmZzZXRfcnR4LAoJY3VycmVudF9mdW5jdGlvbl9vdXRnb2luZ19hcmdzX3NpemUsIGN1cnJlbnRfZnVuY3Rpb25fdmFyYXJncywKCWN1cnJlbnRfZnVuY3Rpb25fc3RkYXJnLCBjdXJyZW50X2Z1bmN0aW9uX2FyZ3NfaW5mbywgY2xlYW51cF9sYWJlbCwKCWN1cnJlbnRfZnVuY3Rpb25fbmFtZSwgY3VycmVudF9mdW5jdGlvbl91c2VzX2NvbnN0X3Bvb2wsCgljdXJyZW50X2Z1bmN0aW9uX2luc3RydW1lbnRfZW50cnlfZXhpdCwgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5fcnR4LAoJY3VycmVudF9mdW5jdGlvbl91c2VzX3BpY19vZmZzZXRfdGFibGUsIG5vbmxvY2FsX2xhYmVscywKCWN1cnJlbnRfZnVuY3Rpb25faW50ZXJuYWxfYXJnX3BvaW50ZXIsIGN1cnJlbnRfZnVuY3Rpb25fY2Fubm90X2lubGluZSwKCWN1cnJlbnRfZnVuY3Rpb25fY2hlY2tfbWVtb3J5X3VzYWdlLCBmdW5jdGlvbl9jYWxsX2NvdW50LAoJbm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3RzLCBub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzLAoJbm9ubG9jYWxfZ290b19zdGFja19sZXZlbCwgcmV0dXJuX2xhYmVsLCBzYXZlX2V4cHJfcmVncywKCXN0YWNrX3Nsb3RfbGlzdCwgcnRsX2V4cHJfY2hhaW4sIHRhaWxfcmVjdXJzaW9uX2xhYmVsLCB0ZW1wX3Nsb3RzLAoJdGFpbF9yZWN1cnNpb25fcmVlbnRyeSwgYXJnX3BvaW50ZXJfc2F2ZV9hcmVhLCBmcmFtZV9vZmZzZXQsCgljb250ZXh0X2Rpc3BsYXksIHRyYW1wb2xpbmVfbGlzdCwgcGFybV9iaXJ0aF9pbnNuLCBpbnZhbGlkX3N0YWNrX3Nsb3QsCglsYXN0X3Bhcm1faW5zbiwgbWF4X3Bhcm1fcmVnLCBwYXJtX3JlZ19zdGFja19sb2MsIHNlcXVlbmNlX3J0bF9leHByLAoJdGVtcF9zbG90X2xldmVsLCB2YXJfdGVtcF9zbG90X2xldmVsLCB0YXJnZXRfdGVtcF9zbG90X2xldmVsKToKCURlbGV0ZSB2YXJpYWJsZXMuCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvKTogRG9uJ3Qgc2F2ZSB0aGVtLiAgRG9uJ3QgY2FsbAoJc2F2ZV9zdG9yYWdlX3N0YXR1cywgc2F2ZV9lbWl0X3N0YXR1cyBvciBzYXZlX2V4cHJfc3RhdHVzLgoJKHBvcF9mdW5jdGlvbl9jb250ZXh0X2Zyb20pOiBEb24ndCByZXN0b3JlIHRoZW0uICBEb24ndCBjYWxsCglyZXN0b3JlX3N0b3JhZ2Vfc3RhdHVzIG9yIHJlc3RvcmVfZXhwcl9zdGF0dXMuCgkoZ2V0X2Z1bmNfZnJhbWVfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KCShnZXRfZnJhbWVfc2l6ZSk6IFVzZSBpdC4KCShhc3NpZ25fb3V0ZXJfc3RhY2tfbG9jYWwpOiBSZWZsZWN0IHNvbWUgbWVtYmVyIG5hbWUgY2hhbmdlcyBpbiBzdHJ1Y3QKCWZ1bmN0aW9uLgoJKHB1dF9yZWdfaW50b19zdGFjayk6IExpa2V3aXNlLgoJKGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlKTogc2VxdWVuY2VfcnRsX2V4cHIgd2FzIHJlbmFtZWQgdG8KCXNlcV9ydGxfZXhwci4KCShmaXh1cF92YXJfcmVmcyk6IExpa2V3aXNlLgoJKGZpeF9sZXhpY2FsX2FkZHIpOiBMaWtld2lzZS4KCSh0cmFtcG9saW5lX2FkZHJlc3MpOiBMaWtld2lzZS4KCShwcmVwYXJlX2Z1bmN0aW9uX3N0YXJ0KTogQ2xlYXIgZmllbGQgaW5saW5hYmxlIG9mIGN1cnJlbnRfZnVuY3Rpb24uCgkoaW5pdF9mdW5jdGlvbl9mb3JfY29tcGlsYXRpb24pOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX2R1bW15X2Z1bmN0aW9uX2VuZCk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfZnVuY3Rpb25fZW5kKTogQ2FsbCBmaW5pc2hfZXhwcl9mb3JfZnVuY3Rpb24uCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBlbWl0X3N0YXR1cyk6IE5ldzsgZmllbGRzIG1vdmVkIGhlcmUgZnJvbSBzdHJ1Y3QKCWZ1bmN0aW9uIGFuZCBmcm9tIGdsb2JhbCB2YXJpYWJsZXMuICBBZGQgYWNjZXNzb3IgbWFjcm9zIGZvciBzb21lIG9mCgl0aGUgZmllbGRzLgoJKHN0cnVjdCBleHByX3N0YXR1cyk6IExpa2V3aXNlLgoJKFJFR05PX1BPSU5URVJfQUxJR04sIFJFR05PX1BPSU5URVJfRkxBRyk6IE1vdmVkIGhlcmUgZnJvbSByZWdzLmguCgkoc3RydWN0IGZ1bmN0aW9uKTogQWRkIGZpZWxkcyBleHByIGFuZCBlbWl0LCBpbmxpbmFibGUsIGlubF9lbWl0LAoJb3JpZ2luYWxfYXJnX3ZlY3Rvciwgb3JpZ2luYWxfZGVjbF9pbml0aWFsLCBpbmxfbGFzdF9wYXJtX2luc24sCglpbmxfbWF4X2xhYmVsX251bS4gIEFkZCBtYW55IGNvbW1lbnRzLgoJQWRkIGFjY2Vzc29yIG1hY3JvcyBmb3IgYWxsIGVsdHMgb2Ygc3RydWN0IGZ1bmN0aW9uIHRoYXQgbm8gbG9uZ2VyCgloYXZlIGEgZ2xvYmFsIHZhcmlhYmxlLgoJKGNsZWFudXBfbGFiZWwsIHJldHVybl9sYWJlbCwgZnJhbWVfb2Zmc2V0LCB0YWlsX3JlY3Vyc2lvbl9sYWJlbCwKCXRhaWxfcmVjdXJzaW9uX3JlZW50cnksIGFyZ19wb2ludGVyX3NhdmVfYXJlYSwgcnRsX2V4cHJfY2hhaW4sCglzdGFja19zbG90X2xpc3QpOiBEZWxldGUgZGVjbGFyYXRpb25zLgoJKGdldF9mdW5jX2ZyYW1lX3NpemUpOiBEZWNsYXJlLgoJKHNhdmVfZXhwcl9zdGF0dXMsIHJlc3RvcmVfZXhwcl9zdGF0dXMsIHNhdmVfZW1pdF9zdGF0dXMsCglzYXZlX3N0b3JhZ2Vfc3RhdHVzLCByZXN0b3JlX3N0b3JhZ2Vfc3RhdHVzKTogRGVsZXRlIGRlY2xhcmF0aW9ucy4KCShpbml0X3ZpcnR1YWxfcmVncyk6IERlY2xhcmUuCgkqIG91dHB1dC5oIChjdXJyZW50X2Z1bmN0aW9uX3BvcHNfYXJncywKCWN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19zdHJ1Y3QsIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19wY2Nfc3RydWN0LAoJY3VycmVudF9mdW5jdGlvbl9uZWVkc19jb250ZXh0LCBjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX3NldGptcCwKCWN1cnJlbnRfZnVuY3Rpb25fY2FsbHNfbG9uZ2ptcCwgY3VycmVudF9mdW5jdGlvbl9jYWxsc19hbGxvY2EsCgljdXJyZW50X2Z1bmN0aW9uX2hhc19ub25sb2NhbF9sYWJlbCwgY3VycmVudF9mdW5jdGlvbl92YXJhcmdzLAoJY3VycmVudF9mdW5jdGlvbl9oYXNfY29tcHV0ZWRfanVtcCwgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX3BvaW50ZXIsCgljdXJyZW50X2Z1bmN0aW9uX2NvbnRhaW5zX2Z1bmN0aW9ucywgY3VycmVudF9mdW5jdGlvbl9hcmdzX3NpemUsCgljdXJyZW50X2Z1bmN0aW9uX3ByZXRlbmRfYXJnc19zaXplLCBjdXJyZW50X2Z1bmN0aW9uX3N0ZGFyZywKCWN1cnJlbnRfZnVuY3Rpb25fb3V0Z29pbmdfYXJnc19zaXplLCBjdXJyZW50X2Z1bmN0aW9uX2FyZ3NfaW5mbywKCWN1cnJlbnRfZnVuY3Rpb25fbmFtZSwgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5fcnR4LAoJY3VycmVudF9mdW5jdGlvbl9lcGlsb2d1ZV9kZWxheV9saXN0LAoJY3VycmVudF9mdW5jdGlvbl91c2VzX2NvbnN0X3Bvb2wsIGN1cnJlbnRfZnVuY3Rpb25fY2Fubm90X2lubGluZSk6CglEZWxldGUgZGVjbGFyYXRpb25zLgoJKiByZWdzLmggKHJlZ19ydHhfbm8sIHJlZ25vX3BvaW50ZXJfZmxhZywgcmVnbm9fcG9pbnRlcl9mbGFnX2xlbmd0aCwKCXJlZ25vX3JlZ19ydHgpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkoUkVHTk9fUE9JTlRFUl9GTEFHKTogRGVsZXRlIG1hY3JvLgoJKiBzdG10LmMgKGV4cGFuZF9nb3RvKTogQ2hhbmdlcyB0byByZWZsZWN0IHRoYXQgc29tZSBmaWVsZHMgaW4gc3RydWN0CglmdW5jdGlvbiB3ZXJlIHJlbmFtZWQuCgkqIHN0b3ItbGF5b3V0LmMgKHNhdmVfc3RvcmFnZV9zdGF0dXMsIHJlc3RvcmVfc3RvcmFnZV9zdGF0dXMpOiBEZWxldGUKCWZ1bmN0aW9ucy4KCSogdG9wbGV2LmM6IEluY2x1ZGUgImZ1bmN0aW9uLmgiLgoJKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShjb21waWxlX2ZpbGUpOiBDYWxsIGluaXRfZHVtbXlfZnVuY3Rpb25fc3RhcnQgYW5kCglleHBhbmRfZHVtbXlfZnVuY3Rpb25fZW5kIGFyb3VuZCBzb21lIGluaXRpYWxpemF0aW9ucyB0aGF0IG5lZWQgdG8KCWVtaXQgcnRsLgoJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBVc2UgREVDTF9TQVZFRF9JTlNOUyBwcm9wZXJseS4KCUNhbGwgaW5pdF9mdW5jdGlvbl9mb3JfY29tcGlsYXRpb24uCgkqIHVucm9sbC5jOiBJbmNsdWRlICJmdW5jdGlvbi5oIgoJKHVucm9sbF9sb29wKTogQWNjZXNzIHJlZ25vX3BvaW50ZXJfKiB2YXJpYWJsZXMgdGhyb3VnaAoJY3VycmVudF9mdW5jdGlvbi4KCgkqIHRyZWUuaCAoc3RydWN0IHRyZWVfZGVjbCk6IEFkZCBlbHQgZiB0byBzYXZlZF9pbnNucyBtZW1iZXIuCgkoREVDTF9TQVZFRF9JTlNOUyk6IHVzZSBpdC4KCShleHBhbmRfZHVtbXlfZnVuY3Rpb25fZW5kKTogRGVjbGFyZS4KCShpbml0X2Z1bmN0aW9uX2Zvcl9jb21waWxhdGlvbik6IERlY2xhcmUuCgkqIGNhbGxzLmMgKGNhbGxzX2Z1bmN0aW9uXzEpOiBDaGFuZ2UgdXNlIG9mIERFQ0xfU0FWRURfSU5TTlMgbm93Cgl0aGF0IGl0J3Mgbm8gbG9uZ2VyIGFuIElOTElORV9IRUFERVIuCgkoZXhwYW5kX2NhbGwpOiBMaWtld2lzZS4KCSogaW50ZWdyYXRlLmMgKGZpbmlzaF9pbmxpbmUpOiBEZWxldGUgZnVuY3Rpb24uCgkobWF4X3Bhcm1fcmVnLCBwYXJtX3JlZ19zdGFja19sb2MpOiBEZWxldGUgZGVjbGFyYXRpb25zLgoJKGluaXRpYWxpemVfZm9yX2lubGluZSk6IERlbGV0ZSBtaW5fbGFiZWxubywgbWF4X2xhYmVsbm8gYW5kIG1heF9yZWcKCWFyZ3MuICBEb24ndCBnZW5lcmF0ZSBhbiBJTkxJTkVfSEVBREVSIHJ0eCwganVzdCByZXR1cm4gdGhlIGFyZwoJdmVjdG9yLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShzYXZlX2Zvcl9pbmxpbmVfY29weWluZyk6ICBDcmVhdGUgYSBkdXBsaWNhdGUgc3RydWN0IGVtaXRfc3RhdHVzIHRvCglob2xkIHRoZSBlbWl0IHN0YXRlIGZvciBjb21waWxpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24uICBVc2UgdGhpcyBhbmQKCXRoZSBvdGhlciBuZXcgZmllbGRzIGluIHN0cnVjdCBmdW5jdGlvbiB0aGF0IGFyZSBmb3IgaW50ZWdyYXRpb24KCWluc3RlYWQgb2YgYW4gSU5MSU5FX0hFQURFUi4KCVVzZSBtZW1jcHkgaW5zdGVhZCBvZiBiY29weS4KCVN0b3JlIHRoZSBjdXJyZW50IHN0cnVjdCBmdW5jdGlvbiBpbiBERUNMX1NBVkVEX0lOU05TIG9mIGZuZGVjbC4KCShzYXZlX2Zvcl9pbmxpbmVfbm9jb3B5KTogU2ltaWxhciBjaGFuZ2VzLCBleGNlcHQgbm8gbmV3IGVtaXRfc3RhdHVzCglpcyBuZWVkZWQgaGVyZS4KCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogR2V0IGluZm9ybWF0aW9uIGZyb20gZnVuY3Rpb24gc3RydWN0dXJlLAoJbm90IGZyb20gYW4gaW5saW5lIGhlYWRlciBydHguCgkob3V0cHV0X2lubGluZV9mdW5jdGlvbik6IExvc2UgY29kZSB0byBleHRyYWN0IHRoZSBuZWNlc3NhcnkKCWluZm9ybWF0aW9uIGZyb20gYW4gaW5saW5lIGhlYWRlcjsgc2ltcGx5IHB1dCBiYWNrIHRoZSBmdW5jdGlvbgoJc3RydWN0dXJlIGludG8gY3VycmVudF9mdW5jdGlvbi4gIENsZWFyIGl0cyBpbmxpbmFibGUgZWx0LgoJKiBydGwuZGVmIChJTkxJTkVfSEVBREVSKTogRGVsZXRlLgoJKiBydGwuaDogRGVsZXRlIGFsbCBhY2Nlc3NvcnMgZm9yIGFuIElOTElORV9IRUFERVIuCgkoZ2VuX2lubGluZV9oZWFkZXJfcnR4KTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKHJlZ25vX3JlZ19ydHgsIHJlZ25vX3BvaW50ZXJfYWxpZ24sIG5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMpOgoJRGVsZXRlIGRlY2xhcmF0aW9ucy4KCShSRUdOT19QT0lOVEVSX0FMSUdOKTogRGVsZXRlLgoJKGNsZWFyX2VtaXRfY2FjaGVzKTogRGVjbGFyZS4KCShzZXRfbmV3X2xhc3RfbGFiZWxfbnVtKTogRGVjbGFyZS4KCk1vbiBBdWcgIDkgMDE6NTI6MjQgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlKTogUHJpbnQgYmFzZSBmb3IgT0ZGU0VUX1RZUEVzLgoKCSogZXhjZXB0LmMgKGV4cGFuZF9laF9yZWdpb25fc3RhcnRfZm9yX2RlY2wpOiBBbHdheXMgc3RhcnQgYSBuZXcgYmxvY2suCgkqIHN0bXQuYyAoaXNfZWhfcmVnaW9uKTogTWFrZSBzdXJlIGN1cnJlbnRfZnVuY3Rpb24gaXMgcHJlc2VudCwgdG9vLgoKTW9uIEF1ZyAgOSAwMToxNToyNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5oIChIQVJEX1JFR05PX01PREVfT0spOiBDb3JyZWN0bHkgaGFuZGxlIEZQcmVncywgZXZlbiB3aGVuCglmb3IgNjRiaXQgUEEgdGFyZ2V0cy4KCgkqIHBhLmggKFNFTEVDVF9TRUNUSU9OKTogRGVmaW5lLgoJKiBzb20uaCAoU0VMRUNUX1NFQ1RJT04pOiBEZWxldGUuCgpTdW4gQXVnICA4IDE1OjEzOjIwIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFsaWFzLmMgKGluaXRfYWxpYXNfYW5hbHlzaXMpOiBXcmFwIGNhbGwgdG8KCWBwcm9sb2d1ZV9lcGlsb2d1ZV9jb250YWlucycgd2l0aGluIEhBVkVfcHJvbG9ndWV8fEhBVkVfZXBpbG9ndWUuCgoxOTk5LTA4LTA3ICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmKGlyaXhfYXNtX2Fwb3N0cm9waGUpOiAgSVJJWCA1LjIncwoJPHN5cy9hc20uaD4gY29udGFpbnMgYW4gYXNtIGNvbW1lbnQgd2l0aCBhbiBhcG9zdHJvcGhlCgkqIGZpeGluYy9pbmNsaGFjay5zaDogIHJlZ2VuCgkqIGZpeGluYy9maXhpbmNsLng6ICByZWdlbgoKU2F0IEF1ZyAgNyAxOTozNzowNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoaW5pdF9mdW5jdGlvbl9zdGFydCk6IENsZWFyIHByb2xvZ3VlICYgZXBpbG9ndWUuCgkocHJvbG9ndWVfZXBpbG9ndWVfY29udGFpbnMpOiBOZXcgZnVuY3Rpb24uCgkqIGFsaWFzLmMgKGluaXRfYWxpYXNfYW5hbHlzaXMpOiBVc2UgaXQuCgkqIHJ0bC5oIChwcm9sb2d1ZV9lcGlsb2d1ZV9jb250YWlucyk6IERlY2xhcmUgaXQuCgpTYXQgQXVnICA3IDE5OjMyOjE2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBqdW1wLmMgKG9ubHlqdW1wX3ApOiBOZXcgZnVuY3Rpb24uCgkqIHJ0bC5oOiBEZWNsYXJlIGl0LgoJKiBmbG93LmMgKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBVc2Ugb25seWp1bXBfcCBpbnN0ZWFkCglvZiBjb25kanVtcF9wIGluIGNhbGxpbmcgdGlkeV9mYWxsdGhydV9lZGdlIGFuZCBtZXJnZV9ibG9ja3MuCgpTYXQgQXVnICA3IDE3OjA5OjM2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnbG9iYWwuYyAoYnVpbGRfaW5zbl9jaGFpbik6IFVzZSBFWEVDVVRFX0lGX1NFVF9JTl9SRUdfU0VUCgl0byBpbnZlcnQgbG9vcHMuICBTaW1wbGlmeSBibG9jayBzY2FubmluZy4KClNhdCBBdWcgIDcgMDI6MTE6MTMgMTk5OSAgQmVybmQgU2NobWlkdCA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGdjc2UuYyAoaGFzaF9zY2FuX3NldCk6IFRyZWF0IFNZTUJPTF9SRUZzIGxpa2UgQ09OU1RfSU5Ucy4KCShjcHJvcF9pbnNuKTogVHJlYXQgU1lNQk9MX1JFRnMgbGlrZSBDT05TVF9JTlRzLgoKMTk5OS0wOC0wNyAgSm9uYXRoYW4gTGFybW91ciAgPGpsYXJtb3VyQGN5Z251cy5jby51az4KCgkqIGNvbmZpZy9zcGFyYy9saXRlZWxmLmg6IE5ldyBmaWxlIHRvIHN1cHBvcnQgc3BhcmNsaXRlLWVsZiB0YXJnZXQKCSogY29uZmlnL3NwYXJjL3Qtc3A4Nng6IE5ldyBmaWxlIHRvIHN1cHBvcnQgc3BhcmM4NnggdGFyZ2V0cwoJKiBjb25maWcvc3BhcmMvc3A4NngtYW91dC5oOiBOZXcgZmlsZSB0byBzdXBwb3J0IHNwYXJjODZ4LWFvdXQgdGFyZ2V0CgkqIGNvbmZpZy9zcGFyYy9zcDg2eC1lbGYuaDogTmV3IGZpbGUgdG8gc3VwcG9ydCBzcGFyYzg2eC1lbGYgdGFyZ2V0CgkqIGNvbmZpZ3VyZS5pbjogU3VwcG9ydCBhYm92ZSB0YXJnZXQgdHJpcGxldHMKCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZAoKU2F0IEF1ZyAgNyAwMTozOToyNyAxOTk5ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIGZpeGluYy9zZXJ2ZXIuYyAoc2VydmVyX3NldHVwKTogRG8gbm90IHByZWZpeCBmdW5jdGlvbiB1c2VkIGFzCglwYXJhbWV0ZXIgd2l0aCBgJicuCgpTYXQgQXVnICA3IDAwOjIxOjIwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAobW92aGkgYW5kIG1vdnFpIHBhdHRlcm5zKTogQ29ycmVjdCBwcmVkaWNhdGUgZm9yICFCV1guCglSZW1vdmUgZnAgcmVnIGFsdGVybmF0aXZlcy4KClNhdCBBdWcgIDcgMDA6MDY6NTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpaW4gKFRBUk9VVE9QVFMpOiBLaWxsLgoJKGluc3RhbGwtaGVhZGVycy10YXIpOiBVc2UgInhwZiIgZm9yIHRhciBoZWFkZXJmaWxlIGV4dHJhY3Rpb24KCSogaTM3MC94LW9lIChUQVJPVVRPUFRTKTogRGVsZXRlLgoJKiBtNjhrL3gtYXBvbGxvNjggKFRBUk9VVE9QVFMpOiBEZWxldGUuCgkqIG02OGsveC1ocDMyMCAoVEFST1VUT1BUUyk6IERlbGV0ZS4KCSogbTY4ay94LWhwMzIwZyAoVEFST1VUT1BUUyk6IERlbGV0ZS4KCSogZ2NjLnRleGk6IFVwZGF0ZSBidWcgcmVwb3J0aW5nIHRleHQuCgoxOTk5LTA4LTYgSGVybWFuIEEuSi4gdGVuIEJydWdnZSA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIHJlZy1zdGFjay5jIChjaGFuZ2Vfc3RhY2spIEZpeGVkIHByb2JsZW0gd2l0aCBuZWdhdGl2ZSBhcnJheSBpbmRleC4KCkZyaSBBdWcgIDYgMjM6MDg6NDQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZXh0ZW5kLnRleGksIGluc3RhbGwudGV4aTogRml4IHNwZWxsaW5nIG1pc3Rha2VzLgoKCSogTWFrZWZpbGUuaW4gKFBSRU1BREVfQVRUUlRBQl9NRCwgUFJFTUFERV9BVFRSVEFCKTogRGVsZXRlLgoJKHMtYXR0cnRhYik7IE5vIGxvbmdlciB0cnkgdG8gdXNlIHByZS1tYWRlIGluc24tYXR0cnRhYiBmaWxlLgoJKiBtaXBzL3QtYnNkOiBEZWxldGUgcmVmZXJlbmNlcyB0byBvYnNvbGV0ZSBQUkVNQURFX0FUVFJUQUIgYW5kCglQUkVNQURFX0FUVFJUQUJfTUQuCgkqIG1pcHMvdC1lY29mZjogTGlrZXdpc2UuCgkqIG1pcHMvdC1lbGY6IExpa2V3aXNlLgoJKiBtaXBzL3QtbWlwczogTGlrZXdpc2UuCgkqIG1pcHMvdC1vc2Zyb3NlOiBMaWtld2lzZS4KCSogbWlwcy90LXIzOTAwOiBMaWtld2lzZS4KCSogbWlwcy90LXN2cjM6IExpa2V3aXNlLgoJKiBtaXBzL3Qtc3ZyNDogTGlrZXdpc2UuCgkqIG1pcHMvdC11bHRyaXg6IExpa2V3aXNlLgoKCSogZ2NjLnRleGk6IERvY3VtZW50IHJlY29tbWVuZCBtZWFucyB0byBwcm92aWRlIHNvZnR3YXJlIGZsb2F0aW5nCglwb2ludCBsaWJyYXJpZXMgaW4gbGliZ2NjLmEKCjE5OTktMDgtMDYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogV2UgY2FuIGhhdmUgYSBudW1iZXIgd2l0aCBubyBkaWdpdHMuCgpGcmkgQXVnICA2IDE2OjUzOjU1IEVEVCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBqdW1wLmMgKGRlbGV0ZV9wcmlvcl9jb21wdXRhdGlvbik6IE5ldyBmdW5jdGlvbiwgYnJva2VuCglvdXQgb2YgZGVsZXRlX2NvbXB1dGF0aW9uLiAgQ2hlY2sgZm9yIHNpZGUgZWZmZWN0cyB3aXRoCglzaWRlX2VmZmVjdHNfcCBpbnN0ZWFkIG9mIEZJTkRfUkVHX0lOQ19OT1RFLiAgSGFuZGxlCgltdWx0aS13b3JkIGhhcmQgcmVnaXN0ZXJzLgoJKGRlbGV0ZV9jb21wdXRhdGlvbik6IFVzZSBpdC4gIENoZWNrIGZvciBzaWRlIGVmZmVjdHMgd2l0aAoJc2lkZV9lZmZlY3RzX3AgaW5zdGVhZCBvZiBGSU5EX1JFR19JTkNfTk9URS4gIFN5bnRoZXNpemUgYQoJbWlzc2luZyBSRUdfREVBRCBub3RlIGZvciBhIHJlZ2lzdGVyIHdoaWNoIGlzIGJvdGggc2V0IGFuZAoJdXNlZCBieSBhbiBpbnNuLgoKRnJpIEF1ZyAgNiAxMTowNToyOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBlbGYuaCAoVEVYVF9TUEFDRV9QLCBGVU5DVElPTl9OQU1FX1ApOiBEZWxldGUuCgkoQVNNX0dMT0JBTElaRV9MQUJFTCwgQVNNX09VVFBVVF9JTlQsIEFTTV9PVVRQVVRfRE9VQkxFX0lOVCk6IExpa2V3aXNlLgoJKEFTTV9GSUxFX1NUQVJUKTogSW1wb3J0IF9tY291bnQgd2l0aCB0aGUgcmlnaHQgdHlwZS4KCShBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogRGVmaW5lLgoJKEFTTV9PVVRQVVRfRVhURVJOQUwsIEFTTV9PVVRQVVRfRVhURVJOQUxfTElCQ0FMTCk6IERlZmluZS4KCSogcGEuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogQWx3YXlzIGVtaXQgdGhlIGZ1bmN0aW9uJ3MgbGFiZWwKCWhlcmUuCgkqIHBhLmggKFRFWFRfU1BBQ0VfUCk6IERlZmluZS4KCShGVU5DVElPTl9OQU1FX1AsIEVOQ09ERV9TRUNUSU9OX0lORk8sIFNUUklQX05BTUVfRU5DT0RJTkcpOiBMaWtld2lzZS4KCShBU01fT1VUUFVUX0lOVCwgQVNNX09VVFBVVF9ET1VCTEVfSU5ULCBBU01fR0xPQkFMSVpFX0xBQkVMKTogTGlrZXdpc2UuCgkqIHNvbS5oIChURVhUX1NQQUNFX1ApOiBEZWxldGUuCgkoRlVOQ1RJT05fTkFNRV9QLCBFTkNPREVfU0VDVElPTl9JTkZPLCBTVFJJUF9OQU1FX0VOQ09ESU5HKTogTGlrZXdpc2UuCgkoQVNNX0dMT0JBTElaRV9MQUJFTCwgQVNNX09VVFBVVF9JTlQpOiBMaWtld2lzZS4KClRodSBBdWcgIDUgMTk6Mjk6MzkgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZXhwci5jIChlbWl0X2dyb3VwX2xvYWQpOiBBbGxvdyBzcmMgdG8gYmUgYSBDT05DQVQuCgpUaHUgQXVnICA1IDIyOjI3OjE1IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNvbmZpZy9zaC9saWIxZnVuY3MuYXNtIChfX19tb3ZzdHJTSTApOiBDaGFuZ2Ugb3IgcjAscjAscjAgdG8gbm9wLgoJKF9fX211bHNpMyk6IFVzZSAnIScgY29tbWVudCBjaGFyYWN0ZXIuCgpUaHUgQXVnICA1IDEzOjM0OjE0IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChtYXliZV9maXhfc3RhY2tfYXNtcyk6IEFsc28gZGVjbGFyZSBQIGFzICJjb25zdCBjaGFyICoiLgoKVGh1IEF1ZyAgNSAwMjo0MDo0MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY2MuYzogVXBkYXRlIFVSTHMgYW5kIG1haWwgYWRkcmVzc2VzLgoJKiBnY2MudGV4aTogTGlrZXdpc2UuCgpUaHUgQXVnICA1IDAxOjE0OjEzIDE5OTkgIERhbmllbCBKYWNvYm93aXR6IDxkcm93QGZhbHNlLm9yZz4KCgkqIHJzNjAwMC5jIChjdXJyZW50X2ZpbGVfZnVuY3Rpb25fb3BlcmFuZCk6IFJldHVybiB6ZXJvIGZvcgoJd2VhayBmdW5jdGlvbnMuCgkocnM2MDAwX2VuY29kZV9zZWN0aW9uX2luZm8pOiBEbyBub3Qgc2V0IFNZTUJPTF9SRUZfRkxBRyBmb3IKCXdlYWsgc3ltYm9scy4KCSogcnM2MDAwLmggKEVOQ09ERV9TRUNUSU9OX05JRk8pOiBEbyBub3Qgc2V0IFNZTUJPTF9SRUZfRkxBRwoJZm9yIHdlYWsgc3ltYm9scy4KClRodSBBdWcgIDUgMDA6NTY6MzAgMTk5OSAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BjeWdudXMuY29tPgoKCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogRm9yIEFCSV9WNC9BQklfU09MQVJJUyAtZnBpYywgYWx3YXlzCglhbGxvY2F0ZSBzcGFjZSBpbiB0aGUgc3RhY2sgZnJhbWUgZm9yIHRoZSBQSUMgcmVnaXN0ZXIuCgpUaHUgQXVnICA1IDAwOjIwOjQ3IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsubWQgKHhvcmRpMywgYW5kZGkzKTogVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBhdmFpbGFibGUgb24KCXRoZSBjb2xkZmlyZS4KCldlZCBBdWcgIDQgMjM6Mzk6MjAgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHJlYWwuYyAoR0VUX1JFQUwpOiBEb24ndCB2aW9sYXRlIEFOU0kvSVNPIGFsaWFzaW5nIHJ1bGVzLgoJKFBVVF9SRUFMKTogTGlrZXdpc2UuCgpXZWQgQXVnICA0IDIwOjQ1OjA0IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGZpbmFsLmMgKHNob3J0ZW5fYnJhbmNoZXMpOiBEb24ndCBhZGQgYW4gYWxpZ25tZW50IGZvciBsb29wcwoJdGhhdCBoYXZlIG5vIGxhYmVsIGluc2lkZS4KCldlZCBBdWcgIDQgMTY6Mzk6MjQgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYnVpbHRpbnMuYyAoZXhwYW5kX2J1aWx0aW5fbWVtY21wLCBleHBhbmRfYnVpbHRpbl9zdHJjbXApOiBXcmFwCglwcm90b3R5cGVzIGluIG1hY3JvIEhBVkVfY21wc3Ryc2kuCgoJKiBjcHBsaWIuYyAoY3BwX2dldF90b2tlbik6IFJlbW92ZSB1bnVzZWQgbGFiZWwgYG9wMycuCgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCglgYml0c19wZXJfd29yZCcuCgoJKiBydGwuYyAoc2hhbGxvd19jb3B5X3J0eCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGZvcm1hdF9wdHInLgoKCSogdHJlZS5jIChjaGFpbm9uKTogV3JhcCB2YXJpYWJsZSBgdDInIGluIG1hY3JvIEVOQUJMRV9DSEVDS0lORy4KCldlZCBBdWcgIDQgMTM6Mjk6MjMgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogY3BwaGFzaC5jIChtYWNyb2V4cGFuZCk6IERlbGV0ZSBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBhcmcKCWlzIGNvbmNhdGVuYXRlZCBiZWZvcmUuCgkodW5zYWZlX2NoYXJzKTogQ29ycmVjdCB0ZXN0IGZvciB3aGV0aGVyICsgYW5kIC0gY2FuIGV4dGVuZCBhCgl0b2tlbi4KCgkqIGNwcGluaXQuYyAoY3BwX3N0YXJ0X3JlYWQpOiBEbyBkZXBlbmRlbmNpZXMgZm9yCgktaW5jbHVkZS8taW1hY3JvcyBmaWxlcyBhbHNvLgoKCSogY3BwbGliLmMgKGNwcF9zY2FuX2J1ZmZlcik6IEluIG5vLW91dHB1dCBtb2RlLCBkb24ndCBib3RoZXIKCXRva2VuaXppbmcgbm9uLWRpcmVjdGl2ZSBsaW5lcy4KCShjcHBfZXhwYW5kX3RvX2J1ZmZlcik6IFRlbXBvcmFyaWx5IGRpc2FibGUgbm8tb3V0cHV0IG1vZGUuCgkqIGNwcG1haW4uYzogSW4gbm8tb3V0cHV0IG1vZGUsIGp1c3QgY2FsbCBjcHBfc2Nhbl9idWZmZXIgZm9yCgl0aGUgaW5wdXQgZmlsZS4KCldlZCBBdWcgIDQgMTI6NTM6NDQgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBQTFVTX0VYUFIpOiBGaXggcGFyYWxsZWwgY2FzZSwgdG9vLgoKCSogYy1sZXguYzogU3luYyB3aXRoIEMrKyBmcm9udGVuZC4KCShsaW5lbW9kZSk6IE5ldyB2YXJpYWJsZS4KCShwYXJzZV9mbG9hdCk6IGltYWcsIGNvbnZlcnNpb25fZXJybm8sIGFuZCB0eXBlIGFyZSBvdXRwdXQgb25seS4KCSh5eWxleCk6IEFkanVzdC4gIE1vdmUgaW5pdGlhbCAnLicgY2FzZSBpbnRvIG1haW4gc3dpdGNoLgoJVXNlIGxpbmVtb2RlLgoJKGhhbmRsZV9nZW5lcmljX3ByYWdtYSk6IEp1c3QgZGVhbCB3aXRoIHRva2Vucy4KCShyZWFkZXNjYXBlKTogVXNlIElTWERJR0lUIGFuZCBJU0dSQVBILgoJKiBjLXBhcnNlLmluOiBBZGQgRU5EX09GX0xJTkUgdG9rZW4uCgoJKiBjLWxleC5jIChsYW5nX2luaXQpOiBHZW5lcmFsaXplLgoJKG5leHRjaGFyKTogUmVtb3ZlLiAgUmVwbGFjZSB1c2VzIHdpdGggVU5HRVRDLgoJKHNraXBfd2hpdGVfc3BhY2UpOiBIYW5kbGUgbGluZW1vZGUgaGVyZS4gIE9wdGltaXplIGZvciBjcHBsaWIuCgkoc2tpcF93aGl0ZV9zcGFjZV9vbl9saW5lKTogUmVtb3ZlLgoJKGV4dGVuZF90b2tlbl9idWZmZXJfdG8pOiBOZXcgZm4uCgkoZXh0ZW5kX3Rva2VuX2J1ZmZlcik6IFVzZSBpdC4KCShyZWFkX2xpbmVfbnVtYmVyLCBjaGVja19uZXdsaW5lKTogSnVzdCBkZWFsIHdpdGggdG9rZW5zLgoJKHRva2VuX2dldGNoLCB0b2tlbl9wdXRfYmFjayk6IE5ldyBmbnMuCgkoeXlsZXgpOiBVc2UgdGhlbS4gIE1vcmUgY3BwbGliIG9wdGltaXphdGlvbnMuICBTaW1wbGlmeS4KCldlZCBBdWcgIDQgMTI6NTM6NDQgMTk5OSAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBob2xvZGVjay5jeWdudXMuY29tPgoJCQkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKGluaXRfcGFyc2UpOiBTZXQgY3BwX3Rva2VuIHRvIENQUF9ESVJFQ1RJVkUuCgkoY29uc3VtZV9zdHJpbmcpOiBNYWtlIHRoaXMgc21hcnQgYWJvdXQgVVNFX0NQUExJQi4KCShjaGVja19uZXdsaW5lKTogUmV3cml0ZSB0byBiZSBpbnRlbGxpZ2VudCBhYm91dCBVU0VfQ1BQTElCLgoJKHl5bGV4KTogUmV3cml0ZSB0byBiZSBpbnRlbGxpZ2VudCBhYm91dCBVU0VfQ1BQTElCLgoJQWxzbywgY2xlYW4gdXAgY2FzZXMgd2hlcmUgd2UgcmVkdW5kYW50bHkgc2V0IHRva2VuX2J1ZmZlclswXS4KCShyZWFkX2xpbmVfbnVtYmVyKTogTmV3IGZuLgoJKGlnbm9yZV9lc2NhcGVfZmxhZyk6IE5ldyB2YXJpYWJsZS4KCldlZCBBdWcgIDQgMTM6MTI6MTcgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogYTI5ay90LWEyOWtiYXJlOiBGaXggc29tZSBjb21tZW50cy4KCShMSUIyRlVOQ1NfRVhUUkEpOiBSZW1vdmUgZnAtYml0LmMgYW5kIGRwLWJpdC5jCgkoRlBCSVQsIERQQklUKTogRGVmaW5lLgoJKiBhMjlrL3QtdngyOWs6IExpa2V3aXNlLgoJKiBhcmMvdC1hcmM6IExpa2V3aXNlLgoJKiBhcm0vdC1hcm0tZWxmOiBMaWtld2lzZS4KCSogYXJtL3QtYmFyZTogTGlrZXdpc2UuCgkqIGFybS90LXBlOiBMaWtld2lzZS4KCSogYXJtL3QtcGUtdGh1bWI6IExpa2V3aXNlLgoJKiBhcm0vdC1zZW1pOiBMaWtld2lzZS4KCSogYXJtL3QtdGh1bWI6IExpa2V3aXNlLgoJKiBhcm0vdC10aHVtYi1lbGY6IExpa2V3aXNlLgoJKiBhcm0vdC10aHVtYi1saW51eDogTGlrZXdpc2UuCgkqIGg4MzAwL3QtaDgzMDA6IExpa2V3aXNlLgoJKiBpOTYwL3QtaTk2MDogTGlrZXdpc2UuCgkqIGk5NjAvdC12eHdvcmtzOTYwOiBMaWtld2lzZS4KCSogbTMyci90LW0zMnI6IExpa2V3aXNlLgoJKiBtaXBzL3QtZWNvZmY6IExpa2V3aXNlLgoJKiBtaXBzL3QtZWxmOiBMaWtld2lzZS4KCSogbWlwcy90LXIzOTAwOiBMaWtld2lzZS4KCSogcGEvdC1wcm86IExpa2V3aXNlLgoJKiByczYwMDAvdC1haXg0MzogTGlrZXdpc2UuCgkqIHJzNjAwMC90LWJlb3M6IExpa2V3aXNlLgoJKiByczYwMDAvdC1uZXdhczogTGlrZXdpc2UuCgkqIHJzNjAwMC90LXBwY2NvbW06IExpa2V3aXNlLgoJKiByczYwMDAvdC1yczYwMDA6IExpa2V3aXNlLgoJKiByczYwMDAvdC13aW5udDogTGlrZXdpc2UuCgkqIHJzNjAwMC90LXhuZXdhczogTGlrZXdpc2UuCgkqIHJzNjAwMC90LXhyczYwMDA6IExpa2V3aXNlLgoJKiBzaC90LXNoOiBMaWtld2lzZS4KCSogc3BhcmMvdC1lbGY6IExpa2V3aXNlLgoJKiBzcGFyYy90LXNwYXJjYmFyZTogTGlrZXdpc2UuCgkqIHNwYXJjL3Qtc3BhcmNsaXRlOiBMaWtld2lzZS4KCSogc3BhcmMvdC1zcGxldDogTGlrZXdpc2UuCgkqIHY4NTAvdC12ODUwOiBMaWtld2lzZS4KCSogbW4xMDIwMC90LW1uMTAyMDA6IEZpeCBjb21tZW50cy4KCSogbW4xMDMwMC90LW1uMTAzMDA6IExpa2V3aXNlLgoKCSogcGEubWQgKGRpdnNpMywgdWRpdnNpMywgbW9kc2kzLCB1bW9kc2kzIGV4cGFuZGVycyk6IENsb2JiZXIgYSBuZXcKCWR1bW15IG9wZXJhbmQuICBBbGxvY2F0ZSBhIG5ldyBwc2V1ZG8gZm9yIHRoZSBkdW1teSBvcGVyYW5kLgoJKGRpdnNpMywgdWRpdnNpMywgbW9kaXMzLCB1bW9kc2kzIHBhdHRlcm5zKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKCSogcGEubWQgKG1vdnFpLCBtb3ZoaSBwYXR0ZXJucyk6IERvIG5vdCBleHBvc2UgRlAgcmVncyB0byByZWdjbGFzcy4KCldlZCBBdWcgIDQgMTE6NTM6NTUgMTk5OSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBjb25maWd1cmUuaW46IFJlbW92ZWQgLS1lbmFibGUtamF2YS1nYyBvcHRpb24gYW5kIEpBVkFHQyBzdWJzdC4KCldlZCBBdWcgIDQgMDk6MDY6MTQgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIHJlY29nLmMgKHByZXByb2Nlc19jb25zdHJhaW50cyk6IFplcm8gcmVjb2dfb3BfYWx0IGJlZm9yZQoJcHJvY2Vzc2luZyB0aGUgY29uc3RyYWludHMuCgoJKiBhcm0uYyAodHlwZWRlZiBtaW5pcG9vbF9ub2RlKTogUmVuYW1lZCBmcm9tIHBvb2xfbm9kZS4KCShtaW5pcG9vbF92ZWN0b3IsIG1pbmlwb29sX3NpemUsIG1pbmlwb29sX3ZlY3Rvcl9sYWJlbCk6IFNpbWlsYXJseS4KCShhZGRfbWluaXBvb2xfY29uc3RhbnQpOiBOZXcgZnVuY3Rpb24uCgkoZHVtcF9taW5pcG9vbCk6IE5ldyBmdW5jdGlvbi4KCShmaW5kX2JhcnJpZXIpOiBSZW1vdmUgc3BlY2lhbCBjYXNlIGZvciBnZXR0aW5nIHRoZSBpbnNuIHNpemUgb2YKCWFuIGluc24gdGhhdCByZWZlcmVuY2VzIHRoZSBjb25zdGFudCBwb29sLgoJKG1pbmlwb29sX2ZpeHVwKTogTmV3IHN0cnVjdHVyZS4KCShwdXNoX21pbmlwb29sX2JhcnJpZXIpOiBOZXcgZnVuY3Rpb24uCgkocHVzaF9taW5pcG9vbF9maXgpOiBOZXcgZnVuY3Rpb24uCgkobm90ZV9pbnZhbGlkX2NvbnN0YW50cyk6IE5ldyBmdW5jdGlvbi4KCShhZGRfcG9vbF9jb25zdGFudCwgZHVtcF90YWJsZSwgZml4aXQsIGJyb2tlbl9tb3ZlKTogRGVsZXRlLgoJKGFybV9yZW9yZyk6IFJld3JpdGUgY29kZSB0byBmaXggdXAgdGhlIGNvbnN0YW50IHBvb2wgaW50byBhCglzZXJpZXMgb2YgbWluaS1wb29scyBlbWJlZGRlZCBpbiB0aGUgaW5zbiBzdHJlYW0uCgkoYXJtX291dHB1dF9lcGlsb2d1ZSk6IE5ldyBmdW5jdGlvbiwgbWFkZSBtYWlubHkgZnJvbSB0aGUgYm9keQoJb2Ygb3V0cHV0X2Z1bmNfZXBpbG9ndWUuCgkob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiBNb3ZlIGluc24gZ2VuZXJhdGlvbiBwYXJ0IG9mIGVwaWxvZ3VlIGNvZGUKCXRvIGFybV9vdXRwdXRfZXBpbG9ndWUuCgkqIGFybS5oIChBU01fT1VUUFVUX1NQRUNJQUxfUE9PTF9FTlRSWSk6IERlbGV0ZS4KCSogYXJtLm1kIChwb29sX3JhbmdlKTogTmV3IGF0dHJpYnV0ZS4KCSh6ZXJvX2V4dGVuZHFpZGkyKTogQWRkIGF0dHJpYnV0ZSBwb29sX3JhbmdlLgoJKHplcm9fZXh0ZW5kX2hpc2lfaW5zbiwgbG9hZF9leHRlbmRxaXNpLCBleHRlbmRoaXNpX2luc24sCglleHRlbmRxaWhpX2luc24sIGV4dGVuZHFpc2lfaW5zbiwgbW92ZGksIG1vdnNpX2luc24sIHBpY19sb2FkX2FkZHIsCglwaWNfbG9hZF9hZGRyX2Jhc2VkX2luc24sIG1vdmhpX2luc25fYXJjaDQsIG1vdmhpX2luc25fbGl0dGxlZW5kLAoJbW92aGlfaW5zbl9iaWdlbmQsIGxvYWRoaV9zaV9iaWdlbmQsIG1vdnNmX2hhcmRfaW5zbiwgbW92c2Zfc29mdF9pbnNuLAoJbW92ZGZfaGFyZF9pbnNuLCBtb3ZkZl9zb2Z0X2luc24sIG1vdnhmX2hhcmRfaW5zbik6IExpa2V3aXNlLgoJKGVwaWxvZ3VlKTogTmV3IGV4cGFuZC4KCShlcGlsb2d1ZV9pbnNuKTogTmV3IGluc24uICBDYWxsIGFybV9vdXRwdXRfZXBpbG9ndWUuCgoJKiBhcm0uYyAoYXJtX3Bva2VfZnVuY3Rpb25fbmFtZSk6IFVuZG8gY2hhbmdlIG9mIEp1bHkgMTcuICBUaWR5IHVwLgoJKiBhcm0uaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG1pc3NpbmcgZG9jIHN0cmluZyBmb3IgVEFSR0VUX0RFRkFVTFQuCgpNb24gQXVnICAyIDE5OjE4OjQ0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxpbnV4LmggKEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUCk6IERlZmluZS4KCjE5OTktMDgtMDQgTWFyayBFbGJyZWNodCA8c25vd2JhbGwzQGJpZ2Zvb3QuY29tPgoKCSogY29uZmlnL2kzODYvZGpncHAuaCAgKEJTU19TRUNUSU9OX0FTTV9PUCk6IERlZmluZS4KCldlZCBBdWcgIDQgMDI6MTU6MzIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gPHJ0aEBjeWdudXMuY29tPgoKCSoganVtcC5jIChkZWxldGVfaW5zbik6IERlbGV0ZSB0aGUgYWRkcl92ZWMgd2hlbiBkZWxldGluZyBhIHRhYmxlanVtcC4KCldlZCBBdWcgIDQgMDE6NDg6MDggMTk5OSAgSmltIEtpbmdkb24gIDxodHRwOi8vZGV2ZWxvcGVyLnJlZGhhdC5jb20+CgoJKiBnbG9iYWwuYzogRml4IGNvbW1lbnQuCgpXZWQgQXVnICA0IDAxOjQzOjAxIDE5OTkgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AemVtYnUuY29tPgoKCSogZ2NjLmMgKGFjY2Vzc19jaGVjayk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZmluZF9hX2ZpbGUpOiBVc2UgaXQgd2hlbiBzZWFyY2hpbmcgYSBkaXJlY3RvcnkgbGlzdC4KCSogY29sbGVjdDIuYyAoZmluZF9hX2ZpbGUpOiBEb24ndCBhY2NlcHQgZGlyZWN0b3JpZXMgZm91bmQgd2hlbgoJc2VhcmNoaW5nIGEgZGlyZWN0b3J5IGxpc3QuCgpXZWQgQXVnICA0IDAxOjQwOjQzIDE5OTkgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogdGxpbmsuYyAoc3ltYm9sX2hhc2hfbG9va3VwKTogRG8gbm90IHByZWZpeCBmdW5jdGlvbnMgdXNlZCBhcwoJZnVuY3Rpb24gcGFyYW1ldGVycyB3aXRoIGAmJy4KCShmaWxlX2hhc2hfbG9va3VwLCBkZW1hbmdsZWRfaGFzaF9sb29rdXAsIHRsaW5rX2luaXQpOiBEaXR0by4KCldlZCBBdWcgIDQgMDE6MDg6NDQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzKTogRG8gbm90IGNhbGwgbWVyZ2VfYmxvY2tzCglvciB0aWR5X2ZhbGx0aHJ1X2VkZ2UgaWYgdGhlIGxhc3QgaW5zbiBpbiB0aGUgYmxvY2sgaXMgbm90CglhbiB1bmNvbmRpdGlvbmFsIGp1bXAgb3IgYSBzaW1wbGUgY29uZGl0aW9uYWwganVtcC4KClR1ZSBBdWcgIDMgMjA6MjE6MjAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogTWFrZWZpbGUuaW4gKGMtZGVjbC5vKTogRGVwZW5kcyBvbiBkZWZhdWx0cy5oLgoKVHVlIEF1ZyAgMyAxNDoxNDo1MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5oIChIQVJEX1JFR05PX05SRUdTKTogRlAgcmVnaXN0ZXJzIGFyZSBhbHdheXMgNCBieXRlcyB3aWRlIGZvcgoJUEExLjEgYW5kIGFib3ZlLgoJKENMQVNTX01BWF9OUkVHUyk6IExpa2V3aXNlLgoKVHVlIEF1ZyAgMyAwMzo1MToyMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjc2UuYyAoY3NlX2luc24pOiBGaXggZHVtYiB0aGlua28gaW4gbGFzdCBjaGFuZ2UuCgpUdWUgQXVnICAzIDEwOjM2OjEzIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChtYXliZV9maXhfc3RhY2tfYXNtcyk6IERlY2xhcmUgQ09OU1RSQUlOVFMgYXMKCSJjb25zdCBjaGFyICoiLgoKTW9uIEF1ZyAgMiAyMzo0NTo0NSAxOTk5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBiaXRyYW5nZS5jb20+CgoJKiBkd2FyZjJvdXQuYyAoYWRkX2xvY2F0aW9uX29yX2NvbnN0X3ZhbHVlX2F0dHJpYnV0ZSk6IENvcnJlY3QKCXRlc3QgZm9yIHNpemVzIG9mIHBhc3NlZCBhbmQgZGVjbGFyZWQgcGFyYW1ldGVyIHR5cGVzLgoKVHVlIEF1ZyAgMyAwMDowMzo0MSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmaXhpbmNsdWRlczogRml4IHRoZSByZXR1cm4gdHlwZSBvZiBic2VhcmNoLCBjaGFyKiAtPiB2b2lkKi4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWY6IExpa2V3aXNlLgoKTW9uIEF1ZyAgMiAxODoyOTozMiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogaW52b2tlLnRleGkgKC1mZHVtcC10cmFuc2xhdGlvbi11bml0KTogTmV3IG9wdGlvbi4KCk1vbiBBdWcgIDIgMTc6NTQ6MTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4cHIuaCAoUFJPTU9URV9QUk9UT1RZUEVTKTogTW92ZSAuLi4KCSogZGVmYXVsdHMuaDogLi4uIHRvIGhlcmUuCgkqIGMtZGVjbC5jOiBJbmNsdWRlIGRlZmF1bHRzLmggaW5zdGVhZCBvZiBleHByLmguCgkqIGMtdHlwZWNrLmM6IEluY2x1ZGUgZGVmYXVsdHMuaC4KCk1vbiBBdWcgIDIgMTc6MTA6MjQgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRvcGxldi5oIChlcnJvcmNvdW50KTogRGVjbGFyZS4KCSh3YXJuaW5nY291bnQpOiBMaWtld2lzZS4KCShzb3JyeWNvdW50KTogTGlrZXdpc2UuCgkqIGMtbGV4LmMgKGVycm9yY291bnQpOiBEb24ndCBkZWNsYXJlLgoJKiBkd2FyZjJvdXQuYyAoZXJyb3Jjb3VudCk6IERvbid0IGRlY2xhcmUuCgpNb24gQXVnICAyIDE3OjAyOjA4IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9saWJnbG9zcy5oOiBBZGQgYSBub3RlIGRpc2NvdXJhZ2luZyB1c2Ugd2l0aCBFTEYuCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgdXNlIGxpYmdsb3NzLmggZm9yIEVMRiB0YXJnZXRzLgoJQWx3YXlzIHVzZV9jb2xsZWN0MiBvbiBhLm91dCB0YXJnZXRzLgoKTW9uIEF1ZyAgMiAxNjoyNzo0MiAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIGNhc2UgTFNISUZUUlQpOiBBZGQgZ290byBzaGlmdHJ0LgoJKGZvcmNlX3RvX21vZGUsIGNhc2UgQVNISUZUUlQpOiBBZGQgc2hpZnRydCBsYWJlbC4KClR1ZSBBdWcgIDMgMDA6NDU6MDIgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBXaGVuIGRvaW5nIGJpdi0+Z2l2IGNvbnZlcnNpb24sIHVwZGF0ZQoJcmVnIG5vdGUgb2YgTkVYVC0+aW5zbi4KCjE5OTktMDgtMDIgIEpha3ViIEplbGluZWsgIDxqakB1bHRyYS5saW51eC5jej4KCgkqIHJlYWwuYyAoUFVUX1JFQUwpOiBDbGVhciB1bnVzZWQgYnl0ZXMgaWYgbG9uZyBkb3VibGUgaXMgSUVFRSBxdWFkLgoKMTk5OS0wOC0wMiAgSmFrdWIgSmVsaW5layAgPGpqQHVsdHJhLmxpbnV4LmN6PgoKCSogYy1kZWNsLmMgKGdldF9wYXJtX2luZm8sIHN0b3JlX3Bhcm1fZGVjbHMpOiBDaGFuZ2UgYWxsIHVzZXMgb2YKCVBST01PVEVfUFJPVE9UWVBFUywgc28gdGhhdCBpdCB0ZXN0cyBpdCBhcyBhIEMgZXhwcmVzc2lvbi4KCUVuc3VyZSBleHByLmggaXMgaW5jbHVkZWQuCgkqIGMtdHlwZWNoZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogRGl0dG8uCgoJKiBleHByLmg6IFN1cHBseSBkZWZhdWx0IGZvciBQUk9NT1RFX1BST1RPVFlQRVMgKDApLgoKCSogY29uZmlnL2FyYy9hcmMuaDogRGVmaW5lIFBST01PVEVfUFJPVE9UWVBFUyB0byAxLgoJKiBjb25maWcvY29udmV4L2NvbnZleC5oOiBEaXR0by4KCSogY29uZmlnL2RzcDE2eHgvZHNwMTZ4eC5oOiBEaXR0by4KCSogY29uZmlnL2Z4ODAvZng4MC5oOiBEaXR0by4KCSogY29uZmlnL2dtaWNyby9nbWljcm8uaDogRGl0dG8uCgkqIGNvbmZpZy9pMzcwL2kzNzAuaDogRGl0dG8uCgkqIGNvbmZpZy9pMzg2L2kzODYuaDogRGl0dG8uCgkqIGNvbmZpZy9tMzJyL20zMnIuaDogRGl0dG8uCgkqIGNvbmZpZy9tNjhrL202OGsuaDogRGl0dG8uCgkqIGNvbmZpZy9tODhrL204OGsuaDogRGl0dG8uCgkqIGNvbmZpZy9taXBzL21pcHMuaDogRGl0dG8uCgkqIGNvbmZpZy9wYS9wYS5oOiBEaXR0by4KCSogY29uZmlnL3B5ci9weXIuaDogRGl0dG8uCgkqIGNvbmZpZy90YWhvZS90YWhvZS5oOiBEaXR0by4KCSogY29uZmlnL3dlMzJrL3dlMzJrLmg6IERpdHRvLgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmg6IERlZmluZSBQUk9NT1RFX1BST1RPVFlQRVMKCWJhc2VkIG9uIGFyY2ggc2l6ZS4KCgkqIGNvbmZpZy9pMTc1MGEvaTE3NTBhLmg6IERlZmluZSBQUk9NT1RFX1BST1RPVFlQRVMgdG8gMC4KCgkqIGNvbmZpZy9pODYwL3BhcmFnb24uaDogUmVtb3ZlIFBST01PVEVfUFJPVE9UWVBFUwoJZnJvbSBjb21tZW50LgoKCSogdG0udGV4aTogRG9jdW1lbnQgbmV3IHVzYWdlIG9mIFBST01PVEVfUFJPVE9UWVBFUy4KCjE5OTktMDgtMDIgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtMzJyLmMgKG0zMnJfc2V0dXBfaW5jb21pbmdfdmFyYXJncyk6IFVzZSBnZXRfdmFyYXJnc19hbGlhc19zZXQKCWZvciB0aGUgcmVnaXN0ZXIgc3BpbGwgYmxvY2suCgkobTMycl92YV9hcmcpOiBOZXcuCgkqIG0zMnIuaCAoRVhQQU5EX0JVSUxUSU5fVkFfQVJHKTogTmV3LgoJKEVYUEFORF9CVUlMVElOX1NBVkVSRUdTKTogRGVsZXRlICNpZiAwIGNvZGUuCgoJKiBtMzJyLmggKElOVDhfUCk6IERvbid0IHNob3J0LWN1dCB0ZXN0IHdpdGggKHVuc2lnbmVkKS4KCShJTlQxNl9QLCBDTVBfSU5UMTZfUCwgVUlOVDE2X1ApOiBMaWtld2lzZS4KCShVUFBFUjE2X1AsIFVJTlQyNF9QLCBJTlQzMl9QLCBVSU5UNV9QKTogTGlrZXdpc2UuCgoxOTk5LTA4LTAyICBKYWt1YiBKZWxpbmVrICA8ampAdWx0cmEubGludXguY3o+CgoJKiBjb25maWcvc3BhcmMvbGludXguaDogRGVmaW5lIFdDSEFSX1RZUEUgYXMgImludCIgYW5kIHVuZGVmCglNQVhfV0NIQVJfVFlQRSBkZWZpbmVkIGluIHNwYXJjLmguCgkqIGNvbmZpZy9zcGFyYy9saW51eGFvdXQuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9saW51eDY0Lmg6IExpa2V3aXNlLgoJQWxzbyBkZWZhdWx0IHRvIC1tdmlzIGlmIENQVSBpcyBVbHRyYVNQQVJDLgoKMTk5OS0wOC0wMiAgSmFrdWIgSmVsaW5layAgPGpqQHVsdHJhLmxpbnV4LmN6PgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKEFTTV9ERUNMQVJFX1JFR0lTVEVSX0dMT0JBTCk6IE5ldyBtYWNyby4KCShSVFhfT0tfRk9SX09MTzEwKTogTGlrZXdpc2UuCgkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogSWYgYXNzZW1ibGVyIHN1cHBvcnRzIG9mZnNldGFibGUKCSVsbygpLCBhbGxvdyBpdCBpbiBhZGRyZXNzZXMuLi4KCShQUklOVF9PUEVSQU5EX0FERFJFU1MpOiAuLi4gYW5kIHByaW50IGl0IGFwcHJvcHJpYXRlbHkuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoc2V0aGlfZGlfbWVkbG93X2VtYm1lZGFueV9waWMpOiBzZXRoaSAlbG8oKQoJZG9lcyBub3QgbWFrZSBzZW5zZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2hhcmRfcmVnX3ByaW50ZWQpOiBOZXcgYXJyYXkuCgkoc3BhcmNfb3V0cHV0X3NjcmF0Y2hfcmVnaXN0ZXJzKTogTmV3IGZ1bmN0aW9uLgoJKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwgc3BhcmNfZmxhdF9vdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBVc2UKCWl0LgoJKiB2YXJhc20uYyAobWFrZV9kZWNsX3J0bCk6IFVzZSBBU01fREVDTEFSRV9SRUdJU1RFUl9HTE9CQUwgaWYKCWRlZmluZWQuCgkqIHRtLnRleGkgKEFTTV9ERUNMQVJFX1JFR0lTVEVSX0dMT0JBTCk6IERvY3VtZW50IGl0LgoJKiBjb25maWd1cmUuaW46IEFkZCBjaGVjayBmb3IgLnJlZ2lzdGVyIHBzZXVkby1vcCBzdXBwb3J0IGluIGFzIGFuZAoJY2hlY2sgZm9yIG9mZnNldGFibGUgJWxvKCkuCgkqIGFjY29uZmlnLmg6IEFkZCB0ZW1wbGF0ZXMgZm9yIHRoZSBhYm92ZSBjaGVja3MuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCjE5OTktMDgtMDIgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzcGFyYy9saW51eDY0LmggKFRBUkdFVF9ERUZBVUxUKTogUmVtb3ZlIE1BU0tfQVBQX1JFR1MuCgkqIHNwYXJjL3NvbDItc2xkLTY0LmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCgkqIHNwYXJjL3NvbDIuaCAoVEFSR0VUX0RFRkFVTFQpOiBMaWtld2lzZS4KCk1vbiBBdWcgIDIgMjM6NDY6NDUgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBXaGVuIGRvaW5nIGJpdi0+Z2l2IGNvbnZlcnNpb24sIGZpeCB1cAoJcmVnX2Jpdl9jbGFzcy4KCjE5OTktMDgtMDIgIEpha3ViIEplbGluZWsgIDxqakB1bHRyYS5saW51eC5jej4KCgkqIGNvbmZpZy9mbG9hdC1zcGFyYy5oOiBOZXcgZmlsZS4KCSogY29uZmlndXJlLmluOiBVc2UgZmxvYXRfZm9ybWF0PXNwYXJjIGZvciBzcGFyYy0qLWxpbnV4LWdudWxpYmMxLAoJc3BhcmMtKi1saW51eC1nbnUgYW5kIHNwYXJjNjQtKi1saW51eCouCgoxOTk5LTA4LTAyICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiByczYwMDAuYyAocnM2MDAwX3ZhX2xpc3QpOiBUeXBlIGlzIGFuIGFycmF5LgoJKHJzNjAwMF92YV9zdGFydCk6IERvbid0IGRvdWJseSBhZGp1c3QgZm9yIHZhcmFyZ3MuCgkocnM2MDAwX3ZhX2FyZyk6IEV2YWx1YXRlIGxvbmcgbG9uZyBHUFIgYWRqdXN0bWVudC4KCk1vbiBBdWcgIDIgMTY6MTU6NTcgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL2FpeDQzLmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IFVzZSAtbTY0IGFuZCAtbTMyIGluc3RlYWQgb2YKCS1tYWl4NjQgYW5kIC1tYWl4MzIuCgkoQVNNX1NQRUMsIEFTTV9DUFVfU1BFQywgQ1BQX1NQRUMsIENQUF9DUFVfU1BFQywgTElCX1NQRUMsCglMSU5LX1NQRUMpOiBDaGFuZ2UgYXBwcm9wcmlhdGVseS4KCSogcnM2MDAwL3JzNjAwMC5jIChzaG9ydF9jaW50X29wZXJhbmQpOiBVc2UgQ09OU1RfT0tfRk9SX0xFVFRFUl9QLgoJKHVfc2hvcnRfY2ludF9vcGVyYW5kKTogTGlrZXdpc2UuCgkqIHJzNjAwMC9yczYwMDAubWQgKG1vdmRpIHNwbGl0dGVycyk6IEFkZCBUQVJHRVRfUE9XRVJQQzY0IHN1cHBvcnQKCWZvciA2NC1iaXQgaG9zdHMuCgkqIHJzNjAwMC90LWFpeDQzIChNVUxUSUxJQik6IENoYW5nZSB0byAtbTY0LgoKCSogaW52b2tlLnRleGkgKFJTLzYwMDAgU3VibW9kZWwpOiBEb2N1bWVudCA2NC1iaXQgcHJvY2Vzc29yIG9wdGlvbnMuCgpNb24gQXVnICAyIDE2OjE1OjU3IDE5OTkgIEdlb2ZmIEtlYXRpbmcgIDxnZW9mZmtAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC9yczYwMDAuYyAobnVtX2luc25zX2NvbnN0YW50X3dpZGUpOiBDb3JyZWN0Cglmb3IgdHlwZSBwcm9tb3Rpb24uCgkoYWRkX29wZXJhbmQpOiBHZXQgdGVzdCBjb3JyZWN0IGZvciA2NC1iaXQgSE9TVF9XSURFX0lOVC4KCShub25fYWRkX2NpbnRfb3BlcmFuZCk6IExpa2V3aXNlLgoJKGxvZ2ljYWxfb3BlcmFuZCk6IExpa2V3aXNlLgoJKG5vbl9sb2dpY2FsX2NpbnRfb3BlcmFuZCk6IExpa2V3aXNlLgoJKHByaW50X29wZXJhbmQpOiBDb3JyZWN0IHByaW50ZigpcyBmb3IgNjQtYml0IEhPU1RfV0lERV9JTlQuCgkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogQ29ycmVjdCBwcmludGYoKSBmb3IgNjQtYml0IEhPU1RfV0lERV9JTlQuCgkocnM2MDAwX3NlbGVjdF9ydHhfc2VjdGlvbik6IFN1cHByZXNzIHdhcm5pbmcuCgkoc21hbGxfZGF0YV9vcGVyYW5kKTogU3VwcHJlc3Mgd2FybmluZy4KCShyczYwMDBfZ290X3JlZ2lzdGVyKTogU3VwcHJlc3Mgd2FybmluZy4KCSogcnM2MDAwL3JzNjAwMC5tZCAoYW5kc2kzKTogSE9TVF9XSURFX0lOVCBpcyBhIHNpZ25lZAoJdHlwZSwgc28gYEonIGlzIGdlbmVyYWxseSB0aGUgd3JvbmcgY29uc3RyYWludCBmb3IgYSBTSW1vZGUgdmFsdWU7Cgl1c2UgYEwnIGluc3RlYWQuCgkoYW5kc2kzX2ludGVybmFsMik6IExpa2V3aXNlLgoJKGFuZHNpM19pbnRlcm5hbDMpOiBMaWtld2lzZS4KCShpb3JzaTNfaW50ZXJuYWwxKTogTGlrZXdpc2UuCgkoeG9yc2kzX2ludGVybmFsMSk6IExpa2V3aXNlLgoJKG1vdnNpKTogTGlrZXdpc2UuCgkobW92c2Zfc29mdGZsb2F0KTogTGlrZXdpc2UuCgkoc2NjIGluc25zKTogTGlrZXdpc2UuCgkobW92c2krMik6IFByZXNlcnZlIHNpZ24gYml0cyBvZiBTSW1vZGUgY29uc3RhbnQuCgkoZmxvYXRzaWRmMl9pbnRlcm5hbCsxKTogU2lnbi1leHRlbmQgU0ltb2RlIGNvbnN0YW50IGNvcnJlY3RseS4KCShtb3ZkZisxKTogU2lnbi1leHRlbmQgcHJvcGVybHkuCgkobW92ZGlfMzIrMSk6IFNpZ24tZXh0ZW5kIHByb3Blcmx5LgoJKHNjYyBpbnNucyk6IFNpZ24tZXh0ZW5kIHByb3Blcmx5LgoKCSogbWQudGV4aSAoUlMvNjAwMCBFWFRSQV9DT05TVFJBSU5UUyk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGZvciBKLAoJSywgTCwgYW5kIFQuCgoxOTk5LTA4LTAyICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IE1vdmUgZXY2IGFscGhhX3RwIGZyb2JiaW5nIG91dCBvZgoJLW1jcHUgcGFyc2luZyBjb2RlLgoJKHByaW50X29wZXJhbmQpOiBOb3RpY2UgYWxwaGFfZnB0bSBub3QgYWxwaGFfdHAgZm9yIHN3IGNvbXBsZXRpb24uCgkqIGFscGhhLm1kIChhbGwgZnAgaW5zbnMpOiBMaWtld2lzZS4KCjE5OTktMDgtMDIgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvdjg1MC92ODUwLmggKFNUUklDVF9BTElHTk1FTlQpOiBPbmx5IGRlZmluZSBpZiBub3QKCWFscmVhZHkgZGVmaW5lZC4KCk1vbiBBdWcgIDIgMDM6Mzg6MzMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYyAobGVnaXRpbWl6ZV9waWNfYWRkcmVzcyk6IENsYXJpZnkgY29tbWVudHMuICBEbyBub3QgY2FsbCB0aGUKCXBpY19sb2FkX2xhYmVsIGdlbmVyYXRvciBkaXJlY3RseS4KCSogcGEubWQgKHBpY19sb2FkX2xhYmVsKTogQ2xhcmlmeSBjb21tZW50cy4gIFJlbW92ZSBtb2RlcyBvbiBvcGVyYW5kcy4KCU5vIGxvbmdlciBhIG5hbWVkIHBhdHRlcm4uCgpNb24gQXVnICAyIDA5OjM4OjEwIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBleHBsb3cuYyAoZm9yY2VfcmVnKTogQ2FsbCBmb3JjZV9vcGVyYW5kIGlmIFggZG9lcyBub3QKCXNhdGlzZnkgZ2VuZXJhbF9vcGVyYW5kLgoKTW9uIEF1ZyAgMiAwMTozNDoyMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXgtaGVhZGVyLmMgKG1haW4pOiBXaGVuIHRlc3RpbmcgZm9yIENPTlRJTlVFRCwgdXNlIHN0cmluZwoJZXF1YWxpdHksIG5vdCBwb2ludGVyIGVxdWFsaXR5LgoKTW9uIEF1ZyAgMiAwMToyNzoyNCAxOTk5ICBEYW4gTmljb2xhZXNjdSAgPGRhbm5AaWNzLnVjaS5lZHU+CgoJKiBzcGFyYy5jIChzcGFyY19ibG9ja19wcm9maWxlcik6IFVzZSB0aGUgJWcyIHJlZ2lzdGVyLCBub3QgJW8wLgoKU3VuIEF1ZyAgMSAyMjo0Njo0MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjc2UuYyAoY3NlX2luc24pOiBGaXggbG9vcCB3aGljaCBkZWxldGVzIGluc25zIGFmdGVyIGEganVtcAoJdGhhdCBoYXMgYmVjb21lIGFuIHVuY29uZGl0aW9uYWwganVtcC4KCgkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogRml4IHR5cG8gaW4gQ1BVMzIgY2FzZS4KCShvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBTaW1pbGFybHkuCgpTdW4gQXVnICAxIDIwOjE0OjAwIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogdHJlZS5oIChpbml0X2R1bW15X2Z1bmN0aW9uX3N0YXJ0KTogRGVjbGFyZS4KClN1biBBdWcgIDEgMTI6NTU6MzEgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBzdG10LmMgKGVtaXRfZmlsZW5hbWUsIGVtaXRfbGluZW5vLCBleHByX3N0bXRzX2Zvcl92YWx1ZSwKCWxhc3RfZXhwcl90eXBlLCBsYXN0X2V4cHJfdmFsdWUsIGJsb2NrX3N0YXJ0X2NvdW50LCBibG9ja19zdGFjaywKCXN0YWNrX2Jsb2NrX3N0YWNrLCBjb25kX3N0YWNrLCBsb29wX3N0YWNrLCBjYXNlX3N0YWNrLCBuZXN0aW5nX3N0YWNrLAoJbmVzdGluZ19kZXB0aCwgZ290b19maXh1cF9jaGFpbik6IERlbGV0ZSBnbG9iYWwJdmFyczsgbm93IGFsbG9jYXRlZAoJZHluYW1pY2FsbHkgaW4gc3RtdCBlbHQgb2Ygc3RydWN0IGZ1bmN0aW9uIGZvciBlYWNoIGZ1bmN0aW9uLgoJKHN0cnVjdCBuZXN0aW5nKTogUmVuYW1lIGZ1bmN0aW9uX2NhbGxfY291bnQgZWx0IHRvIG5fZnVuY3Rpb25fY2FsbHMsCgl0YXJnZXRfdGVtcF9zbG90X2xldmVsIHRvIGJsb2NrX3RhcmdldF90ZW1wX3Nsb3RfbGV2ZWwuICBBbGwgdXNlcnMKCWNoYW5nZWQuCgkoc3RydWN0IHN0bXRfc3RhdHVzKTogTmV3IHN0cnVjdHVyZSBkZWZpbml0aW9uLgoJQWRkIG1hbnkgYWNjZXNzb3IgbWFjcm9zIGZvciBzdG10X3N0YXR1cyBlbGVtZW50cyB3aGljaCBwcmV2aW91c2x5Cgl3ZXJlIGdsb2JhbCB2YXJpYWJsZXMuCgkoaW5pdF9zdG10X2Zvcl9mdW5jdGlvbik6IEFsbG9jYXRlIHN0bXQgZWx0IGZvciBjdXJyZW50X2Z1bmN0aW9uLgoJUmVmbGVjdCB0aGF0IGJsb2NrX3N0YXJ0X2NvdW50IHdhcyByZW5hbWVkIHRvCgljdXJyZW50X2Jsb2NrX3N0YXJ0X2NvdW50LgoJKHNhdmVfc3RtdF9zdGF0dXMsIHJlc3RvcmVfc3RtdF9zdGF0dXMpOiBEZWxldGUgZnVuY3Rpb25zLgoJKHByZXNlcnZlX3N1YmV4cHJlc3Npb25zX3ApOiBEb24ndCBhY2Nlc3MgbG9vcF9zdGFjayB3aGVuIG91dHNpZGUKCWEgZnVuY3Rpb24uCgkoZXhwYW5kX3N0YXJ0X2JpbmRpbmdzKTogUmVmbGVjdCB0aGF0IGJsb2NrX3N0YXJ0X2NvdW50IHdhcyByZW5hbWVkIHRvCgljdXJyZW50X2Jsb2NrX3N0YXJ0X2NvdW50LgoJKGV4cGFuZF9maXh1cCk6IExpa2V3aXNlLgoJKGV4cGFuZF9kZWNsKTogRG9uJ3QgYWNjZXNzIGJsb2NrX3N0YWNrIHdoZW4gb3V0c2lkZSBhIGZ1bmN0aW9uLgoJKGV4cGFuZF9kZWNsX2NsZWFudXApOiBMaWtld2lzZS4KCShleHBhbmRfZGNjX2NsZWFudXApOiBMaWtld2lzZS4KCShleHBhbmRfZGhjX2NsZWFudXApOiBMaWtld2lzZS4KCShleHBhbmRfYW5vbl91bmlvbl9kZWNsKTogTGlrZXdpc2UuCgkoc2V0X2ZpbGVfYW5kX2xpbmVfZm9yX3N0bXQpOiBOZXcgZnVuY3Rpb24uCgkoaW5fY29udHJvbF96b25lX3ApOiBOZXcgZnVuY3Rpb24uCgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBBZGQgbmV3IGVsdCBzdG10LgoJRGVsZXRlIGVsdHMgYmxvY2tfc3RhY2ssIHN0YWNrX2Jsb2NrX3N0YWNrLCBjb25kX3N0YWNrLCBsb29wX3N0YWNrLAoJY2FzZV9zdGFjaywgbmVzdGluZ19zdGFjaywgbmVzdGluZ19kZXB0aCwgYmxvY2tfc3RhcnRfY291bnQsCglsYXN0X2V4cHJfdHlwZSwgbGFzdF9leHByX3ZhbHVlLCBleHByX3N0bXRzX2Zvcl92YWx1ZSwgZW1pdF9maWxlbmFtZSwKCWVtaXRfbGluZW5vLCBnb3RvX2ZpeHVwX2NoYWluLgoJKHNhdmVfZWhfc3RhdHVzLCByZXN0b3JlX2VoX3N0YXR1cywgc2F2ZV9zdG10X3N0YXR1cywKCXJlc3RvcmVfc3RtdF9zdGF0dXMpOiBEZWxldGUgZGVjbGFyYXRpb25zLgoJKiBmdW5jdGlvbi5jIChwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8pOiBEb24ndCBjYWxsIHNhdmVfc3RtdF9zdGF0dXMuCgkocG9wX2Z1bmN0aW9uX2NvbnRleHRfdG8pOiBEb24ndCBjYWxsIHJlc3RvcmVfc3RtdF9zdGF0dXMuCgkqIHRyZWUuaCAoaW5fY29udHJvbF96b25lX3ApOiBEZWNsYXJlLgoJKiBydGwuaCAoc2V0X2ZpbGVfYW5kX2xpbmVfZm9yX3N0bXQpOiBEZWNsYXJlLgoKCSogZW1pdC1ydGwuYyAoZW1pdF9saW5lX25vdGUpOiBEb24ndCBzZXQgZW1pdF9maWxlbmFtZS9lbWl0X2xpbmVubzsKCWNhbGwgc2V0X2ZpbGVfYW5kX2xpbmVfZm9yX3N0bXQuCgpUaHUgSnVsIDMxIDEyOjM0OjQ1IDE5OTkgIEpvZSBCdWNrICA8amJ1Y2tAc3lub3BzeXMuY29tPgoKCSogZ2NjLnRleGk6IFVzZSB0ZXJtcyAiR05VIENvbXBpbGVyIENvbGxlY3Rpb24iIGFuZCAiR0NDIi4KCUFsc28gdXBkYXRlIGNvcHlyaWdodC4KClNhdCBKdWwgMzEgMTE6MTA6MDcgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBjLXByYWdtYS5jOiBEb24ndCBpbmNsdWRlICJleGNlcHQuaCIuCgkqIGVtaXQtcnRsLmM6IExpa2V3aXNlLgoJKiBzdG9yLWxheW91dC5jOiBMaWtld2lzZS4KCSogdHJlZS5jOiBMaWtld2lzZS4KCSogdmFyYXNtLmM6IExpa2V3aXNlLgoKCSogZmxvdy5jOiBJbmNsdWRlICJmdW5jdGlvbi5oIi4KCSogdHJlZS5oIChpbml0X2R1bW15X2Z1bmN0aW9uX3N0YXJ0KTogRGVjbGFyZSBuZXcgZnVuY3Rpb24uCgoJKiBleGNlcHQuaCAoc3RydWN0IGVoX3N0YXR1cyk6IE5ldyBzdHJ1Y3R1cmUuCgkoc3RydWN0IGxhYmVsX25vZGUsIHN0cnVjdCBlaF9lbnRyeSk6IERlY2xhcmUgZXZlbiBpZiB0cmVlLmggaGFzbid0CgliZWVuIGluY2x1ZGVkLgoJKGVoX3JldHVybl9zdHViX2xhYmVsLCBlaHN0YWNrLCBjYXRjaHN0YWNrLCBlaHF1ZXVlLAoJY2F0Y2hfY2xhdXNlcywgZmFsc2VfbGFiZWxfc3RhY2ssIGNhdWdodF9yZXR1cm5fbGFiZWxfc3RhY2ssCglwcm90ZWN0X2xpc3QsIGN1cnJlbnRfZnVuY3Rpb25fZWhjKTogQWRkIGFjY2Vzc29yIG1hY3JvcyBmb3IgdGhlCgljb3JyZXNwb25kaW5nIGZpZWxkcyBpbiBjdXJyZW50X2Z1bmN0aW9uLT5laDsgZGVsZXRlIGRlY2xhcmF0aW9ucwoJZm9yIGFsbCBpdGVtcyB0aGF0IHVzZWQgdG8gYmUgZGVjbGFyZWQgaGVyZS4KCSogZXhjZXB0LmMgKGVoX3JldHVybl9zdHViX2xhYmVsLCBlaHN0YWNrLCBjYXRjaHN0YWNrLCBlaHF1ZXVlLAoJY2F0Y2hfY2xhdXNlcywgZmFsc2VfbGFiZWxfc3RhY2ssIGNhdWdodF9yZXR1cm5fbGFiZWxfc3RhY2ssCglwcm90ZWN0X2xpc3QsIGN1cnJlbnRfZnVuY3Rpb25fZWhjKTogRGVsZXRlIHZhcmlhYmxlcy4KCShpbml0X2VoX2Zvcl9mdW5jdGlvbik6IEFsbG9jYXRlIGN1cnJlbnRfZnVuY3Rpb24tPmVoLgoJKHNhdmVfZWhfc3RhdHVzLCByZXN0b3JlX2VoX3N0YXR1cyk6IERlbGV0ZSBmdW5jdGlvbnMuCgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBBZGQgZmllbGRzIG5leHRfZ2xvYmFsIGFuZCBlaC4KCURlbGV0ZSBhbGwgZXhjZXB0aW9uIGhhbmRsaW5nIHJlbGF0ZWQgZmllbGRzLgoJKiBmdW5jdGlvbi5jIChjdXJyZW50X2Z1bmN0aW9uKTogTmV3IHZhcmlhYmxlLgoJKGFsbF9mdW5jdGlvbnMpOiBOZXcgdmFyaWFibGUuCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvKTogRG9uJ3QgYWxsb2NhdGUgYSBzdHJ1Y3QgZnVuY3Rpb24sCgl1c2UgY3VycmVudF9mdW5jdGlvbiBpbnN0ZWFkLiAgQ2FsbCBpbml0X2R1bW15X2Z1bmN0aW9uX3N0YXJ0IHdoZW4KCW91dHNpZGUgYSBmdW5jdGlvbi4gIENsZWFyIGN1cnJlbnRfZnVuY3Rpb24gYmVmb3JlIHJldHVybmluZy4KCShwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogUmVzdG9yZSBjdXJyZW50X2Z1bmN0aW9uLgoJRG9uJ3QgZnJlZSB0aGUgcmVzdG9yZWQgc3RydWN0IGZ1bmN0aW9uLgoJKHByZXBhcmVfZnVuY3Rpb25fc3RhcnQpOiBOZXcgZnVuY3Rpb24uCgkoaW5pdF9kdW1teV9mdW5jdGlvbl9zdGFydCk6IE5ldyBmdW5jdGlvbi4KCShpbml0X2Z1bmN0aW9uX3N0YXJ0KTogQnJlYWsgb3V0IHNvbWUgY29kZSBpbnRvIHByZXBhcmVfZnVuY3Rpb25fc3RhcnQKCWFuZCBjYWxsIGl0IGhlcmUuCgoJKiBzdG10LmMgKHNhdmVfc3RtdF9zdGF0dXMpOiBEb24ndCBjYWxsIHNhdmVfZWhfc3RhdHVzLgoJKHJlc3RvcmVfc3RtdF9zdGF0dXMpOiBEb24ndCBjYWxsIHJlc3RvcmVfZWhfc3RhdHVzLgoKCSogTWFrZWZpbGUuaW46IFVwZGF0ZSBkZXBlbmRlbmNpZXMuCgpTYXQgSnVsIDMxIDA0OjEwOjAxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmMgKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IFVzZSBTVEFSVElOZ19GUkFNRV9PRkZTRVQgaW5zdGVhZAoJb2YgZGVwZW5kaW5nIG9uIGEgbWFnaWMgY29uc3RhbnQgdmFsdWUuICBVcGRhdGUgY29tbWVudHMuCgkoaHBwYV9leHBhbmRfcHJvbG9ndWUpOiBTaW1pbGFybHkuCgoJKiBwYS5tZCAocmVsb2FkX2luZGksIHJlbG9hZF9vdXRkaSk6IEFsbG93IGFueSByZWdpc3RlciBmb3IgdGhlCglvcmlnaW5hbCByZWxvYWQgcmVnaXN0ZXIuCgpGcmkgSnVsIDMwIDE5OjQxOjM1IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNjY3AuYyAocHJpbnRfaGVscCk6IENoYW5nZSBtYXJjb3MgdG8gbWFjcm9zLgoKMTk5OS0wNy0zMCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtdHlwZWNrLmMgKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOiBNb3ZlIC4uLgoJKiBjLWNvbW1vbi5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogLi4uIGhlcmUuICBVc2UKCUZPT19UWVBFX1AgaW5zdGVhZCBvZiB0ZXN0cyBhZ2FpbnN0IFRSRUVfQ09ERS4gIEFsbG93IHN1YnRyYWN0aW9uCglvZiBsYWJlbCBhZGRyZXNzZXMuCgkqIGMtY29tbW9uLmggKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOiBEZWNsYXJlLgoJKiBjLXRyZWUuaCAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IFJlbW92ZS4KCkZyaSBKdWwgMzAgMTY6MzM6NDIgMTk5OSAgTWF0aGlhcyBGcm9laGxpY2ggIDxmcm9obGljaEBuYS51bmktdHVlYmluZ2VuLmRlPgoKCSogY29uZmlnL2kzODYvc29sMi1jMS5hc206IEFsaWduIHRoZSBzdGFjay4KCSogY29uZmlnL2kzODYvc29sMi1nYzEuYXNtOiBMaWtld2lzZS4KCjE5OTktMDctMzAgIFZsYWRpbWlyIE1ha2Fyb3YgIDx2bWFrYXJvdkBsb29ueS5jeWdudXMuY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKEFTTV9DUFUzMl9ERUZBVUxUX1NQRUMpOiBDaGFuZ2UgLUF2OCBvbnRvCgktQXNwYXJjbGl0ZSBmb3Igc3BhcmM4NnguCgkoQ1BQX0NQVTMyX0RFRkFVTFRfU1BFQywgQ1BQX0NQVV9TUEVDKTogUmVtb3ZlIC1EX19zcGFyY192OF9fIGZvcgoJc3BhcmM4NnguCgkoQVNNX0NQVV9TUEVDKTogVXNlIC1Bc3BhcmNsaXRlIGZvciBzcGFyYzg2eC4KCkZyaSBKdWwgMzAgMTQ6NTM6NTYgMTk5OSAgSmFrdWIgSmVsaW5layAgPGpqQHVsdHJhLmxpbnV4LmN6PgoKCSogY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAoQ0MxX1NQRUMpOiBQcmVzZXJ2ZSBDUFUgc3BlY2lmaWVkIGJ5Cgl0aGUgdXNlciBpZiB1c2luZyB0aGUgbm9uLWRlZmF1bHQgYXJjaCBzaXplIGluIEJJX0FSQ0ggY29uZmlndXJhdGlvbi4KCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKENDMV9TUEVDKTogRGl0dG8uCgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGNtcF9tdWxfc2V0LCBjbXBfdWRpdl9jY19zZXQpOgoJRml4IHBhdHRlcm5zIHNvIHRoYXQgdGhleSBhY3R1YWxseSBtYXRjaC4KCShjbXBfc2Rpdl9jY19zZXQpOiBEaXR0bywgYWxzbyBkb24ndCByZXF1aXJlIGcwIHRvIGJlIHplcm8uCgkobXVsc2lkaTNfc3A2NCwgY29uc3RfbXVsc2lkaTNfc3A2NCk6IE5ldyBwYXR0ZXJucy4KCShjb25zdF9tdWxzaWRpM19zcDMyKTogUmVuYW1lZCBmcm9tIGNvbnN0X211bHNpZGkzLCBvbmx5IG9uCglUQVJHRVRfSEFSRF9NVUwzMi4KCShtdWxzaWRpMyk6IFJlZmxlY3QgdGhpcyBpbiB0aGUgZXhwYW5kLgoJKHNtdWxzaTNfaGlnaHBhcnQpOiBPbmx5IG9uIFRBUkdFVF9BUkNIMzIuCgkodW11bHNpZGkzX3NwNjQsIGNvbnN0X3VtdWxzaWRpM19zcDY0KTogTmV3IHBhdHRlcm5zLgoJKGNvbnN0X3VtdWxzaWRpM19zcDMyKTogUmVuYW1lZCBmcm9tIGNvbnN0X3VtdWxzaWRpMy4KCSh1bXVsc2lkaTMpOiBSZWZsZWN0IHRoaXMgaW4gdGhlIGV4cGFuZC4KCSh1bXVsc2kzX2hpZ2hwYXJ0KTogT25seSBvbiBUQVJHRVRfQVJDSDMyLgoJKGRpdnNpM19zcDMyKTogUmVuYW1lZCBmcm9tIGRpdnNpMywgb25seSBvbiBUQVJHRVRfQVJDSDMyLAoJZG9uJ3QgcmVxdWlyZSBnMCB0byBiZSB6ZXJvLgoJKHVkaXZzaTNfc3AzMik6IFJlbmFtZWQgZnJvbSB1ZGl2c2kzLCBvbmx5IG9uIFRBUkdFVF9BUkNIMzIuCgkoeyx1fWRpdnNpMyk6IE5ldyBleHBhbmRzLgoJKHssdX1kaXZzaTNfc3A2NCk6IE5ldyBwYXR0ZXJucy4KCShhZnRlciBsc2hyZGkzX3Y4cGx1cyk6IEZvdXIgbmV3IHBhdHRlcm5zIHRvIGhlbHAgY29tYmluZXIKCW9wdGltaXppbmcgbmVzdGVkIG1peGVkIG1vZGUgc2hpZnRzLgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX292ZXJyaWRlX29wdGlvbnMpOiBVc2UgZGVwcmVjYXRlZAoJdjggaW5zdHJ1Y3Rpb25zIGlmIG9wdGltaXppbmcgZm9yIFVsdHJhU1BBUkMgSSwgSUksIElJaSwgYXMgaXQKCXNwZWVkIHRoaW5ncyB1cC4gRG9uJ3QgdXNlIHRoZW0gYnkgZGVmYXVsdCBvbiBwbGFpbiB2OSBpbiA2NGJpdAoJbW9kZSwgYWNjb3JkaW5nIHRvIHdoYXQgU1BBTXY5IHNhaXMuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaDogRml4IGNvbW1lbnRzLCBlLmcuIExpbnV4IGFscmVhZHkgcHJlc2VydmVzCgl0b3AgMzIgYml0cyBvZiAlW29nXVswLTddIGluIHNpZ25hbCBoYW5kbGVycy4KCUFsc28sIFRBUkdFVF9IQVJEX01VTDMyIG5vdyBpcyBvbmx5IHRydWUgZm9yIFRBUkdFVF9BUkNIMzIuCgpGcmkgSnVsIDMwIDAzOjAwOjQxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLm1kICh6dmRlcF9pbW0zMik6IFJlbmFtZWQgZnJvbSB6dmRlcF9pbW0uCgkoYXNobHNpMyk6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KCgkqIHBhLmMgKGNvbXB1dGVfemRlcHdpX29wZXJhbmRzKTogUmVuYW1lZCBmcm9tIGNvbXB1dGVfemRlcGlfb3BlcmFuZHMuCgpUaHUgSnVsIDI5IDE4OjM3OjEzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmggKEZJUlNUX1BBUk1fQ0FMTEVSX09GRlNFVCk6IERlbGV0ZS4KClRodSBKdWwgMjkgMTk6MDE6NTggMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBhcm0uaCAoSGludCk6IERlbGV0ZSBtYWNyby4KCVN1YnN0aXR1dGUgSE9TVF9XSURFX0lOVCBmb3IgSGludCBpbiBzb21lIHByb3RvdHlwZXMuCgkqIGFybS5jOiBTdWJzdGl0dXRlIEhPU1RfV0lERV9JTlQgZm9yIEhpbnQgaW4gb25lIHByb3RvdHlwZS4KClRodSBKdWwgMjkgMDk6MjE6NDIgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGJ1aWx0aW5zLmMgKGV4cGFuZF9idWlsdGluX3NldGptcCk6IFVzZSBmb3JjZV9vcGVyYW5kIHRvCgltYWtlIHN1cmUgdGhhdCB0aGUgYnVmZmVyIGFkZHJlc3MgaXMgaW4gYSBzdWl0YWJsZSBmb3JtIHRvIGJlCglwYXNzZWQgdG8gZm9yY2VfcmVnLgoKV2VkIEp1bCAyOCAxMjo1MDo0OCAxOTk5ICBHZW9mZiBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmM6IHN5c3RlbS5oIGhhbmRsZXMgTUlOIGFuZCBNQVgsIGRvbid0IHVuZGVmaW5lCgl0aGVtIGhlcmUuCgpXZWQgSnVsIDI4IDEzOjE4OjM1IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLm1kIChpbmRpcmVjdF9qdW1wKTogUmVtb3ZlIG1vZGUgZnJvbSBtYXRjaF9vcGVyYW5kLiAgVmVyaWZ5Cglwcm9wZXIgbW9kZSBpbiB0aGUgY29uZGl0aW9uIHN0cmluZy4KCShpY2FjaGVmbHVzaCwgZGNhY2hlZmx1c2gpOiBSZW1vdmUgbW9kZXMgZnJvbSBtYXRjaF9vcGVyYW5kcy4KCgkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IEFsd2F5cyBjb252ZXJ0IHNjcmF0Y2hfcmVnIHRvIHRoZQoJcHJvcGVyIG1vZGUgYmVmb3JlIHVzaW5nIGl0LgoKCSogcGEubWQgKGFkZGRpMywgc3ViZGkzKTogVHVybiBpbnRvIGEgZGVmaW5lX2V4cGFuZC9kZWZpbmVfaW5zbgoJcGFpci4KCgkqIHBhLmMgKHN0b3JlX3JlZyk6IERvIG5vdCBjYWxsIGFkZF9oaWdoX2NvbnN0IGdlbmVyYXRvciBkaXJlY3RseS4KCShsb2FkX3JlZywgc2V0X3JlZ19wbHVzX2QpOiBMaWtld2lzZS4KCSogcGEubWQgKGFkZF9oaWdoX2NvbnN0KTogTm8gbG9uZ2VyIGEgbmFtZWQgcGF0dGVybi4KCgkqIHBhLmMgKGxlZ2l0aW1pemVfYWRkcmVzcyk6IENvbnNpc3RlbnRseSB1c2UgUG1vZGUgcmF0aGVyIHRoYW4KCVNJbW9kZS4gIERvIG5vdCBjYWxsIGdlbl9waWMyX2hpZ2hwYXJ0IGRpcmVjdGx5IGFueW1vcmUuCgkqIHBhLm1kIChwaWMyX2hpZ2hwYXJ0KTogTm8gbG9uZ2VyIGEgbmFtZWQgcGF0dGVybi4KCShwaWMyX2xvX3N1bSk6IFNpbWlsYXJseS4gIFJlZm9ybWF0IHRvIG1ha2UgbW9yZSByZWFkYWJsZS4KCgkqIHBhLm1kIChjYWxsLCBjYWxsX3ZhbHVlKTogVXNlICJ3b3JkX21vZGUiIGluc3RlYWQgb2YgIlNJbW9kZSIgYXMKCW5lZWRlZC4KCgkqIFJFQURNRTogVXBkYXRlLgoKV2VkIEp1bCAyOCAxMToyODowNCAxOTk5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiBidWlsdGlucy5jIChleHBhbmRfYnVpbHRpbik6IFR5cG8gaW4gY2FsbCB0byBleHBhbmRfYnVpbHRpbl9mZnMuCgpXZWQgSnVsIDI4IDExOjIzOjQ4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBwYS5jIChocHBhX2J1aWx0aW5fc2F2ZXJlZ3MpOiAgVXNlIGdldF92YXJhcmdzX2FsaWFzX3NldAoJYW5kIHRhZyB0aGUgc3BpbGwgbWVtcy4KCShocHBhX3ZhX3N0YXJ0KTogTmV3LgoJKGhwcGFfdmFfYXJnKTogTmV3LgoJKiBwYS5oIChFWFBBTkRfQlVJTFRJTl9WQV9TVEFSVCk6IE5ldy4KCShFWFBBTkRfQlVJTFRJTl9WQV9BUkcpOiBOZXcuCgpXZWQgSnVsIDI4IDExOjIyOjIxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtbjEwMzAwLmMgKG1uMTAzMDBfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBnZXRfdmFyYXJnc19hbGlhc19zZXQKCWFuZCB0YWcgdGhlIHNwaWxsIG1lbXMuCgkobW4xMDMwMF92YV9zdGFydCk6IE5ldy4KCShtbjEwMzAwX3ZhX2FyZyk6IE5ldy4KCSogbW4xMDMwMC5oIChFWFBBTkRfQlVJTFRJTl9WQV9TVEFSVCk6IE5ldy4KCShFWFBBTkRfQlVJTFRJTl9WQV9BUkcpOiBOZXcuCgpXZWQgSnVsIDI4IDExOjIwOjE5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtbjEwMjAwLmMgKG1uMTAyMDBfdmFfYXJnKTogTmV3LgoJKiBtbjEwMjAwLmggKEVYUEFORF9CVUlMVElOX1ZBX0FSRyk6IE5ldy4KCldlZCBKdWwgMjggMTE6MTk6MDYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGJ1aWx0aW5zLmMgKHN0ZF9leHBhbmRfYnVpbHRpbl92YV9hcmcpOiBVc2UgaW50X3NpemVfaW5fYnl0ZXMKCXJhdGhlciB0aGFuIHBsYXkgd2l0aCBUUkVFX0lOVF9DU1RfTE9XLgoKMTk5OS0wNy0yNyAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJKiBjb25maWcvYXJtL3RlbGYuaDogSW5jbHVkZSBkYnhlbGYuaC4KCShDUFBfUFJFREVGSU5FUyk6IE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCgkoQVNNX0lERU5USUZZX0dDQyk6IExpa2V3aXNlLgoJKFNVQlRBUkdFVF9FWFRSQV9TRUNUSU9OUyk6IExpa2V3aXNlLgoJKFNVQlRBUkdFVF9FWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyk6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL3RodW1iLmggKExJTktfU1BFQyk6IE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5CglkZWZpbmVkLgoJKERCWF9ERUJVR0dJTkdfSU5GTyk6IERvbid0IGRlZmluZS4KCSogY29uZmlnL2FybS9saW51eC10ZWxmLmg6IE5ldyBmaWxlLgoJKiBjb25maWcvYXJtL2xpbnV4LXRnYXMuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9hcm0vdC10aHVtYi1saW51eDogTmV3IGZpbGUuCgkqIGNvbmZpZy9hcm0vdWNsaW51eC1lbGYuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9hcm0vdWNsaW51eC10ZWxmLmg6IE5ldyBmaWxlLgoJKiBjb25maWd1cmUuaW4gKGFybS0qLXVjbGludXgsIHRodW1iLSotbGludXgtZ251LAoJdGh1bWItKi11Y2xpbnV4KTogTmV3IHRhcmdldHMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KClR1ZSBKdWwgMjcgMjM6MjA6MjEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEubWQgKHBvc3Rfc3RvcmUsIHByZV9sb2FkKTogTmV3IGV4cGFuZGVycy4KCShwb3N0X3N0d20sIHByZV9sZHdtKTogUmVuYW1lZCB0byBwb3N0X3N0dyBhbmQgcHJlX2xkdyByZXNwZWN0aXZlbHkuCgkocG9zdF9sZHdtLCBwcmVfc3R3bSk6IE1ha2UgdGhlc2UgdW5uYW1lZCBwYXR0ZXJucyBzaW5jZSB3ZSBuZXZlcgoJbmVlZCB0byBkaXJlY3RseSBnZW5lcmF0ZSBSVEwgZm9yIHRoZW0uCgkqIHBhLmMgKGhwcGFfZXhwYW5kX3Byb2xvZ3VlLCBocHBhX2V4cGFuZF9lcGlsb2d1ZSk6IENvcnJlc3BvbmRpbmcKCWNoYW5nZXMuCgpUdWUgSnVsIDI3IDE2OjA1OjUyIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGFpeDQzLmggKEFTTV9DUFVfU1BFQywgQ1BQX0NQVV9TUEVDKTogQWRkIHJzNjRhIGFuZCBQUEM2MzAuCgkqIHJzNjAwMC5jIChwcm9jZXNzb3JfdGFyZ2V0X3RhYmxlKTogQWRkIHBvd2VycGM2NCwgcnM2NGEsIGFuZCBQUEM2MzAuCgkocnM2MDAwX2NwdSk6IENob29zZSBiZXR3ZWVuIDMyLWJpdCBhbmQgNjQtYml0IGRlZmF1bHQgcHJvY2Vzc29ycy4KCShzZWNuZGFyeV9yZWxvYWRfY2xhc3MpOiBNYWtlIFRBUkdFVF9FTEYgY29uZGl0aW9uYWwgY29tcGlsZS4KCShwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBTaW1pbGFyLgoJKG91dHB1dF90b2MpOiBQcmludCBhbGwgdmFsdWVzIGFzIGhleC4KCShnZXRfaXNzdWVfcmF0ZSk6IFJlYXJyYW5nZSBhbmQgYWRkIFJTNjRBIGFuZCBQUEM2MzAuCgkqIHJzNjAwMC5oIChwcm9jZXNzb3JfdHlwZSk6IEFkZCBSUzY0QSBhbmQgUFBDNjMwLgoJKFBST0NFU1NPUl9QT1dFUlBDNjQpOiBOZXcuCgkoUFJPTU9URV9NT0RFKTogVXNlIHdvcmRfbW9kZS4KCShSVFhfQ09TVFMpOiBBZGQgUlM2NEEgYW5kIFBQQzYzMC4KCSogcnM2MDAwLm1kIChzY2hlZHVsaW5nIGluZm9ybWF0aW9uKTogQWRkIGxtdWwgYW5kIGxkaXYKCXJlcHJlc2VudGluZyA2NC1iaXQgaW50ZWdlciBtdWx0aXBseSBhbmQgZGl2aWRlLiAgQWRkIHJzNjRhIGFuZAoJUFBDNjMwIGluZm9ybWF0aW9uLgoJKGFzaGxkaTMpOiBBZGQgc3VwcG9ydCBmb3IgInJsZGljIiBpbnN0cnVjdGlvbi4KCSogc3lzdjQuaCAoUFJPQ0VTU09SX0RFRkFVTFQpOiBDaGFuZ2UgdG8gUFJPQ0VTU09SXzc1MC4KClR1ZSBKdWwgMjcgMTU6MzE6NTMgMTk5OSAgVmxhZGltaXIgTWFrYXJvdiAgPHZtYWthcm92QHRvYWQudG8uY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19vdmVycmlkZV9vcHRpb25zKTogRW5hYmxlIFNQQVJDTElURQoJaW5zdGVhZCBvZiBWOCBmb3Igc3BhcmNsaXRlODZ4IGluIGNwdV90YWJsZS4KClR1ZSBKdWwgMjcgMTc6NDk6NDIgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBjb25maWcvYXJtL2NvZmYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBJZiBnZW5lcmF0aW5nIFNEQiBvdXRwdXQsIGNhbGwKCW91dHB1dF9maWxlX2RpcmVjdGl2ZS4KClR1ZSBKdWwgMjcgMDM6MTU6MzMgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBQTFVTX0VYUFIpOiBHZXQgdGhlIG1vZGUgZnJvbSB0aGUKCXRyZWUgZm9yIG9wMSwgbm90IHRoZSBydGwuCgpUdWUgSnVsIDI3IDAwOjE4OjM0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtODhrLmMgKG04OGtfYnVpbHRpbl9zYXZlcmVncyk6IEJyZWFrIG91dCB0aGUgY29uc3RydWN0b3IgY29kZQoJdG8gbTg4a192YV9zdGFydCwgbGVhdmluZyBvbmx5IHRoZSByZWdpc3RlciBzcGlsbC4KCShtODhrX2J1aWxkX3ZhX2xpc3QpOiBOZXcuCgkobTg4a192YV9zdGFydCk6IE5ldy4KCShtODhrX3ZhX2FyZyk6IE5ldy4KCSogbTg4ay5oIChCVUlMRF9WQV9MSVNUX1RZUEUpOiBOZXcuCgkoRVhQQU5EX0JVSUxUSU5fVkFfU1RBUlQpOiBOZXcuCgkoRVhQQU5EX0JVSUxUSU5fVkFfQVJHKTogTmV3LgoKTW9uIEp1bCAyNiAxOTowNzoxMSAxOTk5ICBHZW9mZiBLZWF0aW5nICA8Z2VvZmZrQGN5Z251cy5jb20+CgoJKiBjb25maWcvcnM2MDAwL3JzNjAwMC5jIChyczYwMDBfZXhwYW5kX2J1aWx0aW5fc2F2ZXJlZ3MpOgoJUmVuYW1lIGZyb20gZXhwYW5kX2J1aWx0aW5fc2F2ZXJlZ3MuCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmggKEVYUEFORF9CVUlMVElOX1NBVkVSRUdTKTogQ2hhbmdlIGNhbGxlci4KCk1vbiBKdWwgMjYgMjI6NTI6NDcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGk5NjAuYyAoaTk2MF9zZXR1cF9pbmNvbWluZ192YXJhcmdzKTogVXNlIGdldF92YXJhcmdzX2FsaWFzX3NldAoJZm9yIHRoZSByZWdpc3RlciBzcGlsbCBibG9jay4KCShpOTYwX2J1aWxkX3ZhX2xpc3QpOiBOZXcuCgkoaTk2MF92YV9zdGFydCk6IE5ldy4KCShpOTYwX3ZhX2FyZyk6IE5ldy4KCSogaTk2MC5oIChCVUlMRF9WQV9MSVNUX1RZUEUpOiBOZXcuCgkoRVhQQU5EX0JVSUxUSU5fVkFfU1RBUlQpOiBOZXcuCgkoRVhQQU5EX0JVSUxUSU5fVkFfQVJHKTogTmV3LgoJKiBpOTYwLm1kIChzdG9yZV9tdWx0aXBsZSk6IFVzZSBjaGFuZ2VfYWRkcmVzcyBvbiBpbmRpdmlkdWFsIG1lbXMuCgpNb24gSnVsIDI2IDIyOjQzOjEyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBidWlsdGlucy5jIChzdGFiaWxpemVfdmFfbGlzdCk6IERvbid0IElORElSRUNUX1JFRiB0aHJvdWdoCglhbiBBUlJBWV9UWVBFLgoJKHN0ZF9leHBhbmRfYnVpbHRpbl92YV9zdGFydCk6IEJhY2sgb3V0IG9uZSB3b3JkIGlmICFzdGRhcmdfcC4KCShleHBhbmRfYnVpbHRpbl92YV9lbmQpOiBFdmFsdWF0ZSBhcmcgZm9yIHNpZGUgZWZmZWN0cy4KCSogYy1jb21tb24uYyAoY19jb21tb25fbm9kZXNfYW5kX2J1aWx0aW5zKTogQ29uc3RydWN0IGEKCXZhX2xpc3RfYXJnX3R5cGVfbm9kZSB0byBoYW5kbGUgYXJyYXkgZGVjb21wb3NpdGlvbiB0byBwb2ludGVyLgoKTW9uIEp1bCAyNiAxODo1MTozNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKHN0X2R5bmFtaWNfY2xlYW51cCk6IFVzZSBmb3JjZV9vcGVyYW5kIG9uIHRoZQoJYnVmZmVyJ3MgYWRkcmVzcy4KCk1vbiBKdWwgMjYgMTY6NDM6MjYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGM0eC5oIChFWFBBTkRfQlVJTFRJTl9WQV9BUkcpOiBOZXcuCgkqIGM0eC5jIChjNHhfdmFfYXJnKTogTmV3LgoKTW9uIEp1bCAyNiAxMjozMDowOSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcHBsaWIuYyAoY3BwX2dldF90b2tlbik6IERvbid0IHJldHVybiBhIENQUF9QT1AgaWYgdGhlIGJ1ZmZlcgoJaGFzIG1hbnVhbF9wb3Agc2V0LgoKMTk5OS0wNy0yNiAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGVoLWNvbW1vbi5oIChfX2VoX21hdGNoZXIpOiBQcm90b3R5cGUgY29ycmVjdGx5LgoKTW9uIEp1bCAyNiAxNzoyNDo1MSAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCgkqIGNvbmZpZy9hcm0vdGh1bWIuaCAoVEhVTUJfRkxBR19TSU5HTEVfUElDX0JBU0UpOiBEZWZpbmUuCgkoVEFSR0VUX1NJTkdMRV9QSUNfQkFTRSk6IExpa2V3aXNlLgoJKEdPVF9QQ1JFTCwgTkVFRF9HT1RfUkVMT0MsIE5FRURfUExUX1JFTE9DKTogUHJvdmlkZSBkZWZhdWx0CglkZWZpbml0aW9ucy4KCShUQVJHRVRfQ0FMTEVFX0lOVEVSV09SS0lORyk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1te25vLX1zaW5nbGUtcGljLWJhc2UuCgkoVEFSR0VUX09QVElPTlMpOiBBZGQgLW1waWMtcmVnaXN0ZXI9Ti4KCShPVVRQVVRfSU5UX0FERFJfQ09OU1QpOiBOZXcgbWFjcm8uCgkoSU5ERVhfUkVHSVNURVJfUlRYX1AsIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNLCBGSU5BTElaRV9QSUMsCglMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1ApOiBMaWtld2lzZS4KCShMRUdJVElNSVpFX0FERFJFU1MsIEdPVF9JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBTdXBwb3J0IFBJQy4KCShBU01fT1VUUFVUX0lOVCk6IFVzZSBPVVRQVVRfSU5UX0FERFJfQ09OU1QgcmF0aGVyIHRoYW4gY2FsbGluZwoJb3V0cHV0X2FkZHJfY29uc3QgZGlyZWN0bHkuCgkoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogQWNjZXB0IGB8JyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCglBUk0gcG9ydC4KCSh0aHVtYl9waWNfcmVnaXN0ZXIsIHRodW1iX3BpY19yZWdpc3Rlcl9zdHJpbmcpOiBEZWNsYXJlLgoKCSogY29uZmlnL2FybS90aHVtYi5jIChzeW1ib2xfbWVudGlvbmVkX3ApOiBOZXcgZnVuY3Rpb246IEltcG9ydGVkCglmcm9tIGFybS5jLgoJKGxhYmVsX21lbnRpb25lZF9wKTogTmV3IGZ1bmN0aW9uOiBJbXBvcnRlZCBmcm9tIGFybS5jLgoJKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBOZXcgZnVuY3Rpb246IEltcG9ydGVkIGZyb20gYXJtLmMuCgkoaXNfcGljKTpOZXcgZnVuY3Rpb246IEltcG9ydGVkCWZyb20gYXJtLmMuCgkodGh1bWJfZmluYWxpemVfcGljKTpOZXcgZnVuY3Rpb246IEltcG9ydGVkIGZyb20gYXJtLmMuCgkoYWRkX2NvbnN0YW50KTogQ29wZSB3aXRoIFBJQyBjb25zdGFudHMuCgkoZml4aXQpOiBDb3BlIHdpdGggUElDIGNvbnN0YW50cy4KCShvdXRwdXRfcmV0dXJuKTogRG8gbm90IHRyZWF0IHRoZSBQSUMgcmVnaXN0ZXIgYXMgbGl2ZSBpZgoJVEFSR0VUX1NJTkdMRV9QSUNfQkFTRSBpcyB0cnVlLgoJKHRodW1iX2Z1bmN0aW9uX3Byb2xvZ3VlKTogRG8gbm90IHRyZWF0IHRoZSBQSUMgcmVnaXN0ZXIgYXMgbGl2ZSBpZgoJVEFSR0VUX1NJTkdMRV9QSUNfQkFTRSBpcyB0cnVlLgoJKHRodW1iX2V4cGFuZF9wcm9sb2d1ZSk6IERvIG5vdCB0cmVhdCB0aGUgUElDIHJlZ2lzdGVyIGFzIGxpdmUgaWYKCVRBUkdFVF9TSU5HTEVfUElDX0JBU0UgaXMgdHJ1ZS4KCSh0aHVtYl91bmV4cGFuZF9lcGlsb2d1ZSk6IERvIG5vdCB0cmVhdCB0aGUgUElDIHJlZ2lzdGVyIGFzIGxpdmUgaWYKCVRBUkdFVF9TSU5HTEVfUElDX0JBU0UgaXMgdHJ1ZS4KCSh0aHVtYl9wcmludF9vcGVyYW5kKTogQWNjZXB0ICd8Jy4KCSh0aHVtYl9vdmVycmlkZV9vcHRpb25zKTogUHJvY2VzcyBQSUMgb3B0aW9ucy4KCgkqIGNvbmZpZy9hcm0vdGh1bWIubWQgKG1vdnNpKTogU3VwcG9ydCBQSUMuCgkoY2FsbF9pbnNuKTogQ2hhbmdlICJpIiBjb25zdHJhaW50IHRvICJYIi4KCShjYWxsX3ZhbHVlX2luc24pOiBMaWtld2lzZS4KCShjb25zdHRhYmxlXzQsIGNvbnN0dGFibGVfOCwgY29uc3R0YWJsZV9lbmQpOiBTZXQgYW5kIGNsZWFyCgkibWFraW5nX2NvbnN0X3RhYmxlIiBhcyBhcHByb3ByaWF0ZS4KCShwaWNfbG9hZF9hZGRyLCBwaWNfYWRkX2RvdF9wbHVzX2ZvdXIpOiBOZXcgaW5zbnMuCgoJKiBpbnZva2UudGV4aSAoVGh1bWIgT3B0aW9ucyk6IEZpeCBzcGVsbGluZy4gIERvY3VtZW50IG5ldwoJb3B0aW9ucyAtbXNpbmdsZS1waWMtYmFzZSBhbmQgLW1waWMtcmVnaXN0ZXI9LgoKMTk5OS0wNy0yNiAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTMyci9pbml0ZmluaS5jIChfX2luaXQpOiBVc2UgYSBmdWxsIHdvcmQgaW1tZWRpYXRlIGZvcgoJX19maW5pOiB0aGlzIGFsbG93cyBpdCB0byBiZSBwbGFjZWQgaW4gYW55IG1lbW9yeSByZWdpb24uCgoJKiBjb25maWcvbTMyci90LW0zMnI6IENvbXBpbGUgY3J0aW5pdC5vIGFuZCBjcnRmaW5pLm8gZm9yCgktbW1vZGVsPW1lZGl1bS4gIFRoaXMgaXMgT0sgZm9yIGFsbCBtZW1vcnkgbW9kZWxzLgoKTW9uIEp1bCAyNiAxMTo1ODo0NiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uYzogUmVwbGFjZSAlUiVzIGluIGFzbV9mcHJpbnRmIHN0cmluZ3Mgd2l0aCAlci4KCSogY29uZmlnL2FybS9hcm0uaDogUmVwbGFjZSAlUiVzIGluIGFzbV9mcHJpbnRmIHN0cmluZ3Mgd2l0aCAlci4KCk1vbiBKdWwgMjYgMTA6MjM6MzYgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGZpbmFsLmMgKGFzbV9mcHJpbnRmKTogQWNjZXB0IEFTTV9GUFJJTlRGX0VYVEVOU0lPTlMsIGlmCglkZWZpbmVkLgoKCSogdG0udGV4aTogRG9jdW1lbnQgQVNNX0ZQUklOVEZfRVhURU5TSU9OUy4KClN1biBKdWwgMjUgMjM6NTE6NTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGk4NjAuaCAoRVhQQU5EX0JVSUxUSU5fU0FWRVJFR1MpOiBOZXcuCgkoQlVJTERfVkFfTElTVF9UWVBFKTogTmV3LgoJKEVYUEFORF9CVUlMVElOX1ZBX1NUQVJUKTogTmV3LgoJKEVYUEFORF9CVUlMVElOX1ZBX0FSRyk6IE5ldy4KCSogaTg2MC5jIChvdXRwdXRfZGVsYXllZF9icmFuY2gpOiBEaXNhYmxlLgoJKG91dHB1dF9kZWxheV9pbnNuKTogTGlrZXdpc2UuCgkoaTg2MF9zYXZlcmVncyk6IE5ldy4KCShpODYwX2J1aWxkX3ZhX2xpc3QpOiBOZXcuCgkoaTg2MF92YV9zdGFydCk6IE5ldy4KCShpODYwX3ZhX2FyZyk6IE5ldy4KCSogaTg2MC5tZDogRGlzYWJsZSBhbGwgcGVlcGhvbGVzIHVzaW5nIG91dHB1dF9kZWxheWVkX2JyYW5jaC4KCSogaTg2MC9zeXN2NC5oIChJODYwX1NWUjRfVkFfTElTVCk6IE5ldy4KClN1biBKdWwgMjUgMjM6NDQ6MTMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNsaXBwZXIuaCAoRVhQQU5EX0JVSUxUSU5fU0FWRVJFR1MpOiBSZW1vdmUgYXJndW1lbnQuCgkoQlVJTERfVkFfTElTVF9UWVBFKTogTmV3LgoJKEVYUEFORF9CVUlMVElOX1ZBX1NUQVJUKTogTmV3LgoJKEVYUEFORF9CVUlMVElOX1ZBX0FSRyk6IE5ldy4KCSogY2xpcHBlci5jIChjbGlwcGVyX2J1aWx0aW5fc2F2ZXJlZ3MpOiBPbmx5IGR1bXAgcmVnaXN0ZXJzLgoJUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzYXZlIGFyZWEuCgkoY2xpcHBlcl9idWlsZF92YV9saXN0KTogTmV3LgoJKGNsaXBwZXJfdmFfc3RhcnQpOiBOZXcuCgkoY2xpcHBlcl92YV9hcmcpOiBOZXcuCgpTdW4gSnVsIDI1IDIyOjU2OjQ3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhcmMuaCAoRVhQQU5EX0JVSUxUSU5fVkFfU1RBUlQpOiBOZXcuCgkoRVhQQU5EX0JVSUxUSU5fVkFfQVJHKTogTmV3LgoJKiBhcmMuYyAoYXJjX3NldHVwX2luY29taW5nX3ZhcmFyZ3MpOiBTZXQgYWxpYXMgc2V0IG9mCgl2YXJhcmdzIHNhdmUgYXJlYS4KCShhcmNfdmFfc3RhcnQpOiBOZXcuCgkoYXJjX3ZhX2FyZyk6IE5ldy4KClN1biBKdWwgMjUgMjI6NDU6NTUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmggKEVYUEFORF9CVUlMVElOX1NBVkVSRUdTKTogRGVsZXRlLgoJKEJVSUxEX1ZBX0xJU1RfVFlQRSk6IE5ldy4KCShFWFBBTkRfQlVJTFRJTl9WQV9TVEFSVCk6IE5ldy4KCShFWFBBTkRfQlVJTFRJTl9WQV9BUkcpOiBOZXcuCgkqIGFscGhhLmMgKGFscGhhX2J1aWx0aW5fc2F2ZXJlZ3MpOiBEZWxldGUuCgkoYWxwaGFfYnVpbGRfdmFfbGlzdCk6IE5ldy4KCShhbHBoYV92YV9zdGFydCk6IE5ldy4KCShhbHBoYV92YV9hcmcpOiBOZXcuCgpTdW4gSnVsIDI1IDIxOjQwOjMzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9zdnI0LmggKENUT1JTX1NFQ1RJT05fQVNNX09QKTogRG8gbm90IGVtaXQgZGlyZWN0aXZlcyBpbgoJY29sdW1uIHplcm8uCgkoRFRPUlNfU0VDVElPTl9BU01fT1AsIElOSVRfU0VDVElPTl9BU01fT1ApOiBMaWtld2lzZS4KCShGSU5JX1NFQ1RJT05fQVNNX09QLCBBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IExpa2V3aXNlLgoKCSogZ2NjLnRleGk6IE1vcmUgY2hhbmdlcyByZWxhdGVkIHRvIGxpc3QgY29udmVyc2lvbi4KCSogaW52b2tlLnRleGk6IExpa2V3aXNlLgoKU3VuIEp1bCAyNSAxODoxNTozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYnVpbHRpbnMuYyAoZXhwYW5kX2J1aWx0aW5fc2F2ZXJlZ3MpOiBSZW1vdmUgc3RhdGljLCByZW1vdmUgZXhwCglhbmQgaWdub3JlIGFyZ3VtZW50cywgYmFpbCBpZiBubyBFWFBBTkRfQlVJTFRJTl9TQVZFUkVHUy4KCShleHBhbmRfYnVpbHRpbl9uZXh0X2FyZyk6IEFjY2VwdCBBUkdMSVNUIG5vdCBFWFAuCgkoc3RhYmlsaXplX3ZhX2xpc3QpOiBOZXcgZnVuY3Rpb24uCgkoc3RkX2V4cGFuZF9idWlsdGluX3ZhX3N0YXJ0KTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9idWlsdGluX3ZhX3N0YXJ0KTogTmV3IGZ1bmN0aW9uLgoJKGdldF92YXJhcmdzX2FsaWFzX3NldCk6IE5ldyBmdW5jdGlvbi4KCShzdGRfZXhwYW5kX2J1aWx0aW5fdmFfYXJnKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9idWlsdGluX3ZhX2FyZyk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfYnVpbHRpbl92YV9lbmQpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX2J1aWx0aW5fdmFfY29weSk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfYnVpbHRpbik6IENhbGwgdGhlbS4KCSogYy1jb21tb24uYyAoY19jb21tb25fbm9kZXNfYW5kX2J1aWx0aW5zKTogQnVpbGQgX19idWlsdGluX3ZhX2xpc3QsCglfX2J1aWx0aW5fe3ZhcmFyZ3Nfc3RhcnQsc3RkYXJnX3N0YXJ0LGVuZCxjb3B5fS4KCShidWlsZF92YV9hcmcpOiBOZXcgZnVuY3Rpb24uCgkqIGMtY29tbW9uLmggKENUSV9QVFJfVFlQRSwgcHRyX3R5cGVfbm9kZSk6IERlbGV0ZS4KCShidWlsZF92YV9hcmcpOiBEZWNsYXJlLgoJKiBjLWRlY2wuYyAocHRyX3R5cGVfbm9kZSwgdmFfbGlzdF90eXBlX25vZGUpOiBOZXcuCgkqIGMtcGFyc2UuZ3BlcmYgKF9fYnVpbHRpbl92YV9hcmcpOiBOZXcuCgkqIGMtcGFyc2UuaW4gKFZBX0FSRyk6IE5ldyB0b2tlbi4KCSh1bmFyeV9leHByKTogUmVjb2duaXplIGl0LgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogRXhwYW5kIFZBX0FSR19FWFBSLgoJKiBleHByLmggKHN0ZF9leHBhbmRfYnVpbHRpbl92YV9zdGFydCk6IERlY2xhcmUuCgkoc3RkX2V4cGFuZF9idWlsdGluX3ZhX2FyZyk6IERlY2xhcmUuCgkoZXhwYW5kX2J1aWx0aW5fdmFfYXJnKTogRGVjbGFyZS4KCShnZXRfdmFyYXJnc19hbGlhc19zZXQpOiBEZWNsYXJlLgoJKiB0cmVlLmRlZiAoVkFfQVJHX0VYUFIpOiBOZXcuCgkqIHRyZWUuaCAoQlVJTFRfSU5fVkFSQVJHU19TVEFSVCk6IE5ldy4KCShCVUlMVF9JTl9TVERBUkdfU1RBUlQsIEJVSUxUX0lOX1ZBX0VORCk6IE5ldy4KCShwdHJfdHlwZV9ub2RlLCB2YV9saXN0X3R5cGVfbm9kZSk6IERlY2xhcmUuCgkqIHRtLnRleGkgKEVYUEFORF9CVUlMVElOX1NBVkVSRUdTKTogS2lsbCB1bnVzZWQgQVJHTElTVCBhcmd1bWVudC4KCSogbTMyci5oIChFWFBBTkRfQlVJTFRJTl9TQVZFUkVHUyk6IExpa2V3aXNlLgoJKiBtODhrLmgsIG04OGsuYzogTGlrZXdpc2UuCgkqIG1uMTAzMDAuaCwgbW4xMDMwMC5jOiBMaWtld2lzZS4KCSogcGEuaCwgcGEuYzogTGlrZXdpc2UuCgkqIHJzNjAwMC5oLCByczYwMDAuYzogTGlrZXdpc2UuCgkqIHNoLmgsIHNoLmM6IExpa2V3aXNlLgoJKiBzcGFyYy5oLCBzcGFyYy5jOiBMaWtld2lzZS4KCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IENvcHkgYWxpYXMgc2V0LgoJKGNoYW5nZV9hZGRyZXNzKTogTGlrZXdpc2UuCgpTdW4gSnVsIDI1IDE1OjA0OjM3IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmMgKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IFNjYW4gYWxsIHRoZSB1c2VkIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMsCglub3QganVzdCB0aGUgZmlyc3Qgb25lLgoKRnJpIEp1bCAyMyAxNDowOTo1OCAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCgkqIGNvbmZpZy9hcm0vYXJtLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZAoJLW17bm8tfXNpbmdsZS1waWMtYmFzZS4gIENvcnJlY3QgaGVscCBzdHJpbmcgZm9yIC1tc2hvcnQtbG9hZC13b3Jkcy4KCShUQVJHRVRfT1BUSU9OUyk6IEFkZCAtbXBpYy1yZWdpc3Rlcj0uCgkoQVJNX0ZMQUdfU0lOR0xFX1BJQ19CQVNFLCBUQVJHRVRfU0lOR0xFX1BJQ19CQVNFKTogRGVmaW5lLgoJKGFybV9waWNfcmVnaXN0ZXJfc3RyaW5nKTogRGVjbGFyZS4KCShORUVEX1BMVF9HT1QpOiBEZWxldGUsIHJlcGxhY2Ugd2l0aCAuLi4KCShORUVEX0dPVF9SRUxPQywgTkVFRF9QTFRfUkVMT0MpOiAuLi4gdGhlc2UuICBOZXcgbWFjcm9zLgoJKE9VVFBVVF9JTlRfQUREUl9DT05TVCk6IFJlcGxhY2UgTkVFRF9QTFRfR09UIHdpdGggTkVFRF9HT1RfUkVMT0MuCgkoQVNNX09VVFBVVF9NSV9USFVOSyk6IFJlcGxhY2UgTkVFRF9QTFRfR09UIHdpdGggTkVFRF9QTFRfUkVMT0MuCgkqIGNvbmZpZy9hcm0vYXJtLmMgKGFybV9vdmVycmlkZV9vcHRpb25zKTogQWRkIG5ldyBvcHRpb24KCS1tcGljLXJlZ2lzdGVyPU4uCgkoYXJtX3BpY19yZWdpc3Rlcl9zdHJpbmcpOiBOZXcgdmFyaWFibGUuCgkoYXJtX2ZpbmFsaXplX3BpYyk6IFJlc3BlY3QgVEFSR0VUX1NJTkdMRV9QSUNfQkFTRS4KCShvdXRwdXRfZnVuY19wcm9sb2d1ZSk6IElmIFRBUkdFVF9TSU5HTEVfUElDX0JBU0UsIHRyZWF0IHRoZSBQSUMKCXJlZ2lzdGVyIGFzIG5ldmVyIGxpdmUuICBVc2UgTkVFRF9QTFRfUkVMT0Mgbm90IE5FRURfUExUX0dPVC4KCShvdXRwdXRfcmV0dXJuX2luc3RydWN0aW9uKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9hcm0vZWxmLmggKE5FRURfUExUX0dPVCk6IERlbGV0ZSwgcmVwbGFjZSB3aXRoIC4uLgoJKE5FRURfR09UX1JFTE9DLCBORUVEX1BMVF9SRUxPQyk6IC4uLiB0aGVzZS4gIERlZmluZSB0byBmbGFnX3BpYy4KCSogY29uZmlnL2FybS9hcm0ubWQ6IFVzZSBORUVEX1BMVF9SRUxPQyBpbiBwbGFjZSBvZiBORUVEX1BMVF9HT1QuCgoJKiBpbnZva2UudGV4aSAoQVJNIE9wdGlvbnMpOiBGaXggc3BlbGxpbmcuICBSZW1vdmUgZHVwbGljYXRlCgltZW50aW9uIG9mIC1tc2NoZWQtcHJvbG9nLiAgRG9jdW1lbnQgbmV3IG9wdGlvbnMgLW1zaW5nbGUtcGljLWJhc2UKCWFuZCAtbXBpYy1yZWdpc3Rlcj0uCgpUaHUgSnVsIDIyIDE4OjIzOjU2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChyZWVtaXRfbm90ZXMpOiBUaWR5LgoJKiBzY2hlZC5jIChyZWVtaXRfbm90ZXMpOiBEdXBsaWNhdGUgMTk5OC0wOC0zMSBwYXRjaCB0bwoJaGFpZmEncyByb3V0aW5lLgoKVGh1IEp1bCAyMiAxODoyMTowNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwbG93LmMgKHRydW5jX2ludF9mb3JfbW9kZSk6IE5ldyBmdW5jdGlvbi4KCShwbHVzX2NvbnN0YW50X3dpZGUpOiBVc2UgaXQuCgkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfYW5kX2NvbnN0X2ludCk6IExpa2V3aXNlLgoJKG1lcmdlX291dGVyX29wcyk6IExpa2V3aXNlLgoJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogTGlrZXdpc2UuCgkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBMaWtld2lzZS4KCShzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uKTogTGlrZXdpc2UuCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IExpa2V3aXNlLgoJKiBydGwuaDogRGVjbGFyZSBpdC4KClRodSBKdWwgMjIgMTQ6MzQ6NTkgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fcHJpbnRfb3BlcmFuZCk6IEZpeCB0eXBvIGluICdNJyBjYXNlCgkodXNlIE5VTV9SRUdTIGluc3RlYWQgb2YgTlVNX0lOVFMpLgoKVGh1IEp1bCAyMiAxMToyNToyMCAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGJ1aWx0aW5zLmM6IE5ldyBmaWxlLgoJKiBleHByLmMgKHNhdmVyZWdzX3ZhbHVlLCBhcHBseV9hcmdzX3ZhbHVlKTogIERlbGV0ZSBkZWZpbml0aW9uLAoJbW92ZWQgaW50byBidWlsdGlucy5jLgoJKHN0cmluZ19jb25zdGFudCk6IE5vIGxvbmdlciBzdGF0aWMuCgkoZ2V0X3BvaW50ZXJfYWxpZ25tZW50LCBjX3N0cmxlbiwgZ2V0X21lbW9yeV9ydHgsIGV4cGFuZF9idWlsdGluLAoJYXBwbHlfYXJnc19zaXplLCBhcHBseV9yZXN1bHRfc2l6ZSwgcmVzdWx0X3ZlY3RvciwKCWV4cGFuZF9idWlsdGluX2FwcGx5X2FyZ3MsIGV4cGFuZF9idWlsdGluX2FwcGx5LAoJZXhwYW5kX2J1aWx0aW5fcmV0dXJuKTogRGVsZXRlIGZ1bmN0aW9ucywgbW92ZWQgaW50byBidWlsdGlucy5jLgoJKElOQ09NSU5HX1JFR05PLCBPVVRHT0lOR19SRUdOTyk6IERlbGV0ZSB1bnVzZWQgbWFjcm9zLgoJKiBleHByLmggKHNhdmVyZWdzX3ZhbHVlLCBhcHBseV9hcmdzX3ZhbHVlKTogRGVjbGFyZSB2YXJpYWJsZXMuCgkoZXhwYW5kX2J1aWx0aW4sIHN0cmluZ19jb25zdGFudCk6IERlY2xhcmUgZnVuY3Rpb25zLgoJKiBNYWtlZmlsZS5pbjogVXBkYXRlIHRvIGJ1aWxkIGJ1aWx0aW4uby4KCldlZCBKdWwgMjEgMDA6NDY6NTggMTk5OSAgTWFyayBQLiBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlZmF1bHRzLmggKERXQVJGMl9HRU5FUkFURV9URVhUX1NFQ1RJT05fTEFCRUwpOiBOZXcgbWFjcm8uCgkqIHRtLnRleGkgKERXQVJGMl9HRU5FUkFURV9URVhUX1NFQ1RJT05fTEFCRUwpOiBEZWZpbmUgaXQuCgkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfaW5pdCk6IERvbid0IG91dHB1dCBhIGxhYmVsIHRvIG1hcmsgdGhlCglzdGFydCBvZiB0aGUgdGV4dCBzZWN0aW9uIGlmIERXQVJGMl9HRU5FUkFURV9URVhUX1NFQ1RJT05fTEFCRUwgaXMKCWZhbHNlLgoJKiBjb25maWcvbWlwcy9pcmlzNi5oIChEV0FSRjJfR0VORVJBVEVfVEVYVF9TRUNUSU9OX0xBQkVMKToKCURlZmluZSB0byB6ZXJvLgoKMTk5OS0wNy0yMSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogUHJpbnQgdGhlIG5hbWVzIG9mIHRoZSB2aXJ0dWFsCglyZWdpc3RlcnMuCgpXZWQgSnVsIDIxIDE2OjAwOjMyIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5oIChJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IEZpeCB0eXBvCglpbnRyb2R1Y2VkIGluIHByZXZpb3VzIGRlbHRhLgoKV2VkIEp1bCAyMSAxNDozMDo1MSAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGMtbGFuZy5jIChmaW5pc2hfZmlsZSk6IFJlbmFtZSB2b2lkX2xpc3Rfbm9kZSB0byB2b2lkX2xpc3Rfbm9kZV8xCgl0byBhdm9pZCBuYW1lIGNsYXNoLgoKV2VkIEp1bCAyMSAwODozOToyMiAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KSA6IENvcnJlY3QgdGhlIHRlc3QgZm9yIG92ZXJmbG93IHdoZW4gbGV4aW5nCglpbnRlZ2VyIGxpdGVyYWxzLgoKVHVlIEp1bCAyMCAxODowMjo0MiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaGFpZmEtc2NoZWQuYyAoaW5zbl9jb3N0KTogRlJFRSBpbXBsaWVzIGNvc3QgMCBhbmQgdmljZSB2ZXJzYS4KCShhZGp1c3RfcHJpb3JpdHkpOiBBbHdheXMgY2FsbCBBREpVU1RfUFJJT1JJVFkuCgkoc2NoZWR1bGVfaW5zbik6IE9ubHkgcHV0IGluc25zIGludG8gdGhlIHJlYWR5IGF0IGNvc3QgMC4KCShzY2hlZHVsZV9ibG9jayk6IFJlbW92ZSByZWR1bmRhbnQgaW5pdGlhbCBzb3J0LiAgR2l2ZSBjbG9ja192YXIKCWFuZCBjYW5faXNzdWVfbW9yZSB0byBNRF9TQ0hFRF9SRU9SREVSLiAgUmVxdWV1ZSBpZiBoYXphcmQgY29zdAoJaXMgbm90IDAuCgkqIHRtLnRleGkgKE1EX1NDSEVEX1JFT1JERVIpOiBVcGRhdGUgZG9jcy4KCgkqIHNwYXJjLmggKE1EX1NDSEVEX1JFT1JERVIpOiBVcGRhdGUuICBTZXQgQ0FOX0lTU1VFX01PUkUuCgkqIHNwYXJjLmMgKHVsdHJhX3Jlb3JkZXJfY2FsbGVkX3RoaXNfYmxvY2spOiBEZWxldGUuCgkodWx0cmFzcGFyY19zY2hlZF9pbml0KTogRG9uJ3Qgc2V0IGl0LgoJKHVsdHJhc3BhcmNfc2NoZWRfcmVvcmRlcik6IERvbid0IGNoZWNrIGl0LgoKVHVlIEp1bCAyMCAxNzowNzo1NCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKHN0cnVjdCByczYwMDBfYXJncyk6IEFkZCBzeXN2X2dyZWduby4KCSogcnM2MDAwLmMgKGluaXRfY3VtdWxhdGl2ZV9hcmdzKTogSW5pdCBzeXN2X2dyZWduby4KCShmdW5jdGlvbl9hcmdfYm91bmRhcnkpOiBBbGlnbiBERm1vZGUuCgkoZnVuY3Rpb25fYXJnX2FkdmFuY2UpOiBSZXN0cnVjdHVyZSBmb3IgQUJJX1Y0OyB1c2Ugc3lzdl9ncmVnbm8KCXRvIGdldCBmcCByZWcgYW5kIHN0YWNrIG92ZXJmbG93IGNvcnJlY3QuCgkoZnVuY3Rpb25fYXJnKTogTGlrZXdpc2UuCgkoZnVuY3Rpb25fYXJnX3Bhc3NfYnlfcmVmZXJlbmNlKTogVHJ1ZSBmb3IgVEZtb2RlIGZvciBBQklfVjQuCgkoc2V0dXBfaW5jb21pbmdfdmFyYXJncyk6IFJlc3RydWN0dXJlIGZvciBBQklfVjQ7IHVzZQoJZnVuY3Rpb25fYXJnX2FkdmFuY2UgdG8gc2tpcCBmaW5hbCBuYW1lZCBhcmd1bWVudC4KCShleHBhbmRfYnVpbHRpbl9zYXZlcmVncyk6IFByb3Blcmx5IHVuc2tpcCB0aGUgbGFzdCBpbnRlZ2VyIGFyZwoJd2hlbiBkb2luZyB2YXJhcmdzLiAgQWRqdXN0IG92ZXJmbG93IGxvY2F0aW9uIGNhbGN1bGF0aW9uLgoKCSogZ2luY2x1ZGUvdmEtcHBjLmggKHN0cnVjdCBfX3ZhX2xpc3RfdGFnKTogTWFrZSBncHIgYW5kIGZwcgoJZXhwbGljaXRseSB1bnNpZ25lZC4KCShfX1ZBX0ZQX1JFR1NBVkUpOiBVc2UgbmV3IE9GUyBhcmd1bWVudCBpbnN0ZWFkIG9mIEFQLT5mcHIgZGlyZWN0bHkuCgkoX19WQV9HUF9SRUdTQVZFKTogU2ltaWxhcmx5LgoJKF9fdmFfbG9uZ2xvbmdfcCk6IERlbGV0ZS4KCShfX3ZhX2FyZ190eXBlX3Zpb2xhdGlvbik6IE5ldyBkZWNsYXJhdGlvbi4KCSh2YV9hcmcpOiBSZXN0cnVjdHVyZS4gIEZsYWcgcHJvbW90aW9uIGVycm9ycy4gIEFsaWduIGRvdWJsZS4KCVRGbW9kZSBwYXNzZWQgYnkgcmVmZXJlbmNlLgoKCSogcnM2MDAwLm1kIChtb3ZkaV8zMisxKTogVXNlIEdFTl9JTlQgYWZ0ZXIgYXJpdGhtZXRpYwoJaW4gdGhlIEhPU1RfQklUU19QRVJfV0lERV9JTlQgPiAzMiBjYXNlLgoKVHVlIEp1bCAyMCAxMjozNzozMCAxOTk5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBiaXRyYW5nZS5jb20+CgoJKiBkd2FyZjJvdXQuYyAob3V0cHV0X2FiYnJldl9zZWN0aW9uKTogVGVybWluYXRlIHdpdGggYSB6ZXJvLgoKVHVlIEp1bCAyMCAxMjoxMjoyNyAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMsIGNwcC1vdXRwdXQpOiBQYXNzIC1mcHJlcHJvY2Vzc2VkLgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBBZGQgLWZwcmVwcm9jZXNzZWQuCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX2J1ZmZlcik6IEFkZCBwcmVwcm9jZXNzZWQuCgkqIGNwcGluaXQuYyAoY3BwX2hhbmRsZV9vcHRpb24pOiBIYW5kbGUgLWZwcmVwcm9jZXNzZWQuCgkoY3BwX3N0YXJ0X3JlYWQpOiBEb24ndCBleHBhbmQgbWFjcm9zIG9yIGVtaXQgYW4gaW5pdGlhbCAjbGluZQoJZGlyZWN0aXZlIGlmIC1mcHJlcHJvY2Vzc2VkLgoKVHVlIEp1bCAyMCAxMjoxMjowOSAxOTk5ICBNaWNoYWVsIFRpZW1hbm4gIDx0aWVtYW5uQGhvbG9kZWNrLmN5Z251cy5jb20+CgoJKiBjcHBsaWIuaCAoc3RydWN0IGNwcF9idWZmZXIpOiBBZGRlZCBtYW51YWxfcG9wIGZvcgoJYmV0dGVyIEMrKyB0b2tlbml6YXRpb24uCgkqIGNwcGxpYi5jIChjcHBfZ2V0X3Rva2VuKTogUmV0dXJuIENQUF9FT0YgaWYgbWFudWFsX3BvcC4KCUFsc28sIHN1cHBvcnQgQysrIHRva2VuaXphdGlvbiBmb3IgLT4qLCAuKiwgPD8sIGFuZCA+PyBvcGVyYXRvcnMuCgkqIGMtY29tbW9uLmMgKGNwcF90b2tlbik6IE1ha2Ugbm9uLXN0YXRpYy4KClR1ZSBKdWwgMjAgMTE6MjQ6MTkgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBjLWNvbW1vbi5oOiBOZXcgZmlsZS4KCSogYy1jb21tb24uYyAocGVybWFuZW50X29ic3RhY2spOiBEZWxldGUgdW51c2VkIGRlY2xhcmF0aW9uLgoJKGNfZ2xvYmFsX3RyZWVzKTogTmV3IGFycmF5LgoJKGNfY29tbW9uX25vZGVzX2FuZF9idWlsdGlucyk6IE5ldyBmdW5jdGlvbjsgc3BsaXQgb2ZmIGNvbW1vbiBjb2RlCglmcm9tIGluaXRfZGVjbF9wcm9jZXNzaW5nIGluIGJvdGggYy1kZWNsLmMgYW5kIGNwL2RlY2wuYy4KCSogYy10cmVlLmg6IERlbGV0ZSBsb3RzIG9mIGRlY2xhcmF0aW9ucyBvZiB0cmVlIG5vZGVzOyByZXBsYWNlZCBieQoJY19nbG9iYWxfdHJlZXMgYW5kIGFjY2Vzc29yIG1hY3JvcyBkZWZpbmVkIGluIGMtY29tbW9uLmguCglJbmNsdWRlIGMtY29tbW9uLmguCgkqIGMtZGVjbC5jOiBEZWxldGUgZGVmaW5pdGlvbnMgZm9yIHRyZWUgbm9kZXMgdGhhdCB3ZXJlIHJlcGxhY2VkIGJ5CgljX2dsb2JhbF90cmVlcy4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEJ1aWxkIHZvaWRfbGlzdF9ub2RlLgoJQ2FsbCBjX2NvbW1vbl9ub2Rlc19hbmRfYnVpbHRpbnM7IGRlbGV0ZSBjb2RlIHRvIGdlbmVyYXRlIHRoZSBjb21tb24KCWJ1aWx0aW5zIGhlcmUuCgkqIG9iamMvb2JqYy1hY3QuYyAoYnVpbGRfbW9kdWxlX2Rlc2NyaXB0b3IpOiBSZW5hbWUgdmFyaWFibGUKCXZvaWRfbGlzdF9ub2RlIHRvIGF2b2lkIGNsYXNoIHdpdGggYy1jb21tb24uaC4KCgkqIE1ha2VmaWxlLmluOiBVcGRhdGUgZGVwZW5kZW5jaWVzLgoJKiBvYmpjL01ha2UtbGFuZy5pbjogTGlrZXdpc2UuCgpNb24gSnVsIDE5IDE0OjIyOjE4IDE5OTkgIE1hcmsgUC4gTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjb25maWcvbWlwcy9pcmlzNmdsZC5oIChNQUtFX0RFQ0xfT05FX09OTFkpOiBEZWZpbmUuCgkoVU5JUVVFX1NFQ1RJT05fUCk6IExpa2V3aXNlLgoJKFVOSVFVRV9TRUNUSU9OKTogTGlrZXdpc2UuCgoxOTk5LTA3LTE5ICBMaW5hcyBWZXBzdGFzICA8bGluYXNAbGluYXMub3JnPgoKCSogY29uZmlnL2kzNzAvUkVBRE1FOiBOZXcgZmlsZS4KCSogY29uZmlnL2kzNzAvbGludXguaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9pMzcwL212cy5oOiBOZXcgZmlsZS4KCSogY29uZmlnL2kzNzAvb2UuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9pMzcwL3QtbGludXg6IE5ldyBmaWxlLgoJKiBjb25maWcvaTM3MC90LW12czogTmV3IGZpbGUuCgkqIGNvbmZpZy9pMzcwL3Qtb2U6IE5ldyBmaWxlLgoJKiBjb25maWcvaTM3MC94LW9lOiBOZXcgZmlsZS4KCSogY29uZmlnL2kzNzAveG0tbGludXguaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9pMzcwL3htLW12cy5oOiBOZXcgZmlsZS4KCSogY29uZmlnL2kzNzAveG0tb2UuaDogTmV3IGZpbGUuCgoJKiBpMzcwLmMgKGxhYmVsX25vZGVfdCk6IEFkZCBmaXJzdF9yZWZfcGFnZSwgbGFiZWxfYWRkciwKCWxhYmVsX2ZpcnN0X3JlZiwgbGFiZWxfbGFzdF9yZWYgbWVtYmVycy4KCShtdnNfbmVlZF9iYXNlX3JlbG9hZCk6IFJlbmFtZWQgZnJvbSBtdnNfbGFiZWxfZW1pdHRlZC4KCShNQVhfTVZTX0xBQkVMX1NJWkUpOiBEZWZpbmUuCgkoTUFYX0xPTkdfTEFCRUxfU0laRSk6IERlZmluZS4KCShhbGlhc19ub2RlX3QsIGFsaWFzX2FuY2hvciwgYWxpYXNfbnVtYmVyKTogTmV3LgoJKG12c19mdW5jdGlvbl90YWJsZSk6IFJlb3JkZXIgZm9yIEVCQ0RJQy4KCShhc2NlYmMsIGViY2FzYyk6IFVuY29uZGl0aW9uYWxseSBkZWZpbmUuCgkoaTM3MF9icmFuY2hfZGVzdCwgaTM3MF9icmFuY2hfbGVuZ3RoKTogTmV3IGZ1bmN0aW9ucy4KCShpMzcwX3Nob3J0X2JyYW5jaCwgaTM3MF9sYWJlbF9zY2FuKTogTmV3IGZ1bmN0aW9ucy4KCShtdnNfZ2V0X2xhYmVsKTogUmVuYW1lZCBmcm9tIG12c19hZGRfbGFiZWwuICBTZWFyY2ggZm9yCglhbiBleGlzdGluZyBsYWJlbCBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lLgoJKG12c19hZGRfbGFiZWwpOiBOZXcgZnVuY3Rpb24uCgkobXZzX2dldF9sYWJlbF9wYWdlKTogTmV3IGZ1bmN0aW9uLgoJKG12c19mcmVlX2xhYmVsX2xpc3QpOiBSZW5hbWVkIGZyb20gbXZzX2ZyZWVfbGFiZWwuICBJdGVyYXRlCglvdmVyIHRoZSBlbnRpcmUgbGlzdC4KCShtdnNfY2hlY2tfcGFnZSkgW1RBUkdFVF9ITEFTTV06IFVzZSBCQVNSIG5vdCBCQUxSLgoJKG12c19jaGVja19wYWdlKSBbVEFSR0VUX0VMRl9BQkldOiBOZXcgZnVuY3Rpb24uCgkobXZzX2FkZF9hbGlhcywgbXZzX25lZWRfYWxpYXMpOiBOZXcgZnVuY3Rpb25zLgoJKG12c19nZXRfYWxpYXMsIG12c19jaGVja19hbGlhcyk6IE5ldyBmdW5jdGlvbnMuCgkoaGFuZGxlX3ByYWdtYSk6IE5ldyBmdW5jdGlvbi4KCShtdnNfZnVuY3Rpb25fY2hlY2spOiBOZXcgZnVuY3Rpb24uCgkodW5zaWduZWRfanVtcF9mb2xsb3dzX3ApOiBTZWFyY2ggaGFyZGVyLgoJKGkzNzBfZnVuY3Rpb25fcHJvbG9nKSBbVEFSR0VUX0hMQVNNXTogSGFuZGxlIExFMzcwLiAgU2NhbiBsYWJlbHMuCgkoaTM3MF9mdW5jdGlvbl9wcm9sb2cpIFtUQVJHRVRfRUxGX0FCSV06IE5ldyBmdW5jdGlvbi4KCSogaTM3MC5oIChUQVJHRVRfVkVSU0lPTik6IERlbGV0ZS4KCShDUFBfU1BFQywgQ1BQX1BSRURFRklORVMpOiBEZWxldGUuCgkobXZzX2xhYmVsX2VtaXR0ZWQpOiBEZWxldGUuCgkoVEFSR0VUX0VCQ0RJQyk6IERlbGV0ZS4KCShNQVBfQ0hBUkFDVEVSKTogRGVmaW5lIG9ubHkgaWYgVEFSR0VUX0VCQ0RJQy4KCShIQU5ETEVfUFJBR01BKTogRGVmaW5lLgoJKEhBUkRfUkVHTk9fTlJFR1MpOiBIYW5kbGUgY29tcGxleCBtb2Rlcy4KCShIQVJEX1JFR05PX01PREVfT0spOiBMaWtld2lzZS4KCShDTEFTU19NQVhfTlJFR1MpOiBMaWtld2lzZS4KCShSRVRfUkVHKTogTGlrZXdpc2UuCgkoRVhUUkFfQ09OU1RSQUlOVCk6IERlZmluZS4KCShSRVRVUk5fSU5fTUVNT1JZKTogVHJ1ZSBmb3IgREltb2RlLgoJKFRSQU1QT0xJTkVfVEVNUExBVEUpOiBVc2UgZ2VuX3J0eCBpbnN0ZWFkIG9mIEdFTl9JTlQuCgkoRlVOQ1RJT05fUFJPRklMRVIpOiBEZWxldGUuCgkoQ09VTlRfUkVHUyk6IEZhaWwgaWYgUkVHX1AgYnV0IG5vdCBSRUdfT0tfRk9SX0JBU0VfUC4KCShOT1RJQ0VfVVBEQVRFX0NDKTogQ29ycmVjdCBoYW5kbGluZyBvZiBNVUxULCBESVYsIGxvZ2ljYWxzIGFuZCBzaGlmdHMuCgkoVEFSR0VUX0VTQywgVEFSR0VUX0JFTEwpOiBDb25kaXRpb25hbGx5IGRlZmluZSBmb3IgVEFSR0VUX0VCQ0RJQy4KCShUQVJHRVRfQlMsIFRBUkdFVF9UQUIsIFRBUkdFVF9ORVdMSU5FKTogTGlrZXdpc2UuCgkoVEFSR0VUX1ZULCBUQVJHRVRfRkYsIFRBUkdFVF9DUik6IExpa2V3aXNlLgoJKEFTTV9GSUxFX1NUQVJUKTogQWRkICJSTU9ERSBBTlkiLgoJKEFTTV9PVVRQVVRfRVhURVJOQUwpOiBDaGVjayBmb3IgYWxpYXNlcy4KCShBU01fR0xPQkFMSVpFX0xBQkVMKTogTGlrZXdpc2UuCgkoQVNNX09VVFBVVF9MQUJFTFJFRik6IExpa2V3aXNlLgoJKEFTTV9PVVRQVVRfQ09NTU9OKTogTGlrZXdpc2UuCgkoUFJJTlRfT1BFUkFORCk6IEhhbmRsZSAnSycsICdXJywgZGVmYXVsdC4KCShQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBOZXcuCgkoTG90cyBvZiBkZWZpbmVzKTogQWRkIHN1cHBvcnQgZm9yIFRBUkdFVF9FTEZfQUJJLgoJKiBpMzcwLm1kIChhdHRyIGxlbmd0aCk6IE5ldy4gIERlZmluZSBmb3IgYWxsIHBhdHRlcm5zLgoJKCopOiBMb3RzIG9mIHR3ZWVrcyB0byBhc3NlbWJseSBvdXRwdXQgYW5kIGNvbnN0cmFpbnRzLgoKTW9uIEp1bCAxOSAxNTowOToyOSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGFyaXRobWV0aWMsIGxvZ2ljYWwsIGFuZCBzaGlmdCBSYyBjb21iaW5lciBwYXR0ZXJucyk6CglEaXNhYmxlIHBhdHRlcm5zIHBlcmZvcm1pbmcgU0ltb2RlIGNvbXBhcmlzb25zIHdpdGggU0ltb2RlIHZhbHVlcwoJaWYgVEFSR0VUX1BPV0VSUEM2NCBhbmQgaW5zdHJ1Y3Rpb24gZG9lcyBub3Qgc2lnbi1leHRlbmQgb3IgZG9lcwoJbm90IG1hc2sgdG8gbmFycm93ZXIgdGhhbiBTSW1vZGUsIGkuZS4gd2hlcmUgYml0IDMxIGFuZCBiaXQgNjMgbWF5CglkaWZmZXIgZm9yIHNpZ25lZCBxdWFudGl0aWVzLgoJKGluZGlyZWN0X2p1bXApOiBBZGQgZXhwYW5kZXIgdG8gY2hvb3NlIFJUTCBiYXNlZCBvbiBUQVJHRVRfNjRCSVQuCgkodGFibGVqdW1wKTogUGF0dGVybnMgY29udGluZ2VudCBvbiBUQVJHRVRfNjRCSVQgbm90IFRBUkdFVF9QT1dFUlBDNjQuCgkoZGVjcmVtZW50X2FuZF9icmFuY2hfb25fY291bnQpOiBBZGQgNjQtYml0IHZhcmlhbnQuCgpNb24gSnVsIDE5IDA5OjM2OjI3IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZmluYWwuYyAob3V0cHV0X2FzbV9pbnNuKTogV2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBtYXRjaGluZyBzdHJpbmcKCWZvciBhIGdpdmVuIGRpYWxlY3QsIGRvbid0IHJ1biBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpc3Qgb2YKCWFsdGVybmF0aXZlcyBpZiB0aGVyZSBhcmUgZmV3ZXIgYWx0ZXJuYXRpdmVzIGluIHRoZSB0ZW1wbGF0ZSB0aGFuCglkaWFsZWN0cy4KCjE5OTktMDctMTcgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogZ2NjLnRleGk6IFVwZGF0ZSBlLW1haWwgYWRkcmVzc2VzIGFuZCBVUkxzIHRvIGdjYy5nbnUub3JnLgoJUmVtb3ZlZCBwYXJhZ3JhcGggYWJvdXQgY29tcHJlc3Npb24gb2YgZmlsZXMgYW5kIHNpemUgbGltaXRhdGlvbiwKCWR1cGxpY2F0ZWQgaW4gdGhlIEZBUS4gIFVzZSBnY2MtcGF0Y2hlcyBmb3IgcG9zdGluZyBwYXRjaGVzLgoJKiBnY2MuYyAobWFpbik6IFVwZGF0ZWQgVVJMIHdpdGggYnVnIHJlcG9ydGluZyBpbnN0cnVjdGlvbnMgdG8KCWdjYy5nbnUub3JnLiAgUmVtb3ZlZCBlLW1haWwgYWRkcmVzcy4KCSogc3lzdGVtLmggKGFib3J0KTogTGlrZXdpc2UuCgoxOTk5LTA3LTE3ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoc3RtcC1tdWx0aWxpYi1zdWIpOiBNYWtlIHRoZSBmaWxlcyBleHRyYWN0ZWQKCWZyb20gJChMSUJHQ0MxKSB3cml0YWJsZS4KClNhdCBKdWwgMTcgMTQ6MjU6NDYgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYW91dC5oOiBSZWZvcm1hdCBmb3IgaW1wcm92ZWQgcmVhZGFiaWxpdHkuCgoJKiBjb25maWcvYXJtL2FybS5oOiBSZWZvcm1hdCBmb3IgaW1wcm92ZWQgcmVhZGFiaWxpdHkuCglSZXBsYWNlIHVzZXMgb2YgZnByaW50ZiB3aXRoIGFzbV9mcHJpbnRmIHdoZXJlIGFwcHJvcHJpYXRlLgoJKEFSTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBOZXcgbWFjcm86ICBQZXJmb3JtIGFueSBnZW5lcmljIEFSTQoJZnVuY3Rpb24gZGVjbGFyYXRpb24gYXNzZW1ibGVyIGFjdGlvbnMuCgkoTlVNX0lOVFMpOiBOZXcgbWFjcm86IENvbnZlcnQgZnJvbSBieXRlcyB0byB3b3Jkcy4KCShOVU1fUkVHUyk6IE5ldyBtYWNybzogQ29tcHV0ZSBudW1iZXIgb2YgcmVnaXN0ZXJzIHJlcXVpcmVkIHRvCglob2xkIGEgcXVhbml0aXR5IG9mIHR5ZXAgTU9ERS4KCShOVU1fUkVHUzIpOiBOZXcgbWFjcm86IExpa2UgTlVNX1JFR1MgYnV0IGFsc28gY29wZXMgd2l0aCBCTEttb2RlCgl0eXBlcy4KCShOVU1fQVJHX1JFR1MpOiBOZXcgbWFjcm86IFRoZSBudW1iZXIgb2YgYXJndW1lbnQgcmVnaXN0ZXJzCglhdmFpbGFibGUuCgkoQVJHX1JFR0lTVEVSKTogTmV3IG1hY3JvOiBDb21wdXRlIHRoZSByZWdpc3RlciBudW1iZXIgb2YgdGhlIE50aAoJYXJndW1lbnQgcmVnaXN0ZXIuCgkoTEFTVF9BUkdfUkVHTlVNKTogTmV3IG1hY3JvOiBUaGUgbnVtYmVyIG9mIHRoZSBsYXN0IGFyZ3VtZW50CglyZWdpc3Rlci4KCShTUF9SRUdOVU0pOiBOZXcgbWFjcm86IFJlZ2lzdGVyIG51bWJlciBvZiB0aGUgc3RhY2sgcG9pbnRlci4KCShGUF9SRUdOVU0pOiBOZXcgbWFjcm86IFJlZ2lzdGVyIG51bWJlciBvZiB0aGUgZnJhbWUgcG9pbnRlci4KCShGVU5DVElPTl9BUkcsIEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTLCBJTklUX0NVTVVMQVRJVkVfQUdTLAoJRlVOQ1RJT05fQVJHX0FEVkFOQ0UsIFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBDaGFuZ2UKCUNVTVVMQVRJVkVfQVJHUyBzbyB0aGF0IGl0IGNvdW50cyByZWdpc3RlcnMgbm90IGJ5dGVzLgoKCSogY29uZmlnL2FybS9hcm0uYzogUmVuYW1lIFRBUkdFVF9USFVNQl9JTlRFUldPUksgdG8KCVRBUkdFVF9JTlRFUldPUksuCglSZXBsYWNlIHVzZXMgb2YgZnByaW50ZiB3aXRoIGFzbV9mcHJpbnRmIHdoZXJlIGFwcHJvcHJpYXRlLgoJKG91dHB1dF9hc2NpaV9wc2V1ZG9fb3ApOiBSZXBsYWNlIHdpdGggdmVyc2lvbiBmcm9tIHRodW1iLmMKCgkqIGNvbmZpZy9hcm0vY29mZi5oIChBU01fRklMRV9TVEFSVCk6IEVtaXQgQVNNX0FQUF9PRkYuCgoJKiBjb25maWcvYXJtL2VsZi5oIChDUFBfUFJFREVGSU5FUyk6IFJlcGxhY2Ugd2l0aAoJU1VCVEFSR0VUX0NQUF9TUEVDLgoJKEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUpOiBVc2UgQVJNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRS4KCShBU01fRklMRV9TVEFSVCk6IEVtaXQgQVNNX0FQUF9PRkYuCgpGcmkgSnVsIDE2IDEzOjQ4OjA5IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmMgKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IFJvdW5kIGZyYW1lIGFjY29yZGluZyB0bwoJU1RBQ0tfQk9VTkRBUlkgcmF0aGVyIHRoYW4gYSBoYXJkd2lyZWQgdmFsdWUuCgoJKiBwYS5oIChQT0lOVEVSX1NJWkUsIFBBUk1fQk9VTkRBUlkpOiBEZWZpbmUgaW4gdGVybXMgb2YgQklUU19QRVJfV09SRC4KCgkqIGNvbmZpZ3VyZS5pbiAoaHBwYSotKi1ocHV4MTEqKTogVXNlIHN5bWJvbGljIE1BU0tfUEFfMTEgaW5zdGVhZAoJb2YgIjEiLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoJKiBjb25maWd1cmUuaW4gKGhwcGEqLSotbGludXgqKTogTmV3IGNvbmZpZ3VyYXRpb24uCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogcGEuaCAoTUFYX09GSUxFX0FMSUdOTUVOVCk6IERlbGV0ZS4KCSogcGEvc29tLmggKE1BWF9PRklMRV9BTElHTk1FTlQpOiBEZWZpbmUuCgkqIHBhL3BhLWxpbnV4Lmg6IE5ldyBmaWxlLgoJKiBwYS90LWxpbnV4OiBOZXcgZmlsZS4KCSogcGEveG0tbGludXguaDogTmV3IGZpbGUuCgoJKiBwYS5jIChocHBhX2xlZ2l0aW1pemVfYWRkcmVzcyk6IENoYW5nZSByZWZlcmVuY2VzIGZyb20gU0ltb2RlIHRvCgllaXRoZXIgUG1vZGUgb3Igd29yZF9tb2RlIGFzIGFwcHJvcHJpYXRlLgoJKGVtaXRfbW92ZV9zZXF1ZW5jZSwgc3RvcmVfcmVnLCBsb2FkX3JlZyk6IExpa2V3aXNlLgoJKHNldF9yZWdfcGx1c19kLCBocHBhX2V4cGFuZF9wcm9sb2d1ZSk6IExpa2V3aXNlLgoJKG91dHB1dF9tdWxfaW5zbik6IExpa2V3aXNlLgoJKiBwYS5oIChQUk9NT1RFX01PREUpOiBMaWtld2lzZS4KCShJTklUSUFMWkVfVFJBTVBPTElORSk6IExpa2V3aXNlLgoJKFBtb2RlKTogRGVmaW5lIHRvIHdvcmRfbW9kZS4KCgkqIHBhLmMgKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IFVzZSBVTklUU19QRVJfV09SRCBpbnN0ZWFkIG9mIGhhcmR3aXJlZAoJdmFsdWUgb2YgNC4gIEFsbG9jYXRlIDggYnl0ZXMgZm9yIGVhY2ggRlAgcmVnaXN0ZXIgc2F2ZS4KCShocHBhX2V4cGFuZF9lcGlsb2d1ZSk6IFVzZSBVTklUU19QRVJfV09SRCBpbnN0ZWFkIG9mIGhhcndhcmV3aXJlZAoJdmFsdWUgb2YgNC4KCShocHBhX2V4cGFuZF9wcm9sb2d1ZSk6IExpa2V3aXNlLgoJKiBwYS5oIChQUk9NT1RFX01PREUpOiBMaWtld2lzZS4KCShIQVJEX1JFR05PX01PREVfT0ssIEZVTkNUSU9OX0FSR19TSVpFKTogTGlrZXdpc2UuCgkoRlVOQ1RJT05fQVJHX0JPVU5EQVJZKTogTGlrZXdpc2UuCgoJKiBpbnZva2UudGV4aSAoSFBQQSBPcHRpb25zKTogUmVtb3ZlIC1tc3BhY2UvLW1uby1zcGFjZS4KCgkqIHBhLmMgKG91dF9vZl9saW5lX3Byb2xvZ3VlX2VwaWxvZ3VlKTogRGVsZXRlLgoJKG92ZXJyaWRlX29wdGlvbnMpOiBSZW1vdmUgLW1zcGFjZSByZWxhdGVkIGNvZGUuCgkoaHBwYV9leHBhbmRfcHJvbG9ndWUsIGhwcGFfZXhwYW5kX2VwaWxvZ3VlKTogTGlrZXdpc2UuCgkoY29tcHV0ZV9mcmFtZV9zaXplKTogT25seSBhbGxvY2F0ZSBzcGFjZSBmb3IgcmVnaXN0ZXIgdGhhdAoJYWN0dWFsbHkgbmVlZCB0byBiZSBzYXZlZC4KCSogcGEuaCAoTUFTS19TUEFDRSwgVEFSR0VUX1NQQUNFKTogRGVsZXRlLgoJKFRBUkdFVF9TV0lUQ0hFUyk6IFJlbW92ZSAtbXNwYWNlLCAtbW5vLXNwYWNlCgkqIHBhL3QtcGEgKExJQjJGVU5DU19FWFRSQSk6IFJlbW92ZSBlZS5hc20gYW5kIGVlX2ZwLmFzbQoJKiBwYS90LXBybyAoTElCMkZVTkNTX0VYVFJBKTogTGlrZXdpc2UuICBSZW1vdmUgLW1zcGFjZSBtdWx0aWxpYi4KCSogcGEvZWUuYXNtLCBwYS9lZV9mcC5hc206IERlbGV0ZS4KCgkqIHBhL2VsZi5oIChBU01fT1VUUFVUX0RPVUJMRV9JTlQpOiBEZWZpbmUuCgoJKiBjb25maWcvc3ZyNC5oIChDT05TVF9TRUNUSU9OX0FTTV9PUCk6IERvIG5vdCBlbWl0IGFzc2VtYmxlcgoJZGlyZWN0aXZlIGluIGNvbHVtbiB6ZXJvLgoKRnJpIEp1bCAxNiAwMTozOTo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IEZpeCBjb21wdXRhdGlvbiBvZiBzYXZlIG1hc2sKCXdoZW4gZ2VuZXJhdGluZyBQSUMgY29kZS4KClRodSBKdWwgMTUgMTU6NDA6MDkgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZF90eXBlX2F0dHJpYnV0ZV92YXJpYW50KTogTW92ZSBjdXJyZW50X29ic3RhY2sgcmVzdG9yZQoJYWZ0ZXIgYnVpbGRfcXVhbGlmaWVkX3R5cGUgY2FsbC4KCjE5OTktMDctMTUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjb25maWd1cmUuaW46IFVzZSB0LWlyaXM2LCBldmVuIHdpdGggR05VIExELgoJKiBjb25maWcvbWlwcy9pcmlzNmdsZC5oOiBGaXggdHlwbyBpbiBsaW5rZXIgc3BlYy4KCSogY29uZmlnL21pcHMvdC1pcmlzNmdsZDogUmVtb3ZlLgoKVGh1IEp1bCAxNSAxNToxNTo0MyAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGluc3YsIGV4dHp2KTogUmVtb3ZlIFNJbW9kZSBkZXBlbmRlbmNlIGluIG5hbWVkCglwYXR0ZXJucy4gIEV4cGxpY2l0bHkgZ2VuZXJhdGUgREltb2RlIFJUTCBpZiBQb3dlclBDNjQgYW5kCglvcGVyYW5kIGlzIERJbW9kZS4KCShpbnN2ZGkpOiBSZXZlcnNlIHN0YXJ0IGFuZCBzaXplIGluIGluc3RydWN0aW9uIHRlbXBsYXRlLgoKMTk5OS0wNy0xMiAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogaW52b2tlLnRleGk6IFR5cG8gZml4ZXMuCgpXZWQgSnVsIDE0IDIzOjI4OjA2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGVtaXQtcnRsLmMgKGdlbl9yZWFscGFydCk6IElzc3VlIGFuIGVycm9yIGZvciBjYXNlcyBHQ0MgY2FuIG5vdAoJaGFuZGxlIGF0IHRoaXMgdGltZSBpbnN0ZWFkIG9mIHNpbGVudGx5IGdlbmVyYXRpbmcgaW5jb3JyZWN0IGNvZGUuCgkoZ2VuX2ltYWdwYXJ0KTogTGlrZXdpc2UuCgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRW1pdCBhIFVTRSBmb3IgYSBwc2V1ZG8gcmVnaXN0ZXIgd2l0aG91dAoJYSBoYXJkIHJlZ2lzdGVyIGlmIHdlIGNvdWxkIG5vdCBjcmVhdGUgYW4gb3B0aW9uYWwgcmVsb2FkIGZvciB0aGUKCXBzZXVkby4KCldlZCBKdWwgMTQgMjM6NDU6NDggMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogYy10eXBlY2suYyAob3V0cHV0X2luaXRfZWxlbWVudCwgcHJvY2Vzc19pbml0X2VsZW1lbnQpOgoJV2hlbiBhZHZhbmNpbmcgY29uc3RydWN0b3JfdW5maWxsZWRfZmllbGRzIGZvciBhIFJFQ09SRF9UWVBFLAoJY2hlY2sgZm9yIG5hbWVsZXNzIGJpdCBmaWVsZHMuCgpXZWQgSnVsIDE0IDAxOjU3OjM5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWdjbGFzcy5jIChzY2FuX29uZV9pbnNuKTogTm90aWNlIHN1YnJlZ3MgdGhhdCBjaGFuZ2UgdGhlCglzaXplIG9mIHRoZWlyIG9wZXJhbmQuCgkocmVjb3JkX3JlZ19jbGFzc2VzKTogVXNlIHRoYXQgdG8gb2JleSBDTEFTU19DQU5OT1RfQ0hBTkdFX1NJWkUuCgpXZWQgSnVsIDE0IDAxOjQxOjQyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoYWxwaGEqLSotKik6IEluY2x1ZGUgYWxwaGEvdC1pZWVlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGFscGhhL3QtaWVlZTogTmV3IGZpbGUuCgpUdWUgSnVsIDEzIDEwOjQ1OjU4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJzNjAwMC5jIChmaW5kX2FkZHJfcmVnKTogRG8gbm90IHNlbGVjdCByMCBhcyBhbiBhZGRyZXNzCglyZWdpc3Rlci4KClR1ZSBKdWwgMTMgMDA6NDY6MTggMTk5OSAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgoJKiBtNjhrL3gtbW90MzMwMCAoWENGTEFHUyk6IExpc3Qgb2YgYmlnIGZpbGVzIG5vdyBpbmNsdWRlcyBgY3NlLm8nLgoKTW9uIEp1bCAxMiAxNDoyOToxNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByczYwMDAubWQgKG1vdnNmKTogRG8gbm90IGZvcmNlIGVhc3kgRlAgY29uc3RhbnRzIGludG8gbWVtb3J5LgoKCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBQTFVTX0VYUFIpOiBQYXNzIGNvbnN0YW50cyB0aHJvdWdoCglpbW1lZF9kb3VibGVfY29uc3QgdG8gZW5zdXJlIHRoZXkgYXJlIHByb3Blcmx5IHRydW5jYXRlZCB0aGVuCglzaWduIGV4dGVuZGVkLgoKTW9uIEp1bCAxMiAxMDo0MDowMSAxOTk5ICBWbGFkaW1pciBNYWthcm92ICA8dm1ha2Fyb3ZAdG9mdS50by5jeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90aHVtYi5jICh0aHVtYl9yZW9yZyk6IENhbGwgcmVwbGFjZV9zeW1ib2xzX2luX2Jsb2NrCglhbHdheXMgdW5sZXNzIE5PX0RFQlVHIGlzIHVzZWQuICBDb21waWxlIHRoaXMgY29kZQoJdW5jb25kaXRpb25hbGx5LgoJKHJlcGxhY2Vfc3ltYm9sc19pbl9ibG9jayk6IENvbXBpbGUgaXQgdW5jb25kaXRpb25hbGx5LgoKU3VuIEp1bCAxMSAxMjozMjozMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGk/ODYtKi1lbGYqKTogTmV3IHRhcmdldC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBpMzg2L2kzODZlbGYuaCwgaTM4Ni90LWkzODZlbGY6IE5ldyBmaWxlcy4KCkZyaSBKdWwgIDkgMjI6Mzk6NDQgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKG1haW4pOiBEb24ndCBjb21wbGFpbiBhYm91dCBzYXlpbmcgLWdkd2FyZi4KCShyZXN0X29mX2NvbXBpbGF0aW9uKTogUmVtb3ZlIHJlZHVuZGFudCBjb2RlLgoKRnJpIEp1bCAgOSAxOTowODo1NSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3BzKTogRG9uJ3QgZGVsZXRlIG5hbWVkIENPREVfTEFCRUxzLgoKRnJpIEp1bCAgOSAxODo1NDoxOCAxOTk5ICBGZWxpeCBMZWUgIDxmbGVlQGN5Z251cy5jb20+CgoJKiBjb25maWcvaTk2MC9pOTYwLmMgKHJldF9sYWJlbCk6IENoYW5nZSBhc20gbGFiZWwgZnJvbSAiTFI6IiB0bwoJIkxpOTYwUjoiLCB0byBhdm9pZCBuYW1lIGNsYXNoLgoKRnJpIEp1bCAgOSAxMDo0ODoyOCAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogV2hlbiByZXZlcnNpbmcgYSBsb29wLCBkZWxldGUgYWxsCglSRUdfRVFVQUwgbm90ZXMgcmVmZXJlbmNpbmcgdGhlIHJldmVyc2VkIGJpdiBleGNlcHQgdGhvc2Ugd2hpY2ggYXJlCglmb3IgYSBnaXYgYmFzZWQgb24gaXQuCgpGcmkgSnVsICA5IDAzOjUxOjUyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogRHJvcCAiZ2NjLSIgcHJlZml4IGZyb20gdmVyc2lvbiAjLgoKVGh1IEp1bCAgOCAxODowNjozMCAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoZHdhcmYyb3V0X2xpbmUpOiBFbWl0IGEgbGluZSBudW1iZXIgY29tbWVudCBhZnRlcgoJdGhlIGxhYmVsIGlmIHdlJ3JlIGJlaW5nIHZlcmJvc2UuCgpUaHUgSnVsICA4IDE0OjE4OjQ2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IEFkZCBwaWMgcmVnaXN0ZXIgdG8gbWFzawoJaWYgbGl2ZSBhbmQgZmxhZ19waWMuCgkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UuCgpUaHUgSnVsICA4IDEyOjU1OjEyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGRieGVsZi5oIChBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogRG8gbm90IHB1dCBhc3NlbWJsZXIKCWRpcmVjdGl2ZXMgaW4gY29sdW1uIHplcm8uCgoJKiBwYS9lbGYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBEZWZpbmUuCgkqIHBhL3NvbS5oIChBU01fRklMRV9TVEFSVCk6IEluY2x1ZGUgLmxldmVsIGRpcmVjdGl2ZXMuCgkqIHBhL2hwdXgxMC5oIChBU01fRklMRV9TVEFSVCk6IERlbGV0ZS4KCSogcGEvaHB1eDExLmggKEFTTV9GSUxFX1NUQVJUKTogRGVsZXRlLgoKCSogcGEvZWxmLmggKEJTU19TRUNUSU9OX0FTTV9PUCk6IFVzZSAuc2VjdGlvbiAuYnNzLgoKVGh1IEp1bCAgOCAxODowMzoxOSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IE5ldmVyIGNhbGwgcmVtb3ZlX2FkZHJlc3NfcmVwbGFjZW1lbnRzCgl3aGVuIHJlbG9hZF9vdXQgZXF1YWxzIHJlbG9hZF9pbi4KClRodSBKdWwgIDggMTY6NTA6MTQgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGludm9rZS50ZXhpIChTcGVjIEZpbGVzKTogTmV3IG5vZGU6IERlc2NyaWJlIHRoZSBjb250ZW50cyBvZgoJc3BlYyBmaWxlcy4KClRodSBKdWwgIDggMTA6Mjg6MjUgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCgkqIGludm9rZS50ZXhpIChERUMgQWxwaGEgT3B0aW9ucyk6IFB1dCBAZW5kIHRhYmxlIGF0CgliZWdpbm5pbmcgb2YgbGluZSwgdG8gYXZvaWQgY29uZnVzaW5nIHRleGkyaHRtbC4KClRodSBKdWwgIDggMDk6MjI6MDYgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vZWxmLmggKEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwpOiBGaXhlZCB0eXBvCglpbnRyb2R1Y2VkIGluIHByZXZpb3VzIGRlbHRhLgoKV2VkIEp1bCAgNyAwMjowMDowNCAxOTk5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiByZWxvYWQxLmMgKGdlbl9yZWxvYWQpOiBXaGVuIHN5bnRoZXNpemluZyBhIDMgb3BlcmFuZCBhZGQKCXNlcXVlbmNlLCBpbXByb3ZlIHRlc3QgZm9yIHdoZW4gdG8gcmVsb2FkIE9QMSBpbnRvIHRoZSByZWxvYWQKCXJlZ2lzdGVyIGluc3RlYWQgb2YgT1AwLgoKV2VkIEp1bCAgNyAwMTozODowMyAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBEb24ndCBkZWxldGUgTk9URV9JTlNOX0RFTEVURURfTEFCRUwgbm90ZXMuCgoxOTk5LTA3LTA3ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1ob2xsc3RlaW5AY3lnbnVzLmNvbT4KCgkqIG04OGsvZGd1eGJjcy5oIChDUFBfU1BFQyk6IEFkZCBtaXNzaW5nIFwgaW4gbXVsdGktbGluZQoJc3RyaW5nIGxpdGVyYWwuCgpXZWQgSnVsICA3IDAxOjE2OjQzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnaW5jbHVkZS92YXJhcmdzLmggKF9fYnVpbHRpbl92YV9hbGlzdF90KTogTmV3IHR5cGVkZWYuCgkodmFfZGNsKTogVXNlIF9fYnVpbHRpbl92YV9hbGlzdF90LgoKV2VkIEp1bCAgNyAwMToxNDo0MiAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IE9ubHkgcmVtZW1iZXIgdHlwZXMKCW9uIHRoZSBwZXJtYW5lbnRfb2JzdGFjay4KCSogZHdhcmZvdXQuYyAob3V0cHV0X3R5cGUpOiBMaWtld2lzZS4KClR1ZSBKdWwgIDYgMTU6MjU6MzIgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jICh1bnNpZ25lZF90eXBlLHNpZ25lZF90eXBlLHNpZ25lZF9vcl91bnNpZ25lZF90eXBlKSA6CglNZXJnZWQgZnJvbSBjLXR5cGVjay5jIGFuZCBjcC90eXBlY2suYy4KCSogYy10eXBlY2suYyAodW5zaWduZWRfdHlwZSxzaWduZWRfdHlwZSxzaWduZWRfb3JfdW5zaWduZWRfdHlwZSkgOgoJTWVyZ2VkIGludG8gYy1jb21tb24uCgpUdWUgSnVsICA2IDEzOjA2OjAxIDE5OTkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKGVycm9yY291bnQpOiBEZWNsYXJlIGl0LgoJKGZpbmlzaF9wYXJzZSk6IFVwZGF0ZSBlcnJvcmNvdW50IHdoZW4gdXNpbmcgQ1BQTElCLgoKMTk5OS0wNy0wNiAgQnJ1Y2UgS29yYiAgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmKGVuZF9lbHNlX2xhYmVsKTogRG91YmxlIHRoZSBiYWNrc2xhc2ggc28KCXNlZCBnZXRzIGEgY2hhbmNlIHRvIHNlZSBpdC4KCSogZml4aW5jL2luY2xoYWNrLnNoOiByZWdlbgoJKiBmaXhpbmMvZml4aW5jbC54OiByZWdlbgoKRnJpIEp1bCAgMiAxODo0OTo1MSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCUFkZCBmcmFtZXdvcmsgdG8gc3VwcG9ydCBhcm12NSBhcmNoaXRlY3R1cmUgd2hlbiBpdCBiZWNvbWVzCglhdmFpbGFibGU6CgoJKiBjb25maWcvYXJtL2FybS5jIChGTF9BUkNINSk6IE5ldyBwcm9jZXNzb3IgY2FwYWJpbGl0eSBmbGFnLgoJKGFybV9hcmNoNSk6IE5ldyB2YXJpYWJsZS4KCShhbGxfYXJjaGl0ZWN0dXJlcyk6IEFkZCBhcm12NSBsaW5lLgoJKiBjb25maWcvYXJtL2FybS5oIChDUFBfQ1BVX0FSQ0hfU1BFQyk6IERlZmluZSBfX0FSTV9BUkNIXzVfXyBpZgoJLW1hcmNoPWFybXY1IGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgoJKGFybV9hcmNoNSk6IEV4cG9ydCB0aGlzIHZhcmlhYmxlLgoJKiBpbnZva2UudGV4aTogRG9jdW1lbnQgbmV3IHN0cmluZyBhY2NlcHRlZCBieSAtbWFyY2g9IHN3aXRjaCBmb3IKCUFSTSBwb3J0cy4KCgkqIGNvbmZpZy9hcm0vYXJtLmg6IFJlcGxhY2UgdXNlIG9mIGNvbnN0YW50IDEyIGFzIGEgcmVnaXN0ZXIKCW51bWJlciB3aXRoIElQX1JFR05VTS4gIFNpbWlsYXJseSAxNCBhbmQgTFJfUkVHTlVNLgoJKiBjb25maWcvYXJtL2FybS5jOiBSZXBsYWNlIHVzZSBvZiBjb25zdGFudCAxMiBhcyBhIHJlZ2lzdGVyCgludW1iZXIgd2l0aCBJUF9SRUdOVU0uICBTaW1pbGFybHkgMTQgYW5kIExSX1JFR05VTS4KCgkqIGNvbmZpZy9hcm0vZWxmLmg6IFRpZHkgdXAuCgkqIGNvbmZpZy9hcm0vY29mZi5oOiBUaWR5IHVwLgoKVGh1IEp1bCAgMSAxOTowODoxMyAxOTk5ICBNYXJrIFAuIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZ2NjL2NvbmZpZ3VyZS5pbiAobWlwcy1zZ2ktaXJpeDYqKTogSGFuZGxlIC0td2l0aC1nbnUtbGQuCgkqIGdjYy9jb25maWcvbWlwcy90LWlyaXM2Z2xkOiBOZXcgZmlsZS4KCSogZ2NjL2NvbmZpZy9taXBzL2lyaXM2Z2xkLmg6IExpa2V3aXNlLgoKRnJpIEp1bCAgMiAxMzoyMzozOSAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGMtZGVjbC5jICh3aWRlc3RfaW50ZWdlcl9saXRlcmFsX3R5cGVfbm9kZSwKCXdpZGVzdF91bnNpZ25lZF9saXRlcmFsX3R5cGUpIDogTmV3LgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSGFuZGxlL3VzZSB0aGUgdHdvIG5ldyB0eXBlcy4KCSogYy1jb21tb24uYyAodHlwZV9mb3Jfc2l6ZSx0eXBlX2Zvcl9tb2RlKSA6IFNhbWUuCgkqIGMtbGV4LmMgKHl5bGV4KSA6IFNhbWUuCgkqIGMtdHlwZWNrLmMgKHVuc2lnbmVkX3R5cGUsc2lnbmVkX3R5cGUsc2lnbmVkX29yX3Vuc2lnbmVkX3R5cGUpIDoKCVNhbWUuCgkqIGMtdHJlZS5oICh3aWRlc3RfaW50ZWdlcl9saXRlcmFsX3R5cGVfbm9kZSwKCXdpZGVzdF91bnNpZ25lZF9saXRlcmFsX3R5cGUpIDogTmV3LgoKRnJpIEp1bCAgMiAwMzowNTo0NCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBkd2FyZm91dC5jIChmaWVsZF9ieXRlX29mZnNldCk6IENvcnJlY3RseSBjb21wdXRlIHRoZSBvYmplY3QncwoJYnl0ZSBvZmZzZXQgZm9yIHRoZSBmaXJzdCBiaXQgb2YgYSBmaWVsZCB3aGljaCBjcm9zc2VzIGFuIGFsaWdubWVudAoJYm91bmRhcnkgb24gYSAhQllURVNfQklHX0VORElBTiB0YXJnZXQuCgpGcmkgSnVsICAyIDAxOjM2OjM2IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogZml4aW5jLnN2cjQ6IEZpeCA8YXJwYS9pbmV0Lmg+IGJ5IGRlbGV0aW5nIHByb3RvcyBmb3IgaHRvbnMgYW5kCgludG9ocy4KCkZyaSBKdWwgIDIgMDA6NDY6NDcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCQkJICBKZWZmIExhdyA8bGF3QGN5Z251cy5jb20+CgoJKiBnaW5jbHVkZS92YXJhcmdzLmggKHZhX2RjbCk6IFVzZSB3b3JkX21vZGUgZm9yIHR5cGUgb2YKCV9fYnVpbHRpbl92YV9saXN0LgoKCSogZXhjZXB0LmM6IEluY2x1ZGUgaW50bC5oLgoJKGV4cGFuZF9laF9yZXR1cm4pOiBTZXQgY3VycmVudF9mdW5jdGlvbl9jYW5ub3RfaW5saW5lLgoJKHNhdmVfZWhfc3RhdHVzLCByZXN0b3JlX2VoX3N0YXR1cyk6IFR3aWRkbGUgZWhfcmV0dXJuX3N0dWJfbGFiZWwuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IEFkZCBlaF9yZXR1cm5fc3R1Yl9sYWJlbC4KCSogZmxvdy5jIChkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzKTogRG9uJ3QgbWVyZ2UgYWNyb3NzIEVIIGVkZ2VzLgoJKiBNYWtlZmlsZS5pbiAoZXhjZXB0Lm8pOiBEZXBlbmQgb24gaW50bC5oLgoKRnJpIEp1bCAgMiAwMDowNDoyMyAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKG1vdmRmX2hhcmRmbG9hdDMyKTogSGFuZGxlIFBSRV9JTkMgYW5kIFBSRV9ERUMgdGhlCglzYW1lIGFzIG9mZnNldHRhYmxlIGluIGNhc2VzIDEgYW5kIDIuCgpUaHUgSnVsICAxIDIwOjU0OjEwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoZXh0cWgpOiBEZWZpbmUgYXMgNjQtKChSJjcpKjgpIGluc3RlYWQgb2YgNTYtKCgoUi0xKSY3KSo4KS4KCShleHRsaCwgZXh0d2gpOiBMaWtld2lzZS4KClRodSBKdWwgIDEgMTE6MDU6MjUgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjLWxleC5jICh5eWxleCk6IEltcHJvdmUgJ2ludGVnZXIgY29uc3RhbnQgb3V0IG9mIHJhbmdlJyBtZXNzYWdlcy4KCldlZCBKdW4gMzAgMTY6NTE6NDEgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGFybS1wZSBhbmQgdGh1bWItcGUgdGFyZ2V0cy4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKCSogdGh1bWIuYyAoYXJtX25ha2VkX2Z1bmN0aW9uX3ApOiBOZXcgZnVuY3Rpb246IERldGVybWluZXMgaWYKCWEgZnVuY3Rpb24gaXMgbmFrZWQgKGhhcyBubyBnY2MgZ2VuZXJhdGVkIHByb2xvZ3VlL2VwaWxvZ3VlKS4KCShpc19jYWxsZWRfaW5fQVJNX21vZGUpOiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZnVuYyBoYXMgdGhlCglpbnRlcmZhY2Vhcm0gYXR0cmlidXRlLgoJKG91dHB1dF9yZXR1cm4pOiBEbyBub3QgZ2VuZXJhdGUgYSByZXR1cm4gZm9yIG5ha2VkIGZ1bmN0aW9ucy4KCSh0aHVtYl9mdW5jdGlvbl9wcm9sb2d1ZSk6IERvIG5vdCBnZW5lcmF0ZSBhIHByb2xvZ3VlIGZvcgoJbmFrZWQgZnVuY3Rpb25zLgoJKHRodW1iX2V4cGFuZF9wcm9sb2d1ZSk6IERvIG5vdCBnZW5lcmF0ZSBhIHByb2xvZ3VlIGZvciBuYWtlZAoJZnVuY3Rpb25zLgoJKHRodW1iX2V4cGFuZF9lcGlsb2d1ZSk6IERvIG5vdCBnZW5lcmF0ZSBhbiBlcGlsb2d1ZSBmb3IgbmFrZWQKCWZ1bmN0aW9ucy4KCShhcm1fdmFsaWRfbWFjaGluZV9kZWNsX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbiwgY29waWVkIGZyb20KCWFybS5jOiAgUGVybWl0IG5ha2VkIGFuZCBpbnRlcmZhY2Vhcm0gYXR0cmlidXRlcy4KCgkqIGNvbmZpZy9hcm0vcGUuYzogTmV3IGZpbGU6IFN1cHBvcnQgY29kZSBmb3IgYXJtLXBlIHRhcmdldC4KCSogY29uZmlnL2FybS9wZS5oOiBOZXcgZmlsZTogSGVhZGVyIGZpbGUgZm9yIGFybS1wZSB0YXJnZXQuCgkqIGNvbmZpZy9hcm0vdHBlLmg6IE5ldyBmaWxlOiBIZWFkZXIgZmlsZSBmb3IgdGh1bWItcGUgdGFyZ2V0LgoJKiBjb25maWcvYXJtL3QtdGh1bWItcGU6IE5ldyBmaWxlOiBNYWtlZmlsZSBmcmFnbWVudCBmb3IKCXRodW1iLXBlIHRhcmdldC4KCjE5OTktMDctMDEgIE1hcmsgS2V0dGVuaXMgIDxrZXR0ZW5pc0BnbnUub3JnPgoKCSogY29uZmlnL2kzODYvZ251LmggKENQUF9TUEVDKTogRGVmaW5lIF9fUElDX18gYW5kIF9fcGljX18gaWYKCS1mUElDIG9yIC1mcGljIGlzIHNwZWNpZmllZC4KCldlZCBKdW4gMzAgMDM6MzE6NTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBVc2UgY29weV90b19tb2RlX3JlZyBmb3IKCSFUQVJHRVRfTUVNX0ZVTkNUSU9OUyBjYXNlIHRvby4KCgkqIGNvbmZpZ3VyZS5pbiAoaHBwYSotKi0qKTogQWRkIHNvbS5oIG9yIGVsZi5oIHRvIHRtX2ZpbGUgYXMKCWFwcHJvcHJpYXRlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkoaHBwYTEuMS0qLXBybyosIGhwcGExLjEtKi1ydGVtcyopOiBEZWZpbmUgdGFyZ2V0X2NwdV9kZWZhdWx0LgoJKiBwYS5oOiBJbmNsdWRlIGRieGVsZi5oLiAgRGVsZXRlIHZhcmlvdXMgZGJ4L3N0YWJzIHJlbGF0ZWQKCWRlZmluaXRpb25zIG1hZGUgcmVkdW5kYW50IGJ5IGRieGVsZi5oIGluY2x1c2lvbi4gIERlbGV0ZQoJbG90cyBvZiBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGFzc2VtYmx5IG91dHB1dCB0aGF0IGFyZQoJc3BlY2lmaWMgdG8gdGhlIFNPTSBvYmplY3QgZm9ybWF0LgoJKiBwYS5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBEbyBub3QgZW1pdCB0aGUgZnVuY3Rpb24ncwoJbmFtZSBmb3IgT0JKX0VMRi4KCSogcGEtcHJvLWVuZC5oIChTVEFSVEZJTEVfU1BFQyk6IFVuZGVmaW5lIGJlZm9yZSByZWRlZmluaW5nLgoJKiBwYS1wcm8uaDogRGVsZXRlZC4KCSogc29tLmg6IE5ldyBmaWxlIHdpdGggU09NIHNwZWNpZmljIGRlZmluaXRpb25zLgoJKiBlbGYuaDogTmV3IGZpbGUgd2l0aCBFTEYgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCgoJKiBlbGZvcy5oIChjb25zdF9zZWN0aW9uKTogT3V0cHV0IGEgdGFiIGJlZm9yZSBhc3NlbWJsZXIgZGlyZWN0aXZlcy4KCShjdG9yc19zZWN0aW9uLCBkdG9yc19zZWN0aW9uKTogTGlrZXdpc2UuCgkoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBMaWtld2lzZS4KCgkqIHBhL3BhMS5oOiBEZWxldGUgdW51c2VkIGZpbGUuCgpUdWUgSnVuIDI5IDAxOjM3OjUzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoaHBwYSotaHAtaHB1eDExKik6IE5ldyBjb25maWd1cmF0aW9uLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIHBhL3BhLWhwdXgxMS5oOiBOZXcgZmlsZS4KCSogcGEuaCAoQ1BQX1NQRUMpOiBDb25kaXRpb25hbGx5IGFkZCAtRF9fU1REQ19FWFRfXyB0byB0aGUgY3BwCgljb21tYW5kIGxpbmUuCgoJKiBtaXBzLm1kIChsZWFzaSwgbGVhZGkpOiBOZXcgcGF0dGVybnMuCgoJKiBleHByLmMgKGVtaXRfYmxvY2tfbW92ZSk6IFByb3Blcmx5IGhhbmRsZSBjYXNlIHdoZXJlIG9uZSBvZiB0aGUKCWJsb2NrIG1vdmUgYXJndW1lbnRzIGhhcyBhIHF1ZXVlZCBpbmNyZW1lbnQgb3IgZGVjcmVtZW50LgoJKGNsZWFyX3N0b3JhZ2UpOiBTaW1pbGFybHkuICBGaXggZm9ybWF0dGluZyBnb29mLgoKMTk5OS0wNi0yOCAgIkRhdmlkIE8nQnJpZW4iICA8b2JyaWVuQE5VWEkuY29tPgoKCSogZml4aW5jL2luY2xoYWNrLmRlZihzdGRpb192YV9saXN0KTogVGhpcyBwYXRjaCBSZW1vdmVzIGEKCXNlbWljb2xvbiBmcm9tIHRoZSBCU0QgVkFfTElTVCByZXBsYWNlbWVudCBleHByZXNzaW9uLgoKCSogZml4aW5jL2luY2xoYWNrLnNoOiByZWdlbgoJKiBmaXhpbmMvZml4aW5jbC54OiByZWdlbgoKCSogZml4aW5jL21rZml4aW5jLnNoOiBIYXZlIGBpWzM0NTY3XTg2LSotZnJlZWJzZConIG1hY2hpbmVzCglub3cgdXNlIHRoZSBmaXhpbmNsIHByb2dyYW0uCgpNb24gSnVuIDI4IDA1OjI4OjEyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsuaCAoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBEZWZpbmUgZm9yICFTVU5fRlBBCgljYXNlLiAgQWxzbyBtYWtlIHRoZSBQSUMgcmVnaXN0ZXIgY2FsbF91c2VkLgoKCSogbTY4ay5oIChGSU5BTElaRV9QSUMpOiBEZWxldGUuCgkqIG02OGsuYyAoZmluYWxpemVfcGljKTogRGVsZXRlLgoKTW9uIEp1biAyOCAwNToxNjozNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbTY4ay5oIChQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogRG9uJ3QgZm9yY2UgYW55IEZQIGNvbnN0X2RvdWJsZXMKCXRvIG1lbW9yeS4KCk1vbiBKdW4gMjggMDQ6MDc6MjcgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBFbnN1cmUgdW5zaWduZWQgdmFsdWUgZml0cyBpbiByZWdfbm90ZS4KClN1biBKdW4gMjcgMDI6Mzk6MDggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZV8xKTogVmFsaWRhdGUgdGhlIGNtb3YgY29weSB0byBhIHRlbXBvcmFyeS4KClNhdCBKdW4gMjYgMTc6MTg6MTggMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ0wnKTogVXNlIHBsdXNfY29uc3RhbnRfZm9yX291dHB1dC4KCkZyaSBKdW4gMjUgMTE6MzM6MjQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBBZGQgLW1jcHU9ZXY0NSBhcyBhbiBhbGlhcyBmb3IgZXY0LgoKRnJpIEp1biAyNSAxMzo0MToyNSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAob3V0cHV0X3RvYyk6IEFsd2F5cyB1c2UgaGV4IHZhbHVlcyBmb3IgZmxvYXRpbmctcG9pbnQKCWNvbnN0YW50cy4gIFN0b3JlIHNpbmdsZS1wcmVjaXNpb24gdmFsdWVzIGluIHVwcGVyLWhhbGYgb2YgVE9DCgllbnRyeSBpbiA2NC1iaXQgbW9kZS4KCSogcnM2MDAwLm1kIChmbG9hdHNpZGYyLCBmbG9hdHVuc3NpZGYyKTogQWRkICFUQVJHRVRfUE9XRVJQQzY0Cgl0byBmaW5hbCBjb25zdHJhaW50cy4KCShmaXhfdHJ1bmNkZnNpMiBzcGxpdHRlcik6IENoYW5nZSBwYXR0ZXJuIG1hdGNoaW5nIGZjdGl3ei4KCShmY3Rpd3opOiBJbXByb3ZlIGFjY3VyYWN5IG9mIFJUTCBmb3IgcGF0dGVybi4KCkZyaSBKdW4gMjUgMTE6MjY6MzggMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogQWxsb3cgUlRMX0VYUFIncyB0aHJvdWdoIHRoZQoJTUFYX0lOVEVHRVJfQ09NUFVUQVRJT05fTU9ERSBjaGVja3MuCgpGcmkgSnVuIDI1IDA2OjA2OjM3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5oIChNQVNLX1NVUFBPUlRfQVJDSCwgTUFTS19DUFVfRVY1LCBNQVNLX0NQVV9FVjYpOiBEZWZpbmUKCXN1Y2ggdGhhdCBNQVNLX1NVUFBPUlRfQVJDSCBpcyBub3QgbmVnYXRpdmUuCgpGcmkgSnVuIDI1IDA1OjM1OjQ0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAodmVyaWZ5X2RvbWluYXRvcik6IFByb3Blcmx5IGhhbmRsZSBBRERSX1ZFQyBhbmQKCUFERFJfRElGRl9WRUMgaW5zbnMgdGhhdCBhcHBlYXIgaW5zaWRlIGxvb3BzLgoKVGh1IEp1biAyNCAyMjo1NDowNSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgkJCSAgSmVmZiBMYXcgPGxhd0BjeWdudXMuY29tPgoKCSogcnM2MDAwLm1kIChtb3ZkZl9oYXJkZmxvYXQzMik6IFJldmVydCBwcmV2aW91cyBwYXRjaC4KCUhhbmRsZSBMT19TVU0gdGhlIHNhbWUgYXMgb2Zmc2V0dGFibGUgaW4gY2FzZXMgMSBhbmQgMi4KCSogcnM2MDAwLmMgKGZpbmRfYWRkcl9yZWcpOiBSZXZlcnQgcHJldmlvdXMgcGF0Y2guCgpUaHUgSnVuIDI0IDIyOjQzOjEyIDE5OTkgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogc3lzdGVtLmggKHN0cnN0cik6IE5ldyBleHRlcm5hbCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KCSogYWNjb25maWcuaCAoTkVFRF9ERUNMQVJBVElPTl9TVFJTVFIpOiBOZXcgZGVmaW5lIHNsb3QuCgkqIGNvbmZpZ3VyZS5pbiAoR0NDX05FRURfREVDTEFSQVRJT05TKTogQ2hlY2sgZm9yIHN0cnN0ci4KCSogY29uZmlnLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCgoxOTk5LTA2LTI0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAobWFpbik6IFJlYWQgdXNlci1zcGVjaWZpZWQgc3BlY3MgZmlsZXMgYWZ0ZXIgY29tcHV0aW5nCglhZGRpdGlvbmFsIHN0YXJ0ZmlsZV9wcmVmaXhlcy4KClRodSBKdW4gMjQgMTU6MDA6NDcgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCglSZXZlcnQgdGhlc2UgdHdvIHBhdGNoZXM6CgoJVGh1IEp1biAxNyAyMTozNDoyNCAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogV2hlbiBkb2luZyBiaXYtPmdpdiBjb252ZXJzaW9uLCB1cGRhdGUKCXJlZyBub3RlIG9mIE5FWFQtPmluc24uCgoJVGh1IEp1biAxNyAxNzoyMjowNyAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogV2hlbiBkb2luZyBiaXYtPmdpdiBjb252ZXJzaW9uLCBmaXggdXAKCXJlZ19iaXZfY2xhc3MuCgkocmVjb21iaW5lX2dpdnMpOiBTZXQgaXggZmllbGQgYWZ0ZXIgc29ydGluZy4KCldlZCBKdW4gMjMgMjE6MjY6MDAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcnRsYW5hbC5jIChyZWdfcmVmZXJlbmNlZF9wKTogVXNlIHJlZ19vdmVybGFwX21lbnRpb25lZF9wCglmb3IgdGhlIHBhcnRzIG9mIGFuIFVOU1BFQyAvIFVOU1BFQ19WT0xBVElMRS4KCjE5OTktMDYtMjMgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSpmaXhpbmMvaW5jbGhhY2suZGVmOiAgQWRkIGZpeCBkZXZlbG9wbWVudCBjb21tZW50YXJ5CgkocmVhZF9yZXRfdHlwZSk6IHJlYWN0aXZhdGUgYW5kIGFkZCBzZWxlY3Rpb24gY2xhdXNlCgkoenp6XyopOiB0d2VhayBvdXRwdXQgZmlsZSBuYW1lIHRvIG1hdGNoIHdoYXQgaXMgdXNlZCBpbiBoYWNrc2hlbGwudHBsCgkqZml4aW5jL3tmaXhpbmNsLnh8aW5jbGhhY2suc2h9OiByZWdlbgoKV2VkIEp1biAyMyAwMDo0ODoyMSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogU1RSSVBfTk9QUyBiZWZvcmUgY2hlY2tpbmcgYWdhaW5zdAoJTUFYX0lOVEVHRVJfQ09NUFVUQVRJT05fTU9ERQoJKGNoZWNrX21heF9pbnRlZ2VyX2NvbXB1dGF0aW9uX21vZGUpOiBMaWtld2lzZS4KClR1ZSBKdW4gMjIgMjA6MjM6NDMgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbWQudGV4aSAoc211bEB2YXJ7bX0zX2hpZ2hwYXJ0KTogQWRkIG1pc3NpbmcgJ3MnIHByZWZpeC4KCjE5OTktMDYtMjIgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoc3RvcmVfZXhwcik6IFdoZW4gdGFyZ2V0IGlzIGEgcHJvbW90ZWQgc3VicmVnLCByZXR1cm4gYQoJcHJvbW90ZWQgc3VicmVnIGFzIGEgcmVzdWx0LgoKVHVlIEp1biAyMiAxNzoxNDo1OCAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZnJhbWVfZGVidWdfZXhwcik6IFJlZm9ybWF0IHRvIG1hdGNoIEdOVQoJY29kaW5nIHN0YW5kYXJkcy4KCShkd2FyZjJvdXRfZGVmaW5lKTogTWFyayB1bnVzZWQgcGFyYW1ldGVycyBhcHByb3ByaWF0ZWx5LgoJKGdlbl91bnNwZWNpZmllZF9wYXJhbWV0ZXJzX2RpZSk6IERpdHRvLgoJKGdlbl9zdWJwcm9ncmFtX2RpZSk6IEZpeCBzaWduZWQvdW5zaWduZWQgd2FybmluZ3MuCgkoZ2VuX3ZhcmlhYmxlX2RpZSk6IERpdHRvLgoKMTk5OS0wNi0yMiAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWYoZW5kX2Vsc2VfbGFiZWwpOiBjb21iaW5lZCBlbHNlX2xhYmVsCglhbmQgZW5kaWZfbGFiZWwgYW5kIGZpeGVkIHRoZSBzZWQgZXhwcmVzc2lvbi4KCSpmaXhpbmMve2ZpeGluY2wueHxpbmNsaGFjay5zaH06IHJlZ2VuCgpUdWUgSnVuIDIyIDAxOjU4OjE4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJzNjAwMC5tZCAobW92ZGZfaGFyZGZsb2F0MzIpOiBVc2UgJVggaW5zdGVhZCBvZiBhbHdheXMgZW1pdHRpbmcKCSd4JyB3aGVuIGhhbmRsaW5nIG5vbi1vZmZzZXR0YWJsZSBhZGRyZXNzZXMKClR1ZSBKdW4gMjIgMDA6MjA6MDUgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGZpbmFsLmMgKHNob3J0ZW5fYnJhbmNoZXMpOiBEb24ndCB0cnkgdG8gc3BsaXQgYW4gaW5zbiB0aGF0IGhhcwoJYmVlbiBkZWxldGVkLgoKTW9uIEp1biAyMSAxMjo0NzozOSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5jIChzeW1ib2xpY19leHByZXNzaW9uX3ApOiBOZXcgZnVuY3Rpb24uCgkobWlwc19zZWxlY3RfcnR4X3NlY3Rpb24pOiBQdXQgc3ltYm9saWMgZXhwcmVzc2lvbnMgaW4gdGhlCglkYXRhIHNlY3Rpb24sIG5vdCB0aGUgcmVhZC1vbmx5IGRhdGEgc2VjdGlvbi4KCk1vbiBKdW4gMjEgMjI6MTM6MDYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcnM2MDAwLm1kIChmaW5kX2FkZHJfcmVnKTogSGFuZGxlIExPX1NVTSBhZGRyZXNzZXMuCgpNb24gSnVuIDIxIDIwOjEwOjQyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb2xsZWN0Mi5jIChtYWluKTogTG9nIGZyYW1lIHRhYmxlIGNvdW50LgoJKEdDQ19PS19TWU1CT0wpIFtFQ09GRl06IEFjY2VwdCBzdEdsb2JhbC4KCShzY2FuX3Byb2dfZmlsZSkgW0NPRkZdOiBIYW5kbGUgZnJhbWUgdGFibGVzLgoKCSogYWxwaGEvYWxwaGEuaCAoVU5BTElHTkVEX1NIT1JUX0FTTV9PUCk6IERlZmluZS4KCShVTkFMSUdORURfSU5UX0FTTV9PUCwgVU5BTElHTkVEX0RPVUJMRV9JTlRfQVNNX09QKTogRGVmaW5lLgoJKiBhbHBoYS9lbGYuaDogVW5kZWYgdGhlbSBhZ2Fpbi4KCSogYWxwaGEvdm1zLmg6IFJlbW92ZSB0aGVpciBkZWZpbml0aW9ucy4KClR1ZSBKdW4gMjIgMDM6MTc6NTMgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guYyAobWFjaGluZV9kZXBlbmRlbnRfcmVvcmcpOiBXaGVuIGZpeGluZyB1cCBmcCBwY2xvYWRzLAoJcmVtb3ZlIHRoZSBjbG9iYmVyIG9mIHIwIGFuZCBjaGFuZ2UgdGhlIFJFR19VTlVTRUQgbm90ZSB0bwoJUkVHX0lOQy4KCjE5OTktMDYtMjEgIEpha3ViIEplbGluZWsgIDxqakB1bHRyYS5saW51eC5jej4KCgkqIHJlYWwuYyAoZXJlYWxfZnJvbV9kb3VibGUpOiBGaXggZm9yIDY0LWJpdCBiaWcgZW5kaWFuIGhvc3RzLgoJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBBZGQgY2FzZSBmb3IgaG9zdHMgd2hlcmUgZG91YmxlCglmaXRzIGluIEhPU1RfV0lERV9JTlQgYW5kIG9uZSB1c2VzIHVuaW9uIHRvIGFjY2VzcyBhIGxvbmcgY29uc3RhbnQKCWFzIGRvdWJsZS4KCk1vbiBKdW4gMjEgMTc6MTg6MjUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmMgKHNwYXJjX292ZXJyaWRlX29wdGlvbnMpOiBEb24ndCBhbGxvdyBwcm9maWxpbmcgZm9yCgljb2RlIG1vZGVscyBvdGhlciB0aGFuIG1lZGxvdy4KCShzcGFyY19mdW5jdGlvbl9wcm9maWxlcik6IE5ldyBmdW5jdGlvbiBmcm9tIG9sZCBGVU5DVElPTl9QUk9GSUxFUgoJbWFjcm8uICBVc2UgQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMIGFuZCBNQ09VTlRfRlVOQ1RJT04uCgkoc3BhcmNfZnVuY3Rpb25fYmxvY2tfcHJvZmlsZXIpOiBMaWtld2lzZS4gIFVzZSB1c2VyX2xhYmVsX3ByZWZpeC4KCShzcGFyY19ibG9ja19wcm9maWxlcik6IExpa2V3aXNlLgoJKHNwYXJjX2Z1bmN0aW9uX2Jsb2NrX3Byb2ZpbGVyX2V4aXQpOiBMaWtld2lzZS4KCSogc3BhcmMuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBDYWxsIG5ldyBzcGFyYy5jIGZ1bmN0aW9uLgoJKEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSKTogTGlrZXdpc2UuCgkoQkxPQ0tfUFJPRklMRVIpOiBMaWtld2lzZS4KCShGVU5DVElPTl9CTE9DS19QUk9GSUxFUl9FWElUKTogTGlrZXdpc2UuCgkoTUNPVU5UX0ZVTkNUSU9OKTogTmV3LgoJKiBzcGFyYy9wYmQuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBEZWxldGUuCgkoRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIsIEJMT0NLX1BST0ZJTEVSKTogRGVsZXRlLgoJKiBzcGFyYy9zdW40bzMuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBEZWxldGUuCgkoTUNPVU5UX0ZVTkNUSU9OKTogTmV3LgoJKiBzcGFyYy9zeXN2NC5oIChGVU5DVElPTl9CTE9DS19QUk9GSUxFUik6IERlbGV0ZS4KCShCTE9DS19QUk9GSUxFUik6IERlbGV0ZS4KCShNQ09VTlRfRlVOQ1RJT04pOiBOZXcuCgpNb24gSnVuIDIxIDE0OjExOjI5IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAobW92ZGZfaGFyZGZsb2F0MzIpOiBGaXggdHlwbyBpbiBjYXNlIDIuCgpNb24gSnVuIDIxIDEyOjI3OjE3IDE5OTkgIFZsYWRpbWlyIE1ha2Fyb3YgIDx2bWFrYXJvdkB0b2Z1LnRvLmN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9lbGYuaCAoQlNTX1NFQ1RJT05fQVNNX09QLCBBU01fT1VUUFVUX0FMSUdORURfQlNTKToKCUFkZCB0aGUgbWFjcm9zLgoKCSogY29uZmlnL202OGsvbTY4a2VsZi5oIChCU1NfU0VDVElPTl9BU01fT1AsIEFTTV9PVVRQVVRfQUxJR05FRF9CU1MpOgoJRGl0dG8uCgoJKiBjb25maWcvc2gvc2guaCAoQlNTX1NFQ1RJT05fQVNNX09QLCBBU01fT1VUUFVUX0FMSUdORURfQlNTKToKCURpdHRvLgoKCSogY29uZmlnL2FybS90ZWxmLmggKEJTU19TRUNUSU9OX0FTTV9PUCwgQVNNX09VVFBVVF9BTElHTkVEX0JTUyk6CglEaXR0by4KCk1vbiBKdW4gMjEgMTQ6NTg6NDIgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmg6IEFkZCBjcHAgc3VwcG9ydCBmb3IgQVJNOTIwIGFuZCBBUk05MjBUIGNwdQoJdHlwZXMuCgpNb24gSnVuIDIxIDA2OjIyOjIxIDE5OTkgIE1hcmsgRWxicmVjaHQgPHNub3diYWxsM0BiaWdmb290LmNvbT4KCgkqIGkzODYvZGpncHAuaCAoTElCX1NQRUMpOiBOZXcuCgkoU1RBUlRGSUxFX1NQRUMpOiBOZXcuCgoJKiBpMzg2L3htLWRqZ3BwLmggKE5PX1NZU19TSUdMSVNUKTogRGVsZXRlZC4gTm93IG9ic29sZXRlLgoKTW9uIEp1biAyMSAwNjoxOTozMyAxOTk5ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIGZpeGluYy9NYWtlZmlsZS5pbiAoZ251LXJlZ2V4Lm8pOiBEbyBub3QgZGVmaW5lIFNURENfSEVBREVSUyBpbgoJY29tcGlsZXIgZmxhZ3MuCgoJKiBzeXN0ZW0uaCAoV1NUT1BTSUcpOiBOZXcgbWFjcm8uCgpNb24gSnVuIDIxIDA1OjMzOjE1IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogYy1wcmFnbWEuYyAocHVzaF9hbGlnbm1lbnQpOiBEb24ndCBpZ25vcmUgYWxpZ25tZW50cyBncmVhdGVyIHRoYW4KCTQgYnl0ZXMuCgkoaW5zZXJ0X3BhY2tfYXR0cmlidXRlcyk6IFRha2UgaW50byBhY2NvdW50IG1lbWJlciBuYXR1cmFsCglhbGlnbm1lbnQuCgoJKiBpMzg2L3dpbm50LmMgKGV4cG9ydHNfaGVhZCk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCgkoaTM4Nl9wZV9yZWNvcmRfZXhwb3J0ZWRfc3ltYm9sKTogTmV3IGZ1bmN0aW9uLgoJKGkzODZfcGVfYXNtX2ZpbGVfZW5kKTogVXNlLgoJKiBpMzg2L2N5Z3dpbi5oIChBU01fT1VUUFVUX0NPTU1PTik6IFJlY29yZCB0aGUgZXhwb3J0ZWQKCXN5bWJvbHMgdG8gYmUgZW1pdHRlZCBhdCBlbmQgb2YgYXNzZW1ibHkuCgkoQVNNX0RFQ0xBUkVfT0JKRUNUX05BTUUpOiBMaWtld2lzZS4KCShBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogTGlrZXdpc2UuCgoJKiBpMzg2L3V3aW4uaCAoQ1BQX1NQRUMpOiBVc2UgLWlkaXJhZnRlciBpbnN0ZWFkIC1pcHJlZml4IGFuZAoJLWl3aXRocHJlZml4LgoKTW9uIEp1biAyMSAwNDo0NDozMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBzcGFyYy5oIChMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogRml4IHBhcmVuIGVycm9yIGludHJvZHVjZWQKCWluIGxhc3QgY2hhbmdlLgoKU3VuIEp1biAyMCAxNzoyNzoyMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV8xKTogVXNlIGZyZWVfbGlzdCBpbnN0ZWFkIG9mCgl6YXBwaW5nIHJlZ19sYXN0X3VzZXMgZGlyZWN0bHkuCgkoc2NoZWRfYW5hbHl6ZV8yLCBzY2hlZF9hbmFseXplX2luc24pOiBMaWtld2lzZS4KCShzY2hlZF9hbmFseXplKTogTGlrZXdpc2UuICBEb24ndCBjbGVhciByZWdfbGFzdF91c2VzIG9uIGNhbGxzLgoKU3VuIEp1biAyMCAxNjo1NzoyOSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKG1vdmRmX2hhcmRmbG9hdDMyKTogVXNlIHdvcnN0IGNhc2UgaW5zbiBsZW5ndGgKCWF0dHJpYnV0ZXMgZm9yIGNhc2VzIDEgYW5kIDIuCgpTYXQgSnVuIDE5IDIyOjUyOjU1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplKTogTWFyayBjYWxsLXVzZXIgcmVncyBhcyBjbG9iYmVyZWQKCWluc3RlYWQgb2Ygc2V0LgoKU2F0IEp1biAxOSAwNTo0MDowNyAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgPHBiQG5leHVzLmNvLnVrPgoKCSogYXJtLmMgKGFybV9yZWxvYWRfaW5faGkpOiBJbnZlcnQgc2Vuc2Ugb2YgdGVzdCBvbiBCWVRFU19CSUdfRU5ESUFOLgoKU2F0IEp1biAxOSAwNToyNTowNSAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmggKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogSWYgZmxhZ19waWMsIG5ldmVyIHVzZQoJUElDX09GRlNFVF9UQUJMRV9SRUdOVU0gZm9yIGdlbmVyYWwgYWxsb2FjdGlvbi4KCShJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IENvdW50IHRoZSBmYWN0IHRoYXQgdGhlIFBJQyByZWdpc3RlcgoJbXVzdCBiZSBzdGFja2VkIGlmIGl0IGlzIHVzZWQgZm9yIFBJQyBhY2Nlc3Nlcy4KCSogYXJtLmMgKHVzZV9yZXR1cm5faW5zbik6IEhhbmRsZSBQSUMgcmVnaXN0ZXIgc3BlY2lhbGx5LgoJKG91dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24pOiBMaWtld2lzZS4KCShvdXRwdXRfZnVuY197cHJvbG9ndWUsZXBpbG9ndWV9KTogTGlrZXdpc2UuCgkob3V0cHV0X2V4cGFuZF9wcm9sb2d1ZSk6IExpa2V3aXNlLgoKCSogYXJtLm1kICgqYWRkZGZfZXNmZGZfZGYpOiBSZW5hbWVkIGZyb20gKmFkZGRmX2RmX2VzZmRmLgoJKCpzdHJzaV9wcmVkZWMpOiBSZW5hbWVkIGZyb20gKnN0cnFpX3ByZWRlYy4KCSgqbG9hZHNpX3NoaWZ0cHJlaW5jKTogUmVuYW1lZCBmcm9tICpsb2FkcWlfc2hpZnRwcmVpbmMuCgkoKmxvYWRzaV9zaGlmdHByZWRlYyk6IFJlbmFtZWQgZnJvbSAqbG9hZHFpX3NoaWZ0cHJlZGVjLgoKCSogYXJtLmMgKGFybV9vdmVycmlkZV9vcHRpb25zKTogUmVtb3ZlIHdhcm5pbmcgYWJvdXQgUElDIGNvZGUKCW5vdCBiZWluZyBzdXBwb3J0ZWQuCgpGcmkgSnVuIDE4IDIzOjQ3OjA2IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChmaW5kX2FkZHJfcmVnKTogTmV3IGZ1bmN0aW9uLgoJKiByczYwMDAuaCAoZmluZF9hZGRyX3JlZyk6IERlY2xhcmUuCgkob2Zmc2V0dGFibGVfYWRkcl9vcGVyYW5kKTogRGVsZXRlLgoJKiByczYwMDAubWQgKG1vdmRmX2hhcmRmbG9hdDMyKTogSGFuZGxlIG5vbi1vZmZzZXR0YWJsZSBsb2FkcwoJZnJvbSBhbmQgc3RvcmVzIHRvIEdQUnMuCgpGcmkgSnVuIDE4IDE1OjQ0OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9leHBhbmRfYmxvY2tfbW92ZSk6IFVzZSBnZXRfaW5zbnMgcmF0aGVyIHRoYW4KCWdlbl9zZXF1ZW5jZSBhcyBhcmd1bWVudCB0byBlbWl0X25vX2NvbmZsaWN0X2Jsb2NrLgoKRnJpIEp1biAxOCAwNzowMiAxOTk5ICBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL21rZml4aW5jLnNoOiBlbmFibGUgdGhlIGZpeGluY2wgcHJvZ3JhbSBmb3IgREcvVVgKCSogZml4aW5jL2luY2xoYWNrLmRlZihkZ3V4X2ludF92YXJhcmdzKTogc2NyaXB0IG11c3QgZW5kIHdpdGggXG4KCSpmaXhpbmMvZml4aW5jbC54OiByZWdlbgoJKmZpeGluYy9pbmNsaGFjay5zaDogcmVnZW4KClRodSBKdW4gMTcgMTU6MDY6MTAgUERUIDE5OTkgRG9uIExpbmRzYXkgIDxkbGluZHNheUBjeWdudXMuY29tPgoKCSogYWRkZWQgc3VwcG9ydCBmb3IgLW1wY3JlbCAoUEMgcmVsYXRpdmUgYWRkcmVzc2luZyBmb3IgbTY4aykKCWJhc2VkIG9uIGNvZGUgZG9uZSBieSBNaWNoYWVsIFRpZW1hbm4gIDx0aWVtYW5uQGF4b24uY3lnbnVzLmNvbT4uCgkqIGludm9rZS50ZXhpIChtNjgwMDAgb3B0aW9ucyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciAtbXBjcmVsIGZsYWcuCgkqIG02OGsuYyAocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSGFuZGxlIDMyLWJpdCBQSUMgY2FzZS4KCShjb21tZW50cyBmb3IgZ2VuZXJhbF9zcmNfb3BlcmFuZCk6IEFkZCBzb21lIGV4cGxhbmF0aW9uCglhYm91dCBFWFRSQV9DT05TVFJBSU5UUy4KCShPVkVSUklERV9PUFRJT05TKTogRW5hYmxlIC1mUElDIGluIGNvbWJpbmF0aW9uIHdpdGggLW1wY3JlbC4KCSogbTY4a2VsZi5oIChPVkVSUklERV9PUFRJT05TKTogRGl0dG8uCgkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogRml4IHR5cG8uCgkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogUmUtZGVyaXZlIGZyb20gbTY4ay5oIGNhc2UuCgkqIG02OGsuaCAoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogRml4IGRlbGV0ZS1vLgoJKElORElSRUNUQUJMRV8xX0FERFJFU1MpOiBEZWxldGUgc3B1cmlvdXMgJy8nIGF0IGVuZCBvZiBtYWNyby4KCShPVkVSUklERV9PUFRJT05TKTogQ2hhbmdlIGJlaGF2aW9yIHNvIHRoYXQgLW1wY3JlbCBpbXBsaWVzIC1mcGljCglpZiBub3QgYWxyZWFkeSBzZXQuCgkoT1ZFUlJJREVfT1BUSU9OUyk6IE1lcmdlIGluIGNoYW5nZXMgZnJvbSBtNjhrLmguCgkqIG02OGsuaCAoVEFSR0VUX1BDUkVMKTogTmV3IHRhcmdldCBmbGFnLgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAicGNyZWwiIGFzIGEgcmVjb2duaXplZCBzd2l0Y2guCgkoT1ZFUlJJREVfT1BUSU9OUyk6IEFkZCBjaGVja3MgZm9yIC1tcGNyZWwuCgkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogRG9uJ3Qgbm9ybWFsbHkgYWNjZXB0IGFueXRoaW5nIHRoYXQKCWNvbnRhaW5zIGEgU1lNQk9MX1JFRi4gIFJlbGF4IHRoaXMgY29uc3RyYWludCBkdXJpbmcgcmVsb2FkLCBzaW5jZQoJd2Ugd2FudCB0byB1c2UgdGhlIHByZWRpY2F0ZXMsIG5vdCByZWxvYWQncyBidWlsdC1pbiBjb25jZXB0IG9mIGEKCXZhbGlkIG1lbW9yeSBhZGRyZXNzLCB0byBjb250cm9sIHdoYXQgaW5zbnMgbmVlZCByZWxvYWRpbmcuCgkoRVhUUkFfQ09OU1RSQUlOVCk6IERlZmluZSBjb25zdHJhaW50cyB0byBhY2NlcHQgcGMtcmVsYXRpdmUKCW9wZXJhbmRzIChlc3NlbnRpYWxseSAnZycsICdtJywgYW5kICdzJyB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcykuCgkqIG02OGsuYyAocHJpbnRfb3BlcmFuZCk6IENhdXNlIHByaW50aW5nIG9mIHBjLXJlbGF0aXZlIGFkZHJlc3NlcwoJdG8gaW5jbHVkZSBwYyByZWdpc3Rlci4KCShwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBEaXR0by4KCShnZW5lcmFsX3NyY19vcGVyYW5kKTogQWNjZXB0IG9wZXJhbmRzIHRoYXQgYXJlIG5vdCBvbmx5CglnZW5lcmFsX29wZXJhbmRzLCBidXQgYXJlIGFsc28gdmFsaWQgd2hlbiB1c2VkIGFzIGEgcGMtcmVsYXRpdmUKCXNvdXJjZS4KCShub25pbW1lZGlhdGVfc3JjX29wZXJhbmQpOiBTaW1pbGFyLCBmb3Igbm9uaW1tZWRpYXRlX29wZXJhbmRzLgoJKG1lbW9yeV9zcmNfb3BlcmFuZCk6IFNpbWlsYXIsIGZvciBtZW1vcnlfb3BlcmFuZHMuCgkocGNyZWxfYWRkcmVzcyk6IE5ldyBwcmVkaWNhdGUgdG8gYWNjZXB0IHRoZSBzcGVjaWFsIGNhc2Ugb2YgYQoJcGMtcmVsYXRpdmUgYWRkcmVzcy4KCSogbTY4ay5tZCAobWFueSBwYXR0ZXJucyk6IFJld3JpdGUgY29tbW9uIFNJbW9kZSwgSEltb2RlLCBhbmQKCVFJbW9kZSBpbnNucyB0byBhY2NlcHQgKl9zcmNfb3BlcmFuZCBpbnN0ZWFkIG9mICpfb3BlcmFuZCB3aGVyZQoJcGMtcmVsYXRpdmUgb3BlcmFuZHMgY2FuIGZpdC4gIEZvciBleGFtcGxlLCBhIHBjLXJlbGF0aXZlIG9wZXJhbmQKCWNhbiBiZSB1c2VkIGFzIGEgbWVtb3J5IHNvdXJjZSBvcGVyYW5kIGZvciBhZGRzaTMsIGJ1dCBub3QgYXMgYQoJbWVtb3J5IGRlc3RpbmF0aW9uLgoJKiBocDMyMC5oIGxpbnV4LmggbTY4a3Y0LmggKExFR0lUSU1BVEVfUElDX09QRVJBTkRfUCkgYXMgaW4gbTY4ay5oLgoKRnJpIEp1biAxOCAwOToxMTowNyAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90ZWxmLmggKEFTTV9PVVRQVVRfREVGX0ZST01fREVDTFMpOiBOZXcgTWFyY286IFVTZQoJLnRodW1iX3NldCBwc2V1ZG8gb3AgdG8gbWFyayBhbGlhc2VzIG9mIHRodW1iIGZ1bmN0aW9ucy4KCldlZCBKdW4gMTYgMTg6MTk6MTMgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHZhcmFzbS5jIChhc3NlbWJsZV9hbGlhcyk6IFVzZSBBU01fT1VUUFVUX0RFRl9GUk9NX0RFQ0xTIGluCglwcmVmZXJlbmNlIHRvIEFTTV9PVVRQVVRfREVGLCBpZiBpdCBpcyBkZWZpbmVkLgoKCSogdG0udGV4aTogRG9jdW1lbnQgbmV3LCBvcHRpb25hbCB0YXJnZXQgbWFjcm8KCUFTTV9PVVRQVVRfREVGX0ZST01fREVDTFMuCgpUaHUgSnVuIDE3IDE1OjA3IDE5OTkgIEJydWNlIEtvcmIgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmNsdWRlczogSVNDTlRMIHBhdGNoCgkqIGZpeGluYy9pbmNsaGFjay5kZWYgKGlvY3RsX2ZpeF9jdHJsKTogRml4IHRoZSBkZWZpbml0aW9uIG9mIFtfXSpJU0NUUkwoKS4KCShkZ3V4X2ludF92YXJhcmdzKTogbmV3IGZvciBERy9VWAoJKiBmaXhpbmMve2ZpeGluY2wueCxpbmNsaGFjay5zaH06IFJlZ2VuZXJhdGVkLgoKVGh1IEp1biAxNyAyMTozNDoyNCAxOTk5ICBKZWZmIExhdyA8bGF3QGN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoaWEzMiBvcHRpb25zKTogRml4IHR5cG8uCgpUaHUgSnVuIDE3IDIxOjM0OjI0IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogV2hlbiBkb2luZyBiaXYtPmdpdiBjb252ZXJzaW9uLCB1cGRhdGUKCXJlZyBub3RlIG9mIE5FWFQtPmluc24uCgpUaHUgSnVuIDE3IDE0OjI1OjA4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IE5vdGUgaXNzdWVzIHdpdGggcmVwbGFjaW5nIFJFR3Mgd2l0aAoJU1VCUkVHcy4KCSogbWlwcy5oIChHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBIYW5kbGUgU1VCUkVHcyBwcm9wZXJseS4KClRodSBKdW4gMTcgMTM6Mjg6MzAgMTk5OSAgRGF2aWQgTydCcmllbiA8b2JyaWVuQEZyZWVCU0Qub3JnPgoKCSogaTM4Ni9mcmVlYnNkLWVsZi5oIChMSU5LX1NQRUMpOiBGaXggdHlwby4KCgkqIGkzODYvZnJlZWJzZC1lbGYuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBsYWJlbHMgYXJlIG5vdCBuZWVkZWQgYW5kCgl0aGUgcmVmZXJlbmNlIHRvIGBtY291bnQnIHdhcyBub3QgY29ycmVjdCBmb3IgdGhlIEVMRiBvbiBGcmVlQlNELgoKVGh1IEp1biAxNyAxNzoyMjowNyAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFdoZW4gZG9pbmcgYml2LT5naXYgY29udmVyc2lvbiwgZml4IHVwCglyZWdfYml2X2NsYXNzLgoKCShyZWNvbWJpbmVfZ2l2cyk6IFNldCBpeCBmaWVsZCBhZnRlciBzb3J0aW5nLgoKVGh1IEp1biAxNyAwMjo1NDozMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBUaWdodGVuIGNoZWNrcyBmb3Igd2hlbiBpdCBpcyBzYWZlCgl0byBzYWZlIHRvIGV4dHJhY3QgYSBzdWJ3b3JkIG91dCBvZiBhIFJFRy4KClRodSBKdW4gMTcgMDE6NDU6MjQgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2gubWQgKG11bHNpMyk6IERvbid0IGFkZCBhIG5vLW9wIG1vdmUgYXQgdGhlIGVuZC4KCldlZCBKdW4gMTYgMjA6Mjk6MDAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY3NlLmMgKGNzZV9pbnNuKTogRG9uJ3QgcHV0IGhhcmQgcmVnaXN0ZXIgc291cmNlIGludG8gdGFibGVzIGZvcgoJdGhlIGxhc3QgaW5zbiBvZiBhIGxpYmNhbGwuCgpXZWQgSnVuIDE2IDE5OjQ0OjMzIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogSW5zZXJ0IHNldHMgb2YgZGVyaXZlZCBnaXZzIGF0IGV2ZXJ5CgliaXYgaW5jcmVtZW50LCBldmVuIGlmIGl0J3MgdGhlIG9ubHkgb25lLgoKV2VkIEp1biAxNiAxMDozMzowMiAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZm91dC5jIChhZGRfaW5jb21wbGV0ZV90eXBlKTogTmV3IGZuLgoJKG91dHB1dF90eXBlKTogQ2FsbCBpdC4KCShyZXRyeV9pbmNvbXBsZXRlX3R5cGVzKTogTmV3IGZuLgoJKGR3YXJmb3V0X2ZpbmlzaCk6IENhbGwgaXQuCgoJRnJvbSBFcmljIFJhc2tpbiA8ZWhyQGxpc3R3b3Jrcy5jb20+OgoJKG91dHB1dF90eXBlKTogT3V0cHV0IHR5cGVzIGZvciBiYXNlcy4KClR1ZSBKdW4gMTUgMTI6NTE6MjMgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBtaXBzLmMgKG1pcHNfb3V0cHV0X2NvbmRpdGlvbmFsX2JyYW5jaCk6IEFkZCBgYnJlYWsnCgliZXR3ZWVuIGBkZWZhdWx0JyBsYWJlbCBhbmQgYGNsb3NlIGJyYWNlcycuCgpUdWUgSnVuIDE1IDAxOjU1OjIwIDE5OTkgIERhdmlkIE8nQnJpZW4gPG9icmllbkBGcmVlQlNELm9yZz4KCgkqIGkzODYvZnJlZWJzZC1lbGYuaCAoTElOS19TUEVDKTogY2xlYW4gdXAgdGhlIGxpbmtpbmcgbGlicmFyeQoJc3BlY2lmaWNhdGlvbnMgYW5kIG1ha2UgaXQgcmVhbGlzdGljLgoJKExJQl9TUEVDKTogTGlrZXdpc2UuCgpNb24gSnVuIDE0IDE1OjM4OjQzIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19zZWNvbmRhcnlfcmVsb2FkX2NsYXNzKTogQ2hlY2sgZm9yCgkoUExVUyAoU1ApIChSRUcpKSBhbmQgcmV0dXJuIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIGNsYXNzLgoJKiBjb25maWcvbWlwcy9taXBzLm1kIChyZWxvYWRfaW5zaSk6IERlbGV0ZSBwcmVkaWNhdGUgZm9yIG9wZXJhbmQgMS4KCUhhbmRsZSAoUExVUyAoU1ApIChSRUcpKS4KCSh0YWJsZWp1bXApOiBJbiBtaXBzMTYgY29kZSwgdXNlIGVtaXRfaW5zbiBpbnN0ZWFkIG9mIGVtaXRfanVtcF9pbnNuLgoJKHRhYmxlanVtcF9taXBzMTYxLCB0YWJsZWp1bXBfbWlwczE2Mik6IFVzZSBlbWl0X2p1bXBfaW5zbiBpbnN0ZWFkCglvZiBlbWl0X2luc24gZm9yIHRhYmxlanVtcC4KCk1vbiBKdW4gMTQgMTc6MjY6NDAgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKG91dHB1dF9wcm9sb2cpOiBSUzYwMDBfQ0FMTF9HTFVFIG11c3QgYmUKCWFzbV9mcHJpbnRmIGZvcm1hdCBzdHJpbmcgYnkgaXRzZWxmLgoJKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IExpa2V3aXNlLgoKTW9uIEp1biAxNCAxMjo1NzozOCAxOTk5ICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCgkqIGNvbWJpbmUuYyAoc2ltcGxpZnlfbG9naWNhbCwgY2FzZSBBTkQpOiBPbmx5IGNhbGwKCXNpbXBsaWZ5X2FuZF9jb25zdF9pbnQgaWYgdGhlIG1vZGUgaXMgbm8gd2lkZXIgdGhhbiBIT1NUX1dJREVfSU5UCglvciB0aGUgY29uc3RhbnQgaXMgcG9zaXRpdmUuCgpNb24gSnVuIDE0IDExOjQzOjQxIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IEZpeCB0eXBvIGluIHJzNjAwMC1pYm0tYWl4NCBjYXNlLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgpNb24gSnVuIDE0IDAzOjU1OjQwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAocnM2MDAwLWlibS1haXg0LjMqLCBwb3dlcnBjLWlibS1haXg0LjMqKTogRG8gbm90CglyZXF1aXJlIGEgc3ViLXZlcnNpb24gIy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKMTk5OS0wNi0xNCAgUm9iZXJ0IExpcGUgIChyb2JlcnRsaXBlQHVzYS5uZXQpCgoJKiBzdnI0LmggKERXQVJGMl9ERUJVR0dJTkdfSU5GTyk6IENoZWNrIGZvciByZWRlZmluaXRpb24uCgpNb24gSnVuIDE0IDEwOjMwOjUyIEJTVCAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogYy10eXBlY2suYyAocHJvY2Vzc19pbml0X2VsZW1lbnQpOiBEZXRlY3QgZXhjZXNzIGVsZW1lbnRzIGluCgljaGFyIGFycmF5IGluaXRpYWxpemVyLgoKMTk5OS0wNi0xNCAgQW5kcmVhcyBKYWVnZXIgIDxhakBhcnRodXIucmhlaW4tbmVja2FyLmRlPgoKCSogZ2NjLnRleGk6IE1lbnRpb24gZ2NjIDIuOTYgaW5zdGVhZCBvZiBlZ2NzIDEuMDAuCgpTYXQgSnVuIDEyIDIyOjI5OjQ4IEVEVCAxOTk5ICBKZXJyeSBRdWlubiA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCgkqIGludm9rZS50ZXhpIChPcHRpb24gU3VtbWFyeSk6IEFkZCAtZnBlcm1pc3NpdmUgZmxhZy4KClNhdCBKdW4gMTIgMDM6NDA6NDIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3BhcmMuaCAoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IERvIG5vdGhpbmcgd2l0aCBvcGVyYW5kcwoJdGhhdCByZXF1aXJlIFBJQyBjb2RlIHNlcXVlbmNlcy4KCldlZCBKdW4gIDkgMTY6Mjk6MDEgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIG5ldyB0YXJnZXQ6IHRodW1iLWVsZi4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoJKiBjb25maWcvYXJtL3QtdGh1bWItZWxmOiBOZXcgZmlsZTogTWFrZWZpbGUgZnJhZ21lbnQgZm9yCgl0aHVtYi1lbGYgYnVpbGQuCgkqIGNvbmZpZy9hcm0vdGVsZi5oOiBOZXcgZmlsZTogSGVhZGVyIGZpbGUgZm9yIHRodW1iLWVsZgoJYnVpbGQuCgpGcmkgSnVuIDExIDAzOjE3OjUxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChsaWJnY2MyKTogUGFzcyBNQVlCRV9VU0VfQ09MTEVDVDIgYXMgYW4gYXJndW1lbnQuCgkqIGxpYmdjYzIuYyAoX19DVE9SX0xJU1QsIF9fRFRPUl9MSVNUKTsgRG8gbm90IHByb3ZpZGUKCWluaXRpYWxpemVycyBpcyBzb21lIGNpcmN1bXN0YW5jZXMuCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChlbmRpZl9sYWJlbCk6IEFkZCBhZGRpdGlvbmFsIHNlbGVjdG9yIGZvcgoJbW9yZSBib2d1cyBzdHVmZiBhZnRlciAjZW5kaWYgc3RhdGVtZW50cy4KCSogZml4aW5jL2luY2xoYWNrLnNoLCBmaXhpbmMvZml4aW5jbC54OiBSZWJ1aWx0LgoKVGh1IEp1biAxMCAyMDo0NDozNiAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3lnd2luLmggKFNFVF9BU01fT1ApOiBEZWZpbmUuCgpUaHUgSnVuIDEwIDIwOjM3OjU3IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogcmVnLXN0YWNrLmMgKHN0YWNrX3JlZ19saWZlX2FuYWx5c2lzKTogRmluZCBhbGwgdGhlIFJFVFVSTiBpbnNucy4KClRodSBKdW4gMTAgMTk6MjM6MDAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guaCAoVEFSR0VUX0hBUldBUkQsIFRBUkdFVF9IQVJWQVJEKTogQ2hhbmdlZCB0aGUgZm9ybWVyIHRvIHRoZQoJbGF0dGVyLgoKCSogc2gubWQgKGljX2ludmFsaWRhdGVfbGluZV9pKTogUmVtb3ZlIHNlY29uZCBhbHRlcm5hdGl2ZS4KClRodSBKdW4gMTAgMDY6NTUgMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqZml4aW5jL2luY2xoYWNrLmRlZihzdW5fYXV0aF9wcm90byk6IFdlIGRvIG5vdCBrbm93IGhvdyB0bwoJdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIHZhbGlkIHByb3RvdHlwZXMuICBEZWxldGUgYnlwYXNzIGV4cHIuCgkoaW9jdGxfZml4X2N0cmwpOiBDb3JyZWN0IHRoZSBzZWxlY3Rpb24gZXhwcmVzc2lvbi4KCShub19kb3VibGVfc2xhc2gpOiBDb3JyZWN0IHF1b3RpbmcgcnVsZXMKCSpmaXhpbmMvZml4aW5jbC54OiByZWdlbgoJKmZpeGluYy9pbmNsaGFjay5zaDogcmVnZW4KClRodSBKdW4gMTAgMTU6MDg6MTUgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmMgKHN0cnVjdCBhbGxfY29yZXMpOiBBZGQgQVJNOTIwIGFuZCBBUk05MjB0LgoKV2VkIEp1biAgOSAxNTo1Nzo1NyAxOTk5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiByczYwMDAubWQgKG1vdnNpX2dvdF9pbnRlcm5hbF9tZW0pOiBEZWxldGUuCgkqIHJzNjAwMC5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IE1hcmsgUElDX09GRlNFVF9UQUJMRV9SRUdOVU0uCgkoR09UX1RPQ19SRUdOVU0pOiBEZWxldGUuCgkoUElDX09GRlNFVF9UQUJMRV9SRUdOVU0pOiBEZWZpbmUuCgkoRklOQUxJWkVfUElDKTogRGlzYWJsZS4KCSogcnM2MDAwLmMgKHJzNjAwMF9nb3RfcmVnaXN0ZXIpOiBOZXcgY29kZSBmb3IgZml4ZWQgcGljIHJlZ2lzdGVyLgoJKHJzNjAwMF9yZXBsYWNlX3JlZ25vKTogRGVsZXRlLgoJKHJzNjAwMF9maW5hbGl6ZV9waWMpOiBMaWtld2lzZS4KCShvdXRwdXRfcHJvbG9nKTogSGFuZGxlIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNLgoKV2VkIEp1biAgOSAxOTo0NDoyNiAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGxvb3BfaW5zbl9maXJzdF9wKTogRG9uJ3QgY29tcGFyZSBMVUlEcyB3aGVuIFAKCWlzIGEgbm90ZTsgdXNlIDw9IGZvciB0aGUgY29tcGFyZTsgYWR2YW5jZSBQIHdoaWxlIGl0IGlzCglhIE5PVEUuCgpXZWQgSnVuICA5IDEzOjEyOjI0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeGluYy9pbmNsaGFjay5kZWYgKG5vX2RvdWJsZV9zbGFzaCk6IEZpeCBxdW90aW5nIGZvciB0ZXN0LgoJKiBmaXhpbmMvaW5jbGhhY2suc2gsIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9maXhpbmNsLnNoOyBSZWJ1aWx0LgoKCSogdmFyYXNtLmMgKHJlbW92ZV9mcm9tX3BlbmRpbmdfd2Vha19saXN0KTogVmVyaWZ5IHQtPm5hbWUKCWlzIG5vbi1OVUxMIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHN0cmNtcC4KCldlZCBKdW4gIDkgMDY6NTAgMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqZml4aW5jL2luY2xoYWNrLmRlZihzdW5fYXV0aF9wcm90byk6IGJ5cGFzcyB0aGUgcGF0Y2ggaWYKCXRoZSB0eXBlZCBhcmd1bWVudHMgYXJlIG5vdCBwYXJ0IG9mIGEgY29tbWVudAoJKGlvY3RsX2ZpeF9jdHJsKTogQWRkZWQgYSBwdXJwb3NlIGNvbW1lbnQKCSpmaXhpbmMvZml4aW5jbC54OiByZWdlbmVyYXRlCgkqZml4aW5jL2luY2xoYWNrLnNoOiByZWdlbmVyYXRlCgpXZWQgSnVuICA5IDIyOjU3OjAyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGludm9rZS50ZXhpOiBBZGQgQzR4IGludm9jYXRpb24gZG9jcy4KCldlZCBKdW4gIDkgMjI6MzQ6MzggMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoVEFSR0VUX0VYUE9TRV9MRFAsIExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOgoJRGVmaW5lIG5ldyBtYWNyb3MuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9lbWl0X21vdmVfc2VxdWVuY2UsIHNyY19vcGVyYW5kKTogVXNlCglUQVJHRVRfRVhQT1NFX0xEUC4KCShjNHhfbGVnaXRpbWl6ZV9yZWxvYWRfYWRkcmVzcyk6IE5ldyBmdW5jdGlvbi4KCSogY29uZmlnL2M0eC9jNHgubWQ6IFVwZGF0ZSBkb2NzLgoKV2VkIEp1biAgOSAwNDoxNDo0OCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmNsdWRlczogQXZvaWQgcmVtb3ZpbmcgJy4nLgoJKiBmaXhpbmMvZml4aW5jLnN2cjQ6IExpa2V3aXNlLgoJKiBmaXhpbmMvZml4aW5jLndpbm50OiBMaWtld2lzZS4KCSogZml4aW5jL2luY2xoYWNrLnRwbDogTGlrZXdpc2UuCgkqIGZpeGluYy9maXhpbmNsLnNoLCBmaXhpbmMvaW5jbGhhY2suc2g6IFJlYnVpbHQuCgoxOTk5LTA2LTA5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChzdW5fY2F0bWFjcm8pOiBFc2NhcGUgcGFyZW5zIGluIHRoZSBzZWxlY3QKCXBhdHRlcm4uCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KCldlZCBKdW4gIDkgMDM6MTA6MzQgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogSGFuZGxlIGAjcHJhZ21hIHBhY2soKScKCWNvcnJlY3RseS4KClR1ZSBKdW4gIDggMTM6MDY6MTUgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChyczYwMDAtaWJtLWFpeDQuWzEyXSopOiBDaGFuZ2Ugcng2MDAwIHRvIHJzNjAwMC4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKVHVlIEp1biAgOCAwNTo0Nzo0OCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm0uY29tKQoKCSogb3B0YWJzLmMgKGV4cGFuZF9jbXBseGRpdl93aWRlKTogVXNlIGV4cGFuZF9hYnMgdG8gZ2V0IHRoZSBhYnNvbHV0ZQoJdmFsdWVzLgoKTW9uIEp1biAgNyAyMjozMDozNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChhdm9pZF9ib29sKTogQWxzbyBjYXRjaAoJInR5cGVkZWYgW3Vuc2lnbmVkXSBpbnQgYm9vbCIuCgkqIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2ZpeGluY2wuc2g6IFJlYnVpbHQuCgoJKiBtNjhrL3gtaHAzYnNkNDQ6IERlbGV0ZSBvYnNvbGV0ZSBhbmQgaW5jb3JyZWN0IGZpbGUuCgkqIGNvbmZpZ3VyZS5pbiAobTY4ay1ocC1ic2Q0LjQpOiBObyBsb25nZXIgdXNlIHgtaHAzYnNkNDQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCk1vbiBKdW4gIDcgMjI6MDU6MDMgMTk5OSAgTWFyayBLZXR0ZW5pcyAgPGtldHRlbmlzQGdudS5vcmc+CgoJKiBjb25maWcvaTM4Ni9nbnUuaDogSW5jbHVkZSA8Z251Lmg+IHJpZ2h0IGFmdGVyIDxpMzg2L2xpbnV4Lmg+LAoJc3VjaCB0aGF0IHdlIGNhbiBvdmVycmlkZSBpdHMgZGVmaW5pdGlvbnMgaWYgbmVjZXNzYXJ5LgoJKENQUF9TUEVDKTogTmV3IGRlZmluZS4gIFN1cHBvcnQgcHJvY2Vzc29yIHNwZWNpZmljIHByZWRlZmluZXMgdmlhCgklKGNwcF9jcHUpLgoJKENDMV9TUEVDKTogTmV3IGRlZmluZS4gIFN1cHBvcnQgcHJvY2Vzc29yIHNwZWNpZmljIGNvbXBpbGVyCglvcHRpb25zIHZpYSAlKGNjMV9jcHUpLgoJKFNUQVJURklMRV9TUEVDKTogTmV3IGRlZmluZS4gIFVzZSBjcnQwLm8gaW5zdGVhZCBvZiBjcnQxLm8gZm9yCgktc3RhdGljLgoKMTk5OS0wNi0wNyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAobWF0aF9nY2NfaWZuZGVmcyk6IEluc2VydCB3aGl0ZXNwYWNlCgliZXR3ZWVuIHNlZCdzIC1lIGZsYWcsIGFuZCB0aGUgb3Blbi1xdW90ZSBmb2xsb3dpbmcgaXQuCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9maXhpbmNsLnNoOiBSZWJ1aWx0LgoKTW9uIEp1biAgNyAyMDozNDoyMCAxOTk5ICBSb2JlcnQgTGlwZSA8cm9iZXJ0bGlwZUB1c2EubmV0PgoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZhcmFzbS5jIChhc3NlbWJsZV9zdGFydF9mdW5jdGlvbik6IFJlbW92ZSB0aGUgZnVuY3Rpb24KCWZyb20gdGhlIHBlbmRpbmcgd2VhayBkZWNscyBsaXN0IHdoZW4gd2UgZGVmaW5lIGEgZnVuY3Rpb24uCgkoYXNzZW1ibGVfdmFyaWFibGUpOiBTaW1pbGFybHkgZm9yIHZhcmlhYmxlcy4KCSh3ZWFrX2ZpbmlzaCk6IElnbm9yZSBpdGVtcyBvbiB0aGUgbGlzdCB3aXRoIGEgTlVMTCBuYW1lLgoJKHJlbW92ZV9mcm9tX2VuZGluZ193ZWFrX2xpc3QpOyBOZXcgZnVuY3Rpb24gdG8gInJlbW92ZSIgYW4gaXRlbQoJZnJvbSB0aGUgcGVuZGluZyB3ZWFrIGRlY2xhcmF0aW9ucyBsaXN0LgoKTW9uIEp1biAgNyAxOToyNzowNyAxOTk5ICBKZXJyeSBRdWlubiA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCgkqIHBhLm1kIChmbXB5ZmFkZCwgZm1weW5mYWRkLCBmbmVnYWJzKTogTmV3IHBhdHRlcm5zLgoKTW9uIEp1biAgNyAxNDowNzozOSAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjLWxleC5jIChHRVRDKTogUmVkZWZpbmUgdG8gY2FsbCBnZXRjaC4KCShVTkdFVEMpOiBSZWRlZmluZSB0byBjYWxsIHB1dF9iYWNrLgoJKHB1dGJhY2tfYnVmZmVyKTogTmV3IHN0cnVjdHVyZSB0eXBlLgoJKHB1dGJhY2spOiBOZXcgc3RhdGljIHN0cnVjdHVyZS4KCShnZXRjaCk6IE5ldyBmdW5jdGlvbi4KCShwdXRfYmFjayk6IE5ldyBmdW5jdGlvbi4KCSh5eWxleCk6IFJlcGxhY2UgdW51c2VkIGJ5dGVzIGZyb20gYmFkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCgpNb24gSnVuICA3IDEzOjMzOjM5IDE5OTkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGNwcGxpYi5jIChkb19kZWZpbmUpOiBDYXN0IGBhbGxvY2EnIHJldHVybiB2YWx1ZS4KCShkb19pbmNsdWRlLCBkb191bmRlZiwgZG9fcHJhZ21hKTogTGlrZXdpc2UuCgkqIGNwcGhhc2guYyAoZHVtcF9kZWZpbml0aW9uKTogQ2FzdCBgeHN0cmR1cCcgYW5kIGBhbGxvY2EnIHJldHVybgoJdmFsdWVzLgoJKiBjcHBmaWxlcy5jIChpbml0aWFsaXplX2lucHV0X2J1ZmZlcik6IENhc3QgYHhtYWxsb2MnIHJldHVybiB2YWx1ZXMuCgkqIGdjYy9jcHBzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogQ2FzdCB4bWFsbG9jIHJldHVybiB2YWx1ZS4KClN1biBKdW4gIDYgMTE6NTg6MzQgMTk5OSAgSmFrdWIgSmVsaW5layAgPGpqQHVsdHJhLmxpbnV4LmN6PgoKCSogc3BhcmMubWQgKGFic3RmMik6IFRoaXMgc2hvdWxkIGJlIGFuIGV4cGFuZC4KCShzcGxpdCBhZnRlciBhYnN0ZjJfbm90djkpOiBGaXggbW9kZS4KCShhYnN0ZjJfaHFfdjkpOiBOZXcgcGF0dGVybi4KCShhYnN0ZjJfdjkpOiBPbmx5IHVzZSB3aGVuIG5vIGhhcmQgcXVhZC4KCShhYnNkZjJfdjkpOiBGaXggaWYgdGFyZ2V0IGlzIG5vdCB0aGUgc2FtZSBhcyBzb3VyY2UuCgkoYXNocnNpM19leHRlbmQsIGFzaHJzaTNfZXh0ZW5kMiwgbHNocnNpM19leHRlbmQsIGxzaHJzaTNfZXh0ZW5kMik6CglBZGQgY29ycmVjdCBvdXRwdXQgY29uc3RyYWludHMuCgpTYXQgSnVuICA1IDE3OjA0OjE2IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJRnJvbSBEYXZlIExvdmUgdG8gZWdjcy1wYXRjaGVzIG9uIDIwIE1heSAxOTk5IDE3OjM4OjM4ICswMTAwOgoJKiBpbnZva2UudGV4aTogQ2xhcmlmeSB0ZXh0IHZpcy1hLXZpcyBJbnRlbCBDUFVzLgoKU2F0IEp1biAgNSAxMjoxMToyNCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogbWlwcy5oIChtaXBzX291dHB1dF9jb25kaXRpb25hbF9icmFuY2gpOiBOZXcgZnVuY3Rpb24uCgkobWlwc19hZGp1c3RfaW5zbl9sZW5ndGgpOiBMaWtld2lzZS4KCShBU1NFTUJMRVJfU0NSQVRDSF9SRUdOVU0pOiBOZXcgbWFjcm8uCgkoQURKVVNUX0lOU05fTEVOR1RIKTogTGlrZXdpc2UuCgkqIG1pcHMuYyAocHJpbnRfb3BlcmFuZCk6IEFkZCBgRicgYW5kIGBXJyBmb3IgZmxvYXRpbmctcG9pbnQKCWNvbXBhcmlzb24gb3Bjb2Rlcy4KCShtYWNoaW5lX2RlcGVuZGVudF9yZW9yZyk6IEFkanVzdCBNSVBTMTYgY29kZTsgaW5zdHJ1Y3Rpb24tbGVuZ3RocwoJYXJlIG5vdyBpbiBieXRlcy4KCShtaXBzX2FkanVzdF9pbnNuX2xlbmd0aCk6IE5ldyBmdW5jdGlvbi4KCShtaXBzX291dHB1dF9jb25kaXRpb25hbF9icmFuY2gpOiBOZXcgZnVuY3Rpb24uCgkqIG1pcHMubWQgKGxlbmd0aCk6IEFkanVzdCBhdHRyaWJ1dGUgZGVmaW5pdGlvbiB0byBoYW5kbGUKCWNvbmRpdGlvbmFsIGJyYW5jaGVzLiAgQ2hhbmdlIGxlbmd0aHMgdG8gYnl0ZXMsIHJhdGhlciB0aGFuCglpbnN0cnVjdGlvbnMgdGhyb3VnaG91dC4gIFJlbW92ZSBsZW5ndGggYXR0cmlidXRlIGZyb20KCWluc3RydWN0aW9ucyB3aG9zZSBsZW5ndGggaXMgZm91ciBieXRlcywgYW5kIHJlbHkgb24gdGhlIGRlZmF1bHQKCWluc3RlYWQuCgkoZHNsb3QpOiBGaXggdHlwbyBpbiBjb21tZW50LgoJUmV3b3JkIGNvbmRpdGlvbmFsIGJyYW5jaCBwYXR0ZXJucyB0byB1c2UKCW1pcHNfb3V0cHV0X2NvbmRpdGlvbmFsX2JyYW5jaC4KCkZyaSBKdW4gIDQgMTM6MzA6MjcgMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBhbHBoYS9vc2YuaCAoQ1BQX1NVQlRBUkdFVF9TUEVDKTogSGFuZGxlIC10aHJlYWRzLgoJKExJQl9TUEVDKTogTGlrZXdpc2UuCglMaW5rIHdpdGggLWxwcm9mMV9yIGZvciAtZy8tcGcuCgoxOTk5LTA2LTA0ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IEZpeCBjaGFuZ2Ugb2YgSmFuIDE5LgoKRnJpIEp1biAgNCAwMDoxMjo0MCAxOTk5ICBNYXJjIEVzcGllIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBmcmVlYnNkLWVsZi5oIChTV0lUQ0hfVEFLRVNfQVJHKTogIFJlZGVmaW5lLCBub3QgZGVmaW5lLgoJKFNUQVJURklMRV9TUEVDKTogIERlZmluZSwgb3ZlcnJpZGUgdGhlIHN2cjQuaCB2ZXJzaW9uLgoJKEVOREZJTEVfU1BFQyk6ICBMaWtld2lzZS4KClRodSBKdW4gIDMgMjM6NTg6NTUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAobGltaXRzX2lmbmRlZnMpOiBBbHNvIGFwcGx5IHRvIHN5cy9saW1pdHMuaAoJKiBmaXhpbmMvZml4aW5jbC54OiBSZWdlbmVyYXRlZC4KCSogZml4aW5jL2luY2xoYWNrLnNoOiBSZWdlbmVyYXRlZC4KCkZyaSBKdW4gIDQgMDU6NDI6MjMgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guYyAoYmFycmllcl9hbGlnbik6IERvbid0IHJldHVybiBlYXJseSBmb3Igbm9ybWFsIGJyYW5jaC9iYXJyaWVyCgl3aGVuIG9wdGltaXppbmcgZm9yIFNIMi4KClRodSBKdW4gIDMgMjI6Mjc6NTAgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBpMzg2L3Vkay5oIChMSU5LX1NQRUMpOiBDb3JyZWN0IGxpbmtlciBzZWFyY2ggcGF0aCBmb3IKCXN5c3RlbSBsaWJyYXJpZXMuCgpGcmkgSnVuICA0IDAzOjIwOjQwIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmMgKGZpeHVwX2FkZHJfZGlmZl92ZWNzKTogRW1pdCBicmFmIHJlZmVyZW5jZSBsYWJlbC4KCShicmFmX2xhYmVsX3JlZl9vcGVyYW5kKTogRGVsZXRlLgoJKiBzaC5oIChQUkVESUNBVEVfQ09ERVMpOiBSZW1vdmUgYnJhZl9sYWJlbF9yZWZfb3BlcmFuZC4KCSogc2gubWQgKGNhc2VzaV9qdW1wXzIpOiBPcGVyYW5kMSBpcyBub3cgdGhlIGluc2lkZSBvZiBhCglsYWJlbF9yZWYsIGFuZCBoYXMgbm8gcHJlZGljYXRlLgoJVGhlIHBhdHRlcm4gaGFzIGEgcHJlZGljYXRlIHRvIGd1YXJkIGFnYWluc3QgaW52YWxpZCBzdWJzdGl0dXRpb25zLgoJKGR1bW15X2p1bXApOiBEZWxldGUuCgkoY2FzZXNpKTogVXBkYXRlIHVzZSBvZiBjYXNlc2lfanVtcF8yLgoKVGh1IEp1biAzIDA3OjQ4IDE5OTkgIEJydWNlIEtvcmIgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKmZpeGluYy9pbmNsaGFjay5kZWYoSW9fRGVmX1F1b3Rlcyk6IGNvcnJlY3RlZCBzZWQgZXhwcmVzc2lvbgoJKmZpeGluYy9maXhpbmNsLng6IHJlZ2VuZXJhdGUKCSpmaXhpbmMvaW5jbGhhY2suc2g6IHJlZ2VuZXJhdGUKClRodSBKdW4gIDMgMDI6MTU6MDcgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGFkZF9pbmNvbXBsZXRlX3R5cGUpOiBOZXcgZm4uCgkoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IENhbGwgaXQuCgkocmV0cnlfaW5jb21wbGV0ZV90eXBlcyk6IE5ldyBmbi4KCShkd2FyZjJvdXRfZmluaXNoKTogQ2FsbCBpdC4KClRodSBKdW4gIDMgMDE6MTk6MDMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NzZS5jIChpbnNlcnRfaW5zbl9lbmRfYmIpOiBDb3JyZWN0IHBsYWNlbWVudCBvZiBpbnNucyB3aGVuIHRoZQoJY3VycmVudCBibG9jayBzdGFydHMgd2l0aCBhIENPREVfTEFCRUwgYW5kIGVuZHMgd2l0aCBhIENBTEwgYW5kCgl3ZSBjYW4gbm90IGZpbmQgYWxsIHRoZSBhcmd1bWVudCBzZXR1cCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBDQUxMLgoKV2VkIEp1biAgMiAxNTo0NDoxNSAxOTk5ICBNYXJrIE1pdGNoZWxsIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJUmV2ZXJ0IHRoaXMgY2hhbmdlOgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBTVFJJUF9OT1BTIHdoZW4gZGVjaWRpbmcgd2hldGhlciBvciBub3QKCXNvbWV0aGluZyBpcyBhIGNhbmRpZGF0ZSBmb3Igb3B0aW1pemVfYml0X2ZpZWxkX2NvbXBhcmUuCgpXZWQgSnVuICAyIDIxOjUzOjA1IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmggKENPTlNUX09LX0ZPUl9JLCBDT05TVF9PS19GT1JfTCk6IENhc3QgVkFMVUUgdG8gSE9TVF9XSURFX0lOVC4KCldlZCBKdW4gIDIgMTI6MjU6NTUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBUaGlua28gaW4gbGFzdCBwYXRjaC4KCgkqIGFscGhhL29zZi5oIChDUFBfU1VCVEFSR0VUX1NQRUMpOiBEZWZpbmUuCgkoTElCX1NQRUMpOiBSZWNvZ25pemUgLXB0aHJlYWQuCgpXZWQgSnVuICAyIDA4OjQyOjU1IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3Rjb2ZmLmggKFVTRVJfTEFCRUxfUFJFRklYKTogU3luY2hyb25pemUgd2l0aAoJZGVmaW5pdGlvbiBpbiBjb25maWcvYXJtL2NvZmYuaAoJKiBjb25maWcvYXJtL2NvZmYuaDogQWRkIGNvbW1lbnQgYWJvdXQgVVNFUl9MQUJFTF9QUkVGSVguCgpXZWQgSnVuICAyIDA3OjA3IDE5OTkgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9maXhpbmNsLmMoZ2xvYmFsIGRlZik6IEFkZCBGRF9TSEVMTF9TQ1JJUFQgdG8gbWFyawoJZml4ZXMgdGhhdCBuZWVkICJmaWxlPXh4eFxuIiBwcmVwZW5kZWQgYmVmb3JlIGludm9jYXRpb24KCShzdGFydF9maXhlciAtIG5ldyk6IHN0YXJ0aW5nIHRoZSBmaXhlciBwcm9jZXNzIGlzIGNvbXBsZXggZW5vdWdoCgl0byB3YXJyZW50IGl0cyBvd24gcm91dGluZS4gIEl0IHByZXBlbmRzIHRoZSAiZmlsZT14eHhcbiIgc3R1ZmYuCgkocHJvY2Vzcyk6IHVzZXMgdGhlIG5ldyByb3V0aW5lOyBvbWl0IHVzYWdlIG9mIHB1dGVudigpCgkqIGZpeGluYy9maXhpbmNsLnRwbDogbWFyayBzaGVsbCBzY3JpcHRzIHdpdGggRkRfU0hFTExfU0NSSVBUCgkqIGZpeGluYy9maXhpbmNsLng6IHJlZ2VuZXJhdGUKCldlZCBKdW4gIDIgMDI6Mjk6MDcgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogUkVBRE1FLCBjb25maWd1cmUuaW4sIGdjYy4xLCBnY2MudGV4aTogVXBkYXRlIG5hbWUgKGVnY3MgLT4gZ2NjKQoJYW5kIHZlcnNpb24gI3MgKDEuMSAtPiAyLjk2KSBhcyBuZWVkZWQuCgkqIFJFQURNRS5nNzc6IEtpbGwgd2F5IG91dCBvZiBkYXRlIGZpbGUgaW4gdGhlIHRvcGxldmVsIGRpcmVjdG9yeS4KCldlZCBKdW4gIDIgMDA6NTI6MzQgMTk5OSAgRGF2aWQgTydCcmllbiA8b2JyaWVuQEZyZWVCU0Qub3JnPgoKCSogY29uZmlndXJlLmluIChpWzM0NTY3XTg2LSotZnJlZWJzZGVsZik6IERvbid0IGluY2x1ZGUgbGludXguaCwKCWkzODYvZnJlZWJzZC1lbGYuaCBubyBsb25nZXIgcmVxdWlyZXMgaXQuICBJbnN0ZWFkIGluY2x1ZGUgc3ZyNC5oLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGkzODYvZnJlZWJzZC1lbGYuaCAoREVGQVVMVF9WVEFCTEVfVEhVTktTKTogRGVmaW5lLgoJKEFTTV9DT01NRU5UX1NUQVJULCBBU01fQVBQX09OLCBBU01fQVBQX09GRiwgU0VUX0FTTV9PUCk6IExpa2V3aXNlLgoJKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSwgV0NIQVJfVU5TSUdORUQpOiBMaWtld2lzZS4KCShTV0lUQ0hfVEFLRVNfQVJHKTogTGlrZXdpc2UuCgkqIGkzODYvZnJlZWJzZC5oOiBSZW1vdmUgRlJFRUJTRF9OQVRJVkUgc3VwcG9ydC4KCSogY29uZmlnL3QtZnJlZWJzZDogTW92ZWQgZnJvbSBjb25maWcvaTM4Ni8gc28gaXQgY2FuIHVzZWQgZm9yIGFsbAoJRnJlZUJTRCB0YXJnZXRzLgoKTW9uIE1heSAzMSAwMjoyMjo1NSAxOTk5ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIG02OGsveC1tb3QzMzAwIChYQ0ZMQUdTKTogRml4ZWQgdG8gbWF0Y2ggc3RiLm8sIG5vdCBmL3N0Yi5vLgoKV2VkIEp1biAgMiAwMDowODozNCAxOTk5ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxpcGVAdXNhLm5ldD4KCgkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2N104Ni0qLXVkayopOiBJbnN0YWxsIGhlYWRlcnMgd2l0aCBjcGlvLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpUdWUgSnVuICAxIDE5OjA2OjIyIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC9haXg0MS5oIChSUzYwMDBfQ0FMTF9HTFVFKTogRGVmaW5lLgoJKiByczYwMDAvYWl4NDMuaCAoUlM2MDAwX0NBTExfR0xVRSk6IExpa2V3aXNlLgoJKiByczYwMDAvcnM2MDAwLmMgKHJzNjAwMF9maWxlX3N0YXJ0KTogVXNlIHB1dGMuCgkocnM2MDAwX291dHB1dF9sb2FkX3RvY190YWJsZSk6IFNhbWUuCgkob3V0cHV0X3Byb2xvZywgb3V0cHV0X21pX3RodW5rKTogU2FtZS4KCSogcnM2MDAwL3JzNjAwMC5oIChTRUxFQ1RfU0VDVElPTik6IEZvcm1hdHRpbmcuCgkoQVNNX0dMT0JBTElaRV9MQUJFTCk6IFVzZSBwdXRjLgoKTW9uIE1heSAzMSAxNToyMzoyMyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKHJlbG9hZF8qX2hlbHApOiBOZXcgcGF0dGVybnMgYW5kIHNwbGl0dGVycy4KCShyZWxvYWRfKik6IFVzZSB0aGVtLgoJKG1vdltxaF1pKTogTGlrZXdpc2UuCgpNb24gTWF5IDMxIDExOjQ4OjA3IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjY2NwLmMgKGhhbmRsZV9kaXJlY3RpdmUpOiBIYW5kbGUgYmFja3NsYXNoLW5ld2xpbmVzIGluIHF1b3RlZAoJc3RyaW5ncyBjb3JyZWN0bHkuCgpNb24gTWF5IDMxIDA5OjM2OjExIDE5OTkgIENvcnQgRG91Z2FuICA8Y29ydEBjcy5ubXQuZWR1PgoKCSogcnM2MDAwL2xpbnV4LmggKExJTktfU1BFQyk6IFVzZSBlbXVsYXRpb24gZWxmMzJwcGNsaW51eC4KCk1vbiBNYXkgMzEgMTE6NDA6MjAgRURUIDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGZsb3cuYyAobWFya19yZWdzX2xpdmVfYXRfZW5kLCBpbnNuX2RlYWRfcCwKCW1hcmtfc2V0XzEsIG1hcmtfdXNlZF9yZWdzKTogT25seSBnaXZlIEZSQU1FX1BPSU5URVJfUkVHTlVNCglhbmQgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSBzcGVjaWFsIHRyZWF0bWVudCBpZiByZWxvYWQKCWhhc24ndCBydW4gb3IgdGhlIGZyYW1lIHBvaW50ZXIgaXMgbmVlZGVkLgoJKiBoYWlmYS1zY2hlZC5jIChhdHRhY2hfZGVhdGhzKTogTGlrZXdpc2UuCgkqIHNjaGVkLmMgKGF0dGFjaF9kZWF0aHMpOiBMaWtld2lzZS4KCk1vbiBNYXkgMzEgMDA6NDY6MTcgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSoganVtcC5jIChqdW1wX29wdGltaXplXzEpOiBPbmx5IHNldCBDQU5fUkVBQ0hfRU5EIGlmCgljYWxjdWxhdGVfY2FuX3JlYWNoX2VuZCByZXR1cm5zIG5vbnplcm8uCgoJKiBjb25maWd1cmUuaW4gKG5hdGl2ZSBnYXMgdGVzdHMpOiBTZWFyY2ggZm9yIGFuIGFzc2VtYmxlciBpbiB0aGUKCXNhbWUgbWFubmVyIHRoYXQgdGhlIGluc3RhbGxlZCBjb21waWxlciB3aWxsLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIHRtLnRleGkgKE1EX0VYRUNfUFJFRklYKTogTm90ZSBuZWVkIHRvIHVwZGF0ZSBjb25maWd1cmUuaW4gdG9vLgoKCSogYWxpYXMuYyAoZmluZF9iYXNlX3Rlcm0pOiBJbXByb3ZlIGhhbmRsaW5nIG9mIGFkZHJlc3NlcwoJY29uc3RydWN0ZWQgZnJvbSBiaW5hcnkgb3BlcmF0aW9ucy4KClN1biBNYXkgMzAgMTQ6Mjk6MTcgMTk5OSAgRXJpYyBSYXNraW4gKGVockBsaXN0d29ya3MuY29tKQoKCSogZGd1eC5oIChTVEFSVEZJTEVfU1BFQyk6IEZpeCBpbmNvcnJlY3RseSBtYXRjaGVkIGN1cmx5LWJyYWNlcy4KClN1biBNYXkgMzAgMTQ6MTk6MTMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnVuY3Rpb24uaCAoY2xlYW51cF9sYWJlbCwgZnJhbWVfb2Zmc2V0KTogRGVjbGFyZS4KCSh0YWlsX3JlY3Vyc2lvbl9sYWJlbCwgdGFpbF9yZWN1cnNpb25fcmVlbnRyeSk6IExpa2V3aXNlLgoJKGFyZ19wb2ludGVyX3NhdmVfYXJlYSwgcnRsX2V4cHJfY2hhaW4pOiBMaWtld2lzZS4KCSogc3RtdC5jIChjbGVhbnVwX2xhYmVsLCBmcmFtZV9vZmZzZXQpOiBEZWxldGUgZXh0ZXJuIGRlY2xhcmF0aW9ucy4KCSh0YWlsX3JlY3Vyc2lvbl9sYWJlbCwgdGFpbF9yZWN1cnNpb25fcmVlbnRyeSk6IExpa2V3aXNlLgoJKGFyZ19wb2ludGVyX3NhdmVfYXJlYSwgcnRsX2V4cHJfY2hhaW4pOiBMaWtld2lzZS4KClNhdCBNYXkgMjkgMTk6MDg6MTAgMTk5OSAgUGhpbGlwIEJsdW5kZWxsICA8cGhpbGJAZ251Lm9yZz4KCgkqIGNvbmZpZy9hcm0vYW91dC5oIChBU01fT1VUUFVUX0FMSUdOKTogT25seSBkZWZpbmUgaWYgbm90IGFscmVhZHkKCWRlZmluZWQuCgkqIGNvbmZpZy9hcm0vZWxmLmggKEFTTV9PVVRQVVRfQUxJR04pOiBEZWZpbmUuCgkoTUFYX09GSUxFX0FMSUdOTUVOVCk6IERlZmluZS4KCkZyaSBNYXkgMjggMjE6NDAgMTk5OSAgUm9iZXJ0IExpcGUgPHJvYmVydGxpcGVAdXNhLm5ldD4KCgkqIGZpeGluY2wuYzogUmVwbGFjZSBsb2NhbCBpbmNsdWRlIHNjaGVtZSB3aXRoICNpbmNsdWRlcyBvZgoJZ2Fuc2lkZWNsLmggYW5kIHN5c3RlbS5oLgoJKiBwcm9jb3Blbi5jOiAgTGlrZXdpc2UuCgkqIHNlcnZlci5jOiAgTGlrZXdpc2UuCgpGcmkgTWF5IDI4IDAzOjQ3OjAzIDE5OTkgIEVyaWMgUmFza2luIChlaHJAbGlzdHdvcmtzLmNvbSkKCgkqIGkzODYvdC1kZ3V4IChFWFRSQV9QQVJUUyk6IEFkZCBjcnRpLm8KCShjcnRpLm8pOiBBZGQgYnVpbGQgcnVsZSBhbmQgZGVwZW5kZW5jaWVzLgoJKiBmaXhpbmMvZml4aW5jLmRndXg6ICBVc2UgbW9kaWZpZWQgX2ludF92YXJhcmdzLmgKCkZyaSBNYXkgMjggMDM6NDE6MDIgMTk5OSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogcnM2MDAwL3N5c3Y0LmggKENDMV9TUEVDKTogQWRkIHN1cHBvcnQgZm9yIC1wcm9maWxlCgkoTElCX0xJTlVYX1NQRUMpOiBMaWtld2lzZS4KCShMSUJfTElOVVhfU1BFQyk6IEFkZCBzdXBwb3J0IGZvciAtcHRocmVhZAoJKENQUF9PU19MSU5VWF9TUEVDKTogTGlrZXdpc2UuCgkoQ1BQX1NZU1ZfU1BFQyk6IEF2b2lkIHJlZGVmaW5pdGlvbnMgaWYgYm90aCAtZnBpYyBhbmQgLWZQSUMgYXJlCglzcGVjaWZpZWQuCgpUaHUgTWF5IDI3IDEzOjA0OjUyIDE5OTkgIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGkzODYuYyAob3V0cHV0X2ZwX2NjMF9zZXQpOiBEb24ndCBjaGVjayB0aGUgSlVNUF9JTlNOIGNvZGUgZm9yCgljb25kaXRpb25hbCBtb3ZlLgoJKG5vdGljZV91cGRhdGVfY2MsIG91dHB1dF9mbG9hdF9jb21wYXJlKTogRW5hYmxlIFRBUkdFVF9DTU9WRSBzdXBwb3J0LgoJKG91dHB1dF9mbG9hdF9jb21wYXJlLCBvdXRwdXRfZnBfY2MwX3NldCk6IEZpeCB0aGUgRkxPQVQgY29tcGFyaXNvbgoJZm9yIElFRUUgbWF0aCBhbmQgQ0NfRkNPTUkuCgkocHV0X2p1bXBfY29kZSk6IE5vIElFRUUgaWYgQ0NfRkNPTUkgaXMgc2V0LgoKMTk5OS0wNS0yNyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogZm9sZC1jb25zdC5jIChmb2xkX3RydXRob3ApOiBNYWtlIHRoZSBmaWVsZCByZWZlcmVuY2UgdW5zaWduZWQKCXdoZW4gY29udmVydGluZyBhIHNpbmdsZSBiaXQgY29tcGFyZS4KClRodSBNYXkgMjcgMDI6NDA6NDggMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEb24ndCBkbyBiaXYtPmdpdiBjb252ZXJzaW9uIG9uIGNvbnN0YW50cy4KClRodSBNYXkgMjcgMDI6MDk6MjcgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmFyYXNtLmMgKFNUUklQX05BTUVfRU5DT0RJTkcpOiBSZW1vdmUgZGVmYXVsdCBkZWZpbml0aW9uLgoJKiBvdXRwdXQuaCAoU1RSSVBfTkFNRV9FTkNPRElORyk6IFN0cmlwICcqJyBsaWtlIHRoZSBvbGQgdmFyYXNtCgl2ZXJzaW9uIGRpZC4KCgkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IERvIG5vdCBjYWxsIHJlbW92ZV9hZGRyZXNzX3JlcGxhY2VtZW50cwoJd2hlbiBwcmVzZW50ZWQgd2l0aCBpZGVudGljYWwgb3B0aW9uYWwgcmVsb2Fkcy4KCldlZCBNYXkgMjYgMTQ6MTg6MDUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmggKE1BU0tfRklYLCBUQVJHRVRfRklYKTogTmV3LgoJKE1BU0tfKik6IFJlb3JnYW5pemUgY29uc3RhbnRzLgoJKENQUF9BTV9GSVhfU1BFQyk6IE5ldy4KCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgRklYLgoJKEVYVFJBX1NQRUNTKTogTGlrZXdpc2UuCgkoQ1BQX0NQVV9FVjZfU1BFQyk6IFVzZSBGSVgsIG5vdCBDSVguCgkoU0VDT05EQVJZX01FTU9SWV9ORUVERUQpOiBMaWtld2lzZS4KCShSRUdJU1RFUl9NT1ZFX0NPU1QpOiBMaWtld2lzZS4KCSogYWxwaGEuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IEFkZCBGSVggc3VwcG9ydC4gIEFsd2F5cyB1c2UKCUFMUEhBX1RQX1BST0cgZm9yIGV2Ni4KCSogYWxwaGEubWQgKHNxcnQgYW5kIG1vdltzZF1pIHBhdHRlcm5zKTogVXNlIEZJWCwgbm90IENJWC4KCSogYWxwaGEvZWxmLmggKEFTTV9GSUxFX1NUQVJUKTogTG9vayBhdCBGSVggdG9vLgoJKiBjb25maWd1cmUuaW4gKHRhcmdldF9jcHVfZGVmYXVsdDIpIFtldjZdOiBVc2UgRklYLCBub3QgQ0lYLgoKV2VkIE1heSAyNiAwOTo1MzowNSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogU1RSSVBfTk9QUyB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90Cglzb21ldGhpbmcgaXMgYSBjYW5kaWRhdGUgZm9yIG9wdGltaXplX2JpdF9maWVsZF9jb21wYXJlLgoKV2VkIE1heSAyNiAwOTo0MDowMiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZ2NjLnRleGkgKFBhc3Nlcyk6IERvY3VtZW50IGJyYW5jaC1zaG9ydGVuaW5nLgoJKiBpbnZva2UudGV4aSAoRGVidWdnaW5nIE9wdGlvbnMpOiBEb2N1bWVudCB0aGUgZmFjdCB0aGF0IGAtZHAnCglvdXRwdXRzIGxlbmd0aCBpbmZvcm1hdGlvbiBmb3IgaW5zdHJ1Y3Rpb25zLgoKV2VkIE1heSAyNiAwODo0OTozMSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZmxvdy5jOiBSZXZlcnQgcHJldmlvdXMgZGVsdGEuCgpXZWQgTWF5IDI2IDA2OjA1OjEwIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGluc25fZGVhZF9wKTogQ2hlY2sgYWdhaW5zdCBmcmFtZV9wb2ludGVyX3J0eCBub3QKCUZSQU1FX1BPSU5URVJfUkVHTlVNLgoJKG1hcmtfc2V0XzEpOiBEaXR0by4KCShtYXJrX3VzZWRfcmVncyk6IERpdHRvLgoKV2VkIE1heSAyNiAwMjoxOTozMSAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCgkqIGFybS5oIChORUVEX1BMVF9HT1QpOiBGaXggbWlzdGFrZSBpbiBsYXN0IGNoYW5nZS4KCShHT1RfUENSRUwpOiBOZXcgbWFjcm8uICBEZWZpbmUgdG8gMSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoJKiBhcm0vZWxmLmggKEdPVF9QQ1JFTCk6IERlZmluZSB0byAwLgoJKiBhcm0uYyAoYXJtX2ZpbmFsaXplX3BpYyk6IFRha2UgaW50byBhY2NvdW50IHRoZSBzZXR0aW5nIG9mCglHT1RfUENSRUwuCgpUdWUgTWF5IDI1IDE0OjA2OjA2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG91dHB1dC5oIChTVFJJUF9OQU1FX0VOQ09ESU5HKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24uCgkqIGR3YXJmMm91dC5jIChBU01fTkFNRV9UT19TVFJJTkcpOiBVc2UgU1RSSVBfTkFNRV9FTkNPRElORy4KCgkqIGZsb3cuYyAobWFya19zZXRfMSk6IERvIG5vdCByZWNvcmQgQkxLbW9kZSBzdG9yZXMgYXMgZGVhZAoJc3RvcmUgZWxpbWluYXRpb24gY2FuZGlkYXRlcy4KClR1ZSBNYXkgMjUgMDg6NTU6NTcgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmggKEFTTV9PVVRQVVRfRE9VQkxFX0lOVCkgOiBVc2UgJ2R3b3JkJyBpZgoJVEFSR0VUX0dBUy4KCk1vbiBNYXkgMjQgMjA6MzA6MDggMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChyczYwMDAtaWJtLWFpeDQuWzEyXSopOiBEZWxldGUgdXNlIG9mIGFpeDQxLWdsZC5oLgoJQWRkIHVzZSBvZiB4LWFpeDQxLWdsZC4KCk1vbiBNYXkgMjQgMTY6NDQ6MDkgMTk5OSAgSmFrdWIgSmVsaW5layAgPGpqQHVsdHJhLmxpbnV4LmN6PgoKCSogc3BhcmMvbGludXg2NC5oIChBU01fT1VUUFVUX0NPTlNUUlVDVE9SKTogRGVmaW5lLgoJKEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6IERlZmluZS4KCk1vbiBNYXkgMjQgMTQ6MzU6MjQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEbyBub3QgY2xlYXIgTk9UX0VWRVJZX0lURVJBVElPTiBhdCB0aGUKCWxhc3QgQ09ERV9MQUJFTCBpbiBhIGxvb3AgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHBhc3NlZCBhIGp1bXAKCXRvIHRoZSB0b3Agb2YgdGhlIGxvb3AuCgpNb24gTWF5IDI0IDA3OjU2OjI5IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5oIChPVVRQVVRfSU5UX0FERFJfQ09OU1QpOiBGaXggYmx1bmRlciBtYWRlIHdoZW4KCWFwcGx5aW5nIFBoaWxpcCdzIHBhdGNoLgoKTW9uIE1heSAyNCAwMTowMjoxMiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3RtdC5jIChleHBhbmRfZW5kX2JpbmRpbmdzKTogSWdub3JlIGFueSBlbGVtZW50cyBvZiBWQVJTIHRoYXQKCWFyZSBub3QgVkFSX0RFQ0xzLgoKU3VuIE1heSAyMyAyMDozMToxNiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IEdyb3cgcmVnX3NpbmdsZV91c2FnZSBhcyBuZWVkZWQuCgpTdW4gTWF5IDIzIDEwOjEzOjIwIDE5OTkgIERhdmlkIE8nQnJpZW4gPG9icmllbkBGcmVlQlNELm9yZz4KCgkqIGkzODYvZnJlZWJzZC1lbGYuaCAoTElOS19TUEVDKTogQ2hhbmdlIC1zdGF0aWMgdG8gLUJzdGF0aWMuCglBbHNvIHJlbW92ZSBhIHVzZWxlc3MgY29tbWVudC4KClN1biBNYXkgMjMgMTA6MDU6MjMgMTk5OSAgSmVycnkgUXVpbm4gPGpxdWlubkBub3J0ZWxuZXR3b3Jrcy5jb20+CgoJKiBwYS5tZCAobmVnZGYyLG5lZ3NmMik6ICBVc2UgZm5lZyBpbnN0ZWFkIG9mIGZzdWIgb24gcGEgMi4wLgoKU2F0IE1heSAyMiAyMTowMjowNiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBjb2xsZWN0Mi5jIChtYWluKTogT25seSBnZW5lcmF0ZSBpbXBvcnQgb3IgZXhwb3J0IGZpbGUgYW5kIGFkZAoJdG8gbGluayBhcmd1bWVudHMgaWYgbm9uLWVtcHR5LiAgVXNlIHhtYWxsb2Mgbm90IGFsbG9jYS4KCSh3cml0ZV97ZXhwb3J0LGltcG9ydH1fZmlsZSk6IERlbGV0ZS4KCSh3cml0ZV9haXhfZmlsZSk6IE5ldyBmdW5jdGlvbi4KCShsb2NhdGVsaWIpOiBVc2UgeG1hbGxvYyBub3QgbWFsbG9jLgoJKEdDQ19PS19TWU1CT0wpOiBEbyBub3QgY2hlY2sgdHlwZSBpZiBhaXg2NC4KClNhdCBNYXkgMjIgMDk6MzU6NTEgMTk5OSAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJQmFzZWQgb24gcGF0Y2ggYnkgU2NvdHQgQmFtYnJvdWdoIGFuZCBQYXQgQmVpcm5lOgoJKiBjb25maWcvYXJtL2FybS5jIChtYWtpbmdfY29uc3RfdGFibGUpOiBOZXcgdmFyaWFibGUuCgkqIGNvbmZpZy9hcm0vYXJtLmggKG1ha2luZ19jb25zdF90YWJsZSk6IERlY2xhcmUuCgkoT1VUUFVUX0lOVF9BRERSX0NPTlNUKTogTWFyayBzeW1ib2xzIGFzIHBvc2l0aW9uIGluZGVwZW5kZW50IGlmCglhcHByb3ByaWF0ZS4KCSogY29uZmlnL2FybS9hcm0ubWQgKGNvbnN0dGFibGVfNCwgY29uc3R0YWJsZV84LCBjb25zdHRhYmxlX2VuZCk6CglLZWVwIHRyYWNrIG9mIHdoZW4gd2UgYXJlIGJ1aWxkaW5nIHRoZSBjb25zdGFudCB0YWJsZS4KClNhdCBNYXkgMjIgMDk6MzQ6MjIgMTk5OSAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IEZpeCBlcnJvbmVvdXMgd2FybmluZwoJbWVzc2FnZS4KClNhdCBNYXkgMjIgMDk6MDY6MzMgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmggKE5FRURfUExUX0dPVCk6IE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5CglkZWZpbmVkLgoKU2F0IE1heSAyMiAwNzoxNzowNSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogdG0udGV4aSAoRlVOQ1RJT05fQVJHKTogQ29ycmVjdCBkZXNjcmlwdGlvbiBvZiBhIHN0YWNrIGVsZW1lbnQKCWluIGEgUEFSQUxMRUwuCgpTYXQgTWF5IDIyIDAxOjI3OjQ5IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBleHByLmggKGxhbmdfZXhwYW5kX2NvbnN0YW50KTogR3VhcmQgd2l0aCAjaWZkZWYgVFJFRV9DT0RFLgoKRnJpIE1heSAyMSAyMToxOTowMiAxOTk5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiByczYwMDAuYyAob3V0cHV0X21pX3RodW5rKTogRW5hYmxlIGZ1bGwgc3VwcG9ydCBhZ2Fpbi4KCkZyaSBNYXkgMjEgMjA6MDk6NTIgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guaCAoQlJBTkNIX0NPU1QpOiBEZWZpbmUuCgpUaHUgTWF5IDIwIDEwOjAwOjQyIDE5OTkgIFN0ZXBoZW4gTCBNb3NoaWVyICA8bW9zaGllckB3b3JsZC5zdGQuY29tPgoKCSogTWFrZWZpbGUuaW4gKEdDQ19GT1JfVEFSR0VUKTogQWRkIC1JJChidWlsZF90b29sZGlyKS9pbmNsdWRlLgoKVGh1IE1heSAyMCAwOTo1ODo1NyAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9zdGFja19sb2NhbCk6IEFsaWduIHN0YWNrIHNsb3QgcHJvcGVybHkuCgkoYXNzaWduX291dGVyX3N0YWNrX2xvY2FsKTogTGlrZXdpc2UuCgpUaHUgTWF5IDIwIDEwOjM4OjQzIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBleHByLmggKGxhbmdfZXhwYW5kX2NvbnN0YW50KTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKGxhbmdfZXhwYW5kX2NvbnN0YW50KTogRGVmaW5lIGl0LgoJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50KTogVXNlIGl0LgoKVGh1IE1heSAyMCAxMToyODo1MyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBvcHRhYnMuYyAoZXhwYW5kX2NtcGx4ZGl2X3N0cmFpZ2h0LCBleHBhbmRfY21wbHhkaXZfd2lkZSk6CglDaGFuZ2UgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG8gSyZSIHN0eWxlLgoKVGh1IE1heSAyMCAwODoxNjozOSAxOTk5ICBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL2ZpeGluY2wuYzogV2UgbXVzdCBub3QgaWdub3JlIFNJR0NMRCBub3cuCgpUaHUgTWF5IDIwIDA3OjA2OjM5IDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUBhY20ub3JnPgoKCSogZml4aW5jL01ha2VmaWxlLmluKGdudS1yZWdleC5vKTogYWRkICQoSU5DTFVERVMpIHRvIGNvbXBpbGUgb3B0aW9ucwoJKiBmaXhpbmMvZml4aW5jbC5jKHdhaXRfZm9yX3BpZCk6IEsmUi1pZnkgYXJndW1lbnRzCgkoc2V2ZXJhbCBwbGFjZXMpOiBvbWl0IHN0YXRpYyBpbml0aWFsaXphdGlvbgoJKHByb2Nlc3MpOiB1c2Ugc2luZ2xlIGZkLCBzaW5jZSBvbmx5IHRoZSByZWFkIGZkIGlzIHVzZWQKCSogZml4aW5jL2dudS1yZWdleC5jOiBkZWZpbmUgJ2NvbnN0JyBhd2F5LCBpZiBub3Qgc3VwcG9ydGVkCgkqIGZpeGluYy9wcm9jb3Blbi5jKHNldmVyYWwgcGxhY2VzKTogb21pdCBzdGF0aWMgaW5pdGlhbGl6YXRpb24KCSogZml4aW5jL3NlcnZlci5jOiBkZWZpbmUgJ3ZvbGl0aWxlJyBhd2F5LCBpZiBub3Qgc3VwcG9ydGVkCgoxOTk5LTA1LTIwICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBjb25maWcvZGJ4Y29mZi5oIChEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVfRU5EKTogVXNlCglhc21fZnByaW50ZiBhbmQgJUwgdG8gZ2VuZXJhdGUgdGhlIGxhYmVsIG5hbWUuCgkqIGNvbmZpZy9kYnhlbGYuaCAoREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFX0VORCk6IExpa2V3aXNlLgoJKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBDb3JyZWN0IGdlbmVyYXRpb24gb2YgaW50ZXJuYWwgbGFiZWxzLgoKVGh1IE1heSAyMCAwMTo0MDo1NSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBqdW1wLmMgKGNhbl9yZXZlcnNlX2NvbXBhcmlzb25fcCk6IERvIG5vdCBhYm9ydCBpZiB0aGUgY29tcGFyaXNvbgoJaW5zbiBmb3IgYSBjb25kaXRpb25hbCBqdW1wIGNhbiBub3QgYmUgZm91bmQuCgpXZWQgTWF5IDE5IDIzOjU4OjU4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMuaCAoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IERvIG5vdCBwZXJmb3JtIEdQIG9wdGltaXphdGlvbnMKCW9uIHZhcmlhYmxlcyBpbiBzcGVjaWZpYyBzZWN0aW9ucyBvdGhlciB0aGFuIC5zYnNzIGFuZCAuc2RhdGEuCgpXZWQgTWF5IDE5IDAzOjU2OjU2IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBDYWxsIHN0YXJ0X2NsZWFudXBfZGVmZXJyYWwgYW5kCgllbmRfY2xlYW51cF9kZWZlcnJhbCBhcm91bmQgY29uZGl0aW9uYWwgY29kZS4KCldlZCBNYXkgMTkgMDg6NDA6MDggMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9maXhpbmNsLnRwbDogQXZvaWQgZGVwZW5kaW5nIG9uIEFOU0kgQyBmZWF0dXJlcyBmb3IKCWZpbGVuYW1lIGxpc3RzLiAgVXRpbGl6ZXMgbmV3ICJrcnN0ciIgQXV0b0dlbiBmdW5jdGlvbi4KCSogZml4aW5jL2ZpeGluY2wueDogUmVidWlsdC4KCldlZCBNYXkgMTkgMDI6NDc6MTEgMTk5OSAgSmFuIEh1Ymlja2EgIChodWJpY2thQGZyZWVzb2Z0LmN6KQoKCSogaTM4Ni5jIChvdXRwdXRfZmxvYXRfY29tcGFyZSk6IEF2b2lkIEdOVS1DIGV4dGVuc2lvbnMuCgpXZWQgTWF5IDE5IDAwOjM0OjQwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCB0byBkaXN0aW5ndWlzaCBtYWlubGluZSB0cmVlIGZyb20gdGhlCglnY2MtMi45NSBicmFuY2guCgpTZWUgQ2hhbmdlTG9nLjEgZm9yIGVhcmxpZXIgY2hhbmdlcy4K