Q3VycmVudCBDb21waWxhdGlvbiBGdWxsLUZ1bmN0aW9uYWxpdHkgTGV2ZWw6IEVTU0wgMS4wMC0zLjAwLCBHTFNMIDEuMTAtMy4zMAoKS2V5OgogICsgbWVhbnMgc29tZXRoaW5nIGdvdCBjb21wbGV0ZWQKICAtIG1lYW5zIHNvbWV0aGluZyBoYXMgbm90IHlldCBiZWVuIGRvbmUKICBbTmFtZV0gbWVhbnMgTmFtZSBpcyB3b3JraW5nIG9uIGl0CgpTdW1tYXJ5IG9mIG1haW4gbWlzc2luZyBmZWF0dXJlczoKCkFFUAogLSBHTF9LSFJfYmxlbmRfZXF1YXRpb25fYWR2YW5jZWQKIC0gR0xfT0VTX3NhbXBsZV92YXJpYWJsZXMKIC0gR0xfT0VTX3NoYWRlcl9pbWFnZV9hdG9taWMKIC0gR0xfT0VTX3NoYWRlcl9tdWx0aXNhbXBsZV9pbnRlcnBvbGF0aW9uCiAtIEdMX09FU190ZXh0dXJlX3N0b3JhZ2VfbXVsdGlzYW1wbGVfMmRfYXJyYXkKICsgR0xfRVhUX2dlb21ldHJ5X3NoYWRlcgogKyBHTF9FWFRfZ2VvbWV0cnlfcG9pbnRfc2l6ZQogKyBHTF9FWFRfZ3B1X3NoYWRlcjUKIC0gR0xfRVhUX3ByaW1pdGl2ZV9ib3VuZGluZ19ib3gKICsgR0xfRVhUX3NoYWRlcl9pb19ibG9ja3MKICsgR0xfRVhUX3Rlc3NlbGxhdGlvbl9zaGFkZXIKICsgR0xfRVhUX3Rlc3NlbGxhdGlvbl9wb2ludF9zaXplCiAtIEdMX0VYVF90ZXh0dXJlX2J1ZmZlcgogLSBHTF9FWFRfdGV4dHVyZV9jdWJlX21hcF9hcnJheQoKTWlzc2luZyBmZWF0dXJlcyBpbiBFUyAzLjEKIFtqb2hua3NsYW5nXSBBcnJheXMgb2YgYXJyYXlzCiAtIC5sZW5ndGgoKSBvbiBydW4tdGltZSBhcnJheQoKTWlzc2luZyBkZXNrdG9wIGZlYXR1cmVzIHRoYXQgYXJlIGluIEVBUAogLSBwZXItc2FtcGxlIHNoYWRpbmcKIC0gInByZWNpc2UiCiAKTWlzc2luZyBkZXNrdG9wIGZlYXR1cmVzLCBub24gQUVQCiAtIHN1YnJvdXRpbmVzCiAtIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgdHlwZSAnZG91YmxlJwogLSBzZWNvbmQtZ2VuZXJhdGlvbiBmdW5jdGlvbi1vdmVybG9hZGluZyBkaXNhbWJpZ3VhdGlvbiBhbGdvcml0aG0gKHZlcnNpb24gNDAwKQogLSBQcmVwcm9jZXNzb3IgdG9rZW4gcGFzdGluZyAoIyMpLCAjIyBkb2VzIG1hY3JvIGV4cGFuc2lvbiBhZnRlciBwYXN0aW5nIG5vdCBiZWZvcmUKIC0gdGV4dHVyZVF1ZXJ5TGV2ZWxzIGFuZCB0ZXh0dXJlUXVlcnlMb2QKIApCdWdzCiAtIGltcGxpY2l0bHktc2l6ZWQgZ2xfQ2xpcERpc3RhbmNlW10gKGF0IGxlYXN0IGluIHRlc3NlbGxhdGlvbiBzaGFkZXJzKSB3aXRoIHNpemVzIGdyZWF0ZXIgdGhhbiBvbmUgYXJlIG5vdCBnZXR0aW5nIHNpemVzIGdyZWF0ZXIgdGhhbiBvbmUKCisgY3JlYXRlIHZlcnNpb24gc3lzdGVtCgpMaW5rIFZhbGlkYXRpb24KICAgICsgcHJvdmlkZSBpbnB1dCBjb25maWcgZmlsZSBmb3Igc2V0dGluZyBsaW1pdHMKICAgICAgLSBhbHNvIGNvbnNpZGVyIHNwaXR0aW5nIG91dCBtZWFzdXJlcyBvZiBjb21wbGV4aXR5CiAgICArIGVuc3VyZSBubyBzdGF0aWMgcmVmZXJlbmNlcyB0aHJvd24gYXdheQogICAgLSBnZW5lcmF0ZSBzdGF0aWMgdXNlIG9mIG9iamVjdCBldmVuIGlmIHRoZSBvbmx5IHVzZSBpcyB0byBhY2Nlc3MgdGhlIGxlbmd0aCBvZiBpdHMgYXJyYXkKICAgIENyb3NzLXN0YWdlIGxpbmtpbmcKICAgICAgLSB0eXBlIGNvbnNpc3RlbmN5IGNoZWNrIG9mIHVuaWZvcm0gYW5kIGlucyA8LT4gb3V0cywgYm90aCB2YXJpYWJsZXMgYW5kIGJsb2Nrcywgc3RhZ2Utc3BlY2lmaWMgYXJyYXluZXNzIG1hdGNoaW5nCiAgICAgIC0gbG9jYXRpb24vYmluZGluZy9pbmRleCBjaGVjawogICAgICAtIG1peGVkIGVzL25vbi1lcyBwcm9maWxlcwogICAgICAtIHN0YXRpY2FsbHkgY29uc3VtZWQgaW5wdXQgbm90IHByb2R1Y2VkIGJ5IHByZXZpb3VzIHN0YWdlCiAgICAgIC0gZ2l2ZSBlcnJvciBmb3Igc2hhcmluZyBhIHBhY2tlZCBibG9jawogICAgICAtIDEuMjogbWF0Y2hpbmcgaW5pdGlhbGl6ZXJzIGZvciB1bmlmb3JtcwogICAgICAtIDEuMzogb25seSBzdGF0aWNhbGx5IHVzZWQgYnVpbHQtaW5zIGhhdmUgdG8gYmUgcmVkZWNsYXJlZCBhcyBmbGF0CiAgICAgIC0gMS41OiBtYXRjaGluZyBiZXR3ZWVuIGdsX1BlclZlcnRleCBibG9ja3MgYW5kIGdsX1BlckZyYWdtZW50IGJsb2NrcwogICAgICAtIDEuMzogZGVwcmVjYXRlZCBtaXhpbmcgZml4ZWQgdmVydGV4L2ZyYWdtZW50IHN0YWdlIHdpdGggcHJvZ3JhbW1hYmxlIGZyYWdtZW50L3ZlcnRleCBzdGFnZS4KICAgICAgKyA0LjA6IHRlc3NlbGxhdGlvbiBwcmltaXRpdmUsIHZlcnRpY2VzLCBzcGFjaW5nLCBvcmRlciwgCiAgICAgIC0gNC4zOiBjb21wdXRlIHNoYWRlciBub3QgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgc3RhZ2VzCiAgICAgIC0gNC4zOiByZW1vdmUgY3Jvc3MtdmVyc2lvbiBsaW5raW5nIHJlc3RyaWN0aW9ucy4KICAgICAgLSA0LjM6IEFsbG93IG1pc21hdGNoZXMgaW4gaW50ZXJwb2xhdGlvbiBhbmQgYXV4aWxpYXJ5IHF1YWxpZmljYXRpb24gYWNyb3NzIHN0YWdlcy4KICAgICAgLSA0LjQ6IEEgc3RhZ2UgY29udGFpbnMgdHdvIGRpZmZlcmVudCBibG9ja3MsIGVhY2ggd2l0aCBubyBpbnN0YW5jZSBuYW1lLCB3aGVyZSB0aGUgYmxvY2tzIGNvbnRhaW4gYSBtZW1iZXIgd2l0aCB0aGUgc2FtZSBuYW1lLgogICAgSW50cmEtc3RhZ2UgbGlua2luZywgc2luZ2xlIHNoYWRlcgogICAgICArIHJlY3Vyc2lvbiBmb3IgZnVuY3Rpb25zCiAgICAgIC0gbGltaXRzIGNoZWNraW5nOgogICAgICAgICAgKyBiaW5kaW5ncwogICAgICAgICAgLSBudW1iZXIgb2YgaW5wdXQvb3V0cHV0IGNvbXBvbm9uZW50cwogICAgICAgICAgKyB0ZXNzZWxsYXRpb24gbGltaXRzCiAgICAgICAgICArIHRlc3NlbGxhdGlvbiBwcmltaXRpdmUgYXJyYXkgc2l6aW5nIGNvbnNpc3RlbmN5CiAgICAgICAgICArIE5vbiBFUzogZ2xfVGV4Q29vcmQgY2FuIG9ubHkgaGF2ZSBhIG1heCBhcnJheSBzaXplIG9mIHVwIHRvIGdsX01heFRleHR1cmVDb29yZHMKICAgICAgICAgICsgTm9uIEVTOiBnbF9DbGlwRGlzdGFuY2UgLi4uCiAgICAgICAgICAtIC4uLgogICAgICArIGV4YWN0bHkgb25lIG1haW4KICAgICAgKyBFUyAzLjA6IGZyYWdtZW50IG91dHB1dHMgYWxsIGhhdmUgbG9jYXRpb25zLCBpZiBtb3JlIHRoYW4gb25lCiAgICAgICsgbG9jYXRpb24gYWxpYXNpbmcvb3ZlcmxhcCAoZXhjZXB0IGRlc2t0b3AgdmVydGV4IHNoYWRlciBpbnB1dHMpCiAgICAgICsgYmluZGluZyBvdmVybGFwIGZvciBhdG9taWMgY291bnRlcnMKICAgICAgKyBOb24gRVM6IGdlb21ldHJ5IHNoYWRlciBpbnB1dCBhcnJheSBzaXplcyBhbmQgaW5wdXQgbGF5b3V0IHF1YWxpZmllciBkZWNsYXJhdGlvbgogICAgICArIE5vbiBFUzogcmVhZCBvciB3cml0ZSB0byBib3RoIGdsX0NsaXBWZXJ0ZXggYW5kIGdsX0NsaXBEaXN0YW5jZQogICAgICArIE5vbiBFUzogd3JpdGUgdG8gb25seSBvbmUgb2YgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgb3IgdXNlci1kZWNsYXJlZAogICAgICArIDEuNTA6IG1hdGNoIGJldHdlZW4gYWxsIGV4cGxpY2l0IGlucHV0IGFycmF5IHNpemVzIGFuZCBpbnB1dCBwcmltaXRpdmUKICAgICAgKyAxLjUwOiBhdCBsZWFzdCBvbmUgZ2VvbWV0cnkgc2hhZGVyIHNheXMgaW5wdXQgcHJpbWl0aXZlIGFuZCBhdCBsZWFzdCBvbmUgc2F5cyBvdXRwdXQgcHJpbWl0aXZlLi4uCiAgICAgICsgMS41MDogYXQgbGVhc3Qgb25lIGdlb21ldHJ5IHNoYWRlciBzYXlzIG1heF92ZXJ0aWNlcy4uLgogICAgICArIDEuNTA6IG9yaWdpbl91cHBlcl9sZWZ0IGFuZCBwaXhlbF9jZW50ZXJfaW50ZWdlciBoYXZlIHRvIG1hdGNoCiAgICAgIC0gRXZlbiB0aGUgcG90ZW50aWFsIGZvciByZWN1cnNpb24gdGhyb3VnaCBzdWJyb3V0aW5lIHVuaWZvcm1zIGlzIGFuIGVycm9yLgogICAgICAtIDQuNDogQW4gaW50ZXJmYWNlIGNvbnRhaW5zIHR3byBkaWZmZXJlbnQgYmxvY2tzLCBlYWNoIHdpdGggbm8gaW5zdGFuY2UgbmFtZSwgd2hlcmUgdGhlIGJsb2NrcyBjb250YWluIGEgbWVtYmVyIHdpdGggdGhlIHNhbWUgbmFtZS4KICAgICAgLSA0LjQ6IGNvbXBvbmVudCBhbGlhc2luZyAoZXhjZXB0IGRlc2t0b3AgdmVydGV4IHNoYWRlciBpbnB1dHMpCiAgICAgIC0gNC40OiBvdmVybGFwcGluZyB0cmFuc2Zvcm0vZmVlZGJhY2sgb2Zmc2V0cywgb2Zmc2V0L3N0cmlkZSBvdmVyZmxvdyBjaGVja3MsIGFuZCBzdHJpZGUgbWF0Y2hpbmcKICAgIEludHJhLXN0YWdlIGxpbmtpbmcsIG11bHRpcGxlIHNoYWRlciAoTm9uLUVTKQogICAgICArIHR5cGUgY29uc2lzdGVuY3kgY2hlY2sgb2YgdW5pZm9ybXMsIGdsb2JhbHMsIGlucywgYW5kIG91dHMKICAgICAgKyB2YWx1ZSBjaGVja2luZyBvZiBnbG9iYWwgY29uc3QgaW5pdGlhbGl6ZXJzCiAgICAgICsgdmFsdWUgY2hlY2tpbmcgb2YgdW5pZm9ybSBpbml0aWFsaXplcnMKICAgICAgKyBsb2NhdGlvbiBtYXRjaAogICAgICAtIGJsb2NrIG1hdGNoaW5nCiAgICAgICsgY29tcG9uZW50L2JpbmRpbmcvaW5kZXgvb2Zmc2V0IG1hdGNoIGNoZWNrCiAgICAgICsgY29tcHV0ZSBzaGFkZXIgbGF5b3V0KGxvY2FsX3NpemVfKikgbWF0Y2hpbmcKICAgICAgKyBtaXhlZCBlcy9ub24tZXMgcHJvZmlsZXMgYXJlIGFuIGVycm9yCiAgICAgIC0gYmluZGluZyBvdmVybGFwIGZvciBhdG9taWMgY291bnRlcnMKICAgICAgLSBtYXRjaGluZyByZWRlY2xhcmF0aW9ucyBvZiBpbnRlcmZhY2UgYmxvY2tzCiAgICAgIC0gNC4zOiBpbXBsaWNpdCBhcnJheSBzaXppbmcgaXMgY3Jvc3Mgc2hhZGVyIHdpdGhpbiBhIHN0YWdlCiAgICAgIC0gNC40OiBJZiBnbF9GcmFnQ29vcmQgaXMgcmVkZWNsYXJlZCBpbiBhbnkgZnJhZ21lbnQgc2hhZGVyIGluIGEgcHJvZ3JhbSwgaXQgbXVzdCBiZSByZWRlY2xhcmVkIGluIGFsbCB0aGUgZnJhZ21lbnQgc2hhZGVycyBpbiB0aGF0IHByb2dyYW0gdGhhdCBoYXZlIGEgc3RhdGljIHVzZSBnbF9GcmFnQ29vcmQKClNoYWRlciBGdW5jdGlvbmFsaXR5IHRvIEltcGxlbWVudC9GaW5pc2gKICAgIEVTU0wgMi4wICgjdmVyc2lvbiAxMDApCiAgICAgICsgaW1wbGVtZW50IG5vbi1pbmR1Y3RpdmUgbG9vcCBsaW1pdGF0aW9uIGRldGVjdGlvbgogICAgICArIGltcGxlbWVudCBub24taW5kdWN0aXZlIGFycmF5IGFjY2Vzc2VzIGxpbWl0YXRpb24gZGV0ZWN0aW9uCiAgICBFU1NMIDMuMAogICAgICAtICJjb25zdCIgY29tcGlsZS10aW1lIGNvbnN0YW50IHByb3BhZ2F0aW9uIGluIHRoZSBmcm9udC1lbmQgaGFzIHRvIGJlIGNvbXBsZXRlLCBmb3IgYWxsIGJ1aWx0LWluIGZ1bmN0aW9ucwogICAgRVNTTCAzLjEKICAgICAgKyBDb21wdXRlIHNoYWRlcnMKICAgICAgKyBTaGFkZXIgc3RvcmFnZSBidWZmZXIgb2JqZWN0cwogICAgICAtIEFycmF5cyBvZiBhcnJheXMKICAgICAgKyBBdG9taWMgY291bnRlcnMKICAgICAgKyBJbWFnZXMKICAgICAgKyBTZXBhcmF0ZSBwcm9ncmFtIG9iamVjdHMgKGFsc28ga25vd24gYXMgc2VwYXJhdGUgc2hhZGVyIG9iamVjdHMpCiAgICAgICsgRXhwbGljaXQgdW5pZm9ybSBsb2NhdGlvbnMKICAgICAgKyBUZXh0dXJlIGdhdGhlcgogICAgICArIEJpdGZpZWxkIG9wZXJhdGlvbnMKICAgICAgKyBJbnRlZ2VyIG1peCBmdW5jdGlvbgogICAgICArIG92ZXJsYXBwaW5nIGJpbmRpbmdzL29mZnNldHMgYW5kIG9mZnNldCBwb3N0IGluY3JlbWVudAogICAgICArIGZyZXhwL2xkZXhwCiAgICAgICsgcGFja1Vub3JtNHg4KCkscGFja1Nub3JtNHg4KCksIHVucGFja1Vub3JtNHg4KCksIHVucGFja1Nub3JtNHg4KCkKICAgICAgKyAyRE1TIHNhbXBsZXJzIGFuZCBpbWFnZXMKICAgICAgKyBpbmhlcml0YW5jZSBvZiBtZW1vcnkgcXVhbGlmaWVycyBpbiBibG9jayBtZW1iZXJzCiAgICBHTFNMIDEuMgogICAgICArIEhhbmRsZSBtdWx0aXBsZSBjb21waWxhdGlvbiB1bml0cyBwZXIgc3RhZ2UKICAgICAgKyBBbGxvdyBpbml0aWFsaXplcnMgb24gdW5pZm9ybSBkZWNsYXJhdGlvbnMKICAgICAgKyBzaWduYXR1cmUgbWF0Y2hpbmcgdGFrZXMgdHlwZSBjb252ZXJzaW9ucyBpbnRvIGFjY291bnQsIGFtYmlndWl0eSBpcyBhbiBlcnJvcgogICAgR0xTTCAxLjMKICAgICAgKyBmbGF0IHJlZGVjbGFyYXRpb24gb2YgYnVpbHQtaW4gdmFyaWFibGVzCiAgICAgIC0gUHJlcHJvY2Vzc29yIHRva2VuIHBhc3RpbmcgKCMjKSwgIyMgZG9lcyBtYWNybyBleHBhbnNpb24gYWZ0ZXIgcGFzdGluZyBub3QgYmVmb3JlCiAgICAgICsgbm9uLXBlcnNwZWN0aXZlIChsaW5lYXIpIGludGVycG9sYXRpb24gKG5vcGVyc3BlY3RpdmUpCiAgICAgICsgYWRkIGdsX0NsaXBEaXN0YW5jZVtdIHRvIGJvdGggdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzCiAgICAgICsgRGVwcmVjYXRlZCBnbF9DbGlwVmVydGV4CiAgICAgICsgZGVwcmVjYXRlIGFsbW9zdCBhbGwgYnVpbHQtaW4gc3RhdGUKICAgICAgKyBmdHJhbnNmb3JtKCkgaXMgZGVwcmVjYXRlZAogICAgICArIERlcHJlY2F0ZWQgYnVpbHQtaW4gdmVydGV4IGlucHV0cyAoYXR0cmlidXRlcykgYW5kIHNvbWUgb3V0cHV0cyAodmFyeWluZ3MpLgogICAgR0xTTCAxLjQgKE5vbi1FUykKICAgICAgKyByZWN0YW5ndWxhciB0ZXh0dXJlcwogICAgICArIHRyYWNrIGFzIHJlbW92ZWQgaW4gdGhpcyByZWxlYXNlLCBidXQgcHJlc2VudCBpbiBvdGhlcnM6CiAgICAgICAgKyBVc2Ugb2YgZ2xfQ2xpcFZlcnRleC4gIFVzZSBnbF9DbGlwRGlzdGFuY2UgaW5zdGVhZC4KICAgICAgICArIEJ1aWx0LWluIHZlcnRleCBzaGFkZXIgaW5wdXRzLgogICAgICAgICsgQnVpbHQtaW4gdW5pZm9ybXMgZXhjZXB0IGZvciBkZXB0aCByYW5nZSBwYXJhbWV0ZXJzCiAgICAgICAgKyBCdWlsdC1pbiBpbnRlcmZhY2UgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50OiAgZ2xfVGV4Q29vcmQsIGdsX0ZvZ0ZyYWdDb29yZCwgYW5kIGFsbCB0aGUgY29sb3IgdmFsdWVzLgogICAgICAgICsgQnVpbHQtaW4gdHdvLXNpZGVkIGNvbG9yaW5nLgogICAgICAgICsgRml4ZWQgZnVuY3Rpb25hbGl0eSBmb3IgYSBwcm9ncmFtbWFibGUgc3RhZ2UuIAogICAgICAgICsgZnRyYW5zZm9ybSgpLiAgVXNlIGludmFyaWFudCBvdXRwdXRzIGluc3RlYWQuCiAgICBHTFNMIDEuNSAoTm9uLUVTKQogICAgICArIERlcHJlY2F0ZWQgZ2xfTWF4VmFyeWluZ0NvbXBvbmVudHMKICAgICAgKyBBZGQgbmV3IG1pbmltdW0gbWF4aW11bXMgZm9yIGdsX01heFZlcnRleE91dHB1dENvbXBvbmVudHMsIGdsX01heEdlb21ldHJ5SW5wdXRDb21wb25lbnRzLCBnbF9NYXhHZW9tZXRyeU91dHB1dENvbXBvbmVudHMsIGFuZCBnbF9NYXhGcmFnbWVudElucHV0Q29tcG9uZW50cywgCiAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGdsX01heFZhcnlpbmdDb21wb25lbnRzLiAgQWxzbywgY29ycmVjdGVkIGdsX01heFZhcnlpbmdDb21wb25lbnRzIHRvIGJlIDYwIGluc3RlYWQgb2YgNjQuCiAgICAgICsgQWRkZWQgZ2xfUHJpbWl0aXZlSUQgYXMgYW4gaW5wdXQgdG8gZnJhZ21lbnQgc2hhZGVycy4KICAgICAgKyBBZGRlZCBnbF9GcmFnQ29vcmQgcXVhbGlmaWVycyBvcmlnaW5fdXBwZXJfbGVmdCwgYW5kIHBpeGVsX2NlbnRlcl9pbnRlZ2VyIHRvIG1vZGlmeSB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IGdsX0ZyYWdDb29yZCAoYW5kIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBvdGhlciBhc3BlY3Qgb2YgdGhlIHBpcGVsaW5lIG9yIGxhbmd1YWdlKS4KICAgICAgICArIGluY2x1ZGluZyByZWRlY2xhcmF0aW9uIG9mIGdsX0ZyYWdDb29yZCB0aGF0IGFkZHMgbm90aGluZwogICAgICArIEFkZGVkIHN1cHBvcnQgZm9yIG11bHRpLXNhbXBsZSB0ZXh0dXJlcyB0aHJvdWdoIHNhbXBsZXIyRE1TIGFuZCBzYW1wbGVyMkRNU0FycmF5IHN1cHBvcnQgaW4gdGV4ZWxGZXRjaCgpIGFuZCB0ZXh0dXJlU2l6ZSgpLgogICAgICArIEJyb2FkZW5lZCBpbnRlcmZhY2UgYmxvY2tzIGZyb20ganVzdCB1bmlmb3JtcyB0byBpbiBhbmQgb3V0IGludGVyZmFjZXMgYXMgd2VsbC4KICAgICAgKyBCcm9hZGVuIGFycmF5IHVzYWdlIHRvIGluY2x1ZGUgdmVydGV4IHNoYWRlciBpbnB1dHMgKHZlcnRleCBpbikuCiAgICAgICsgQWRkZWQgZ2VvbWV0cnkgc2hhZGVycy4gIFRoaXMgaW5jbHVkZXMgdGFyZ2V0aW5nIGxheWVycyBpbiBGQk8gcmVuZGVyaW5nLgogICAgICArIGdlb21ldHJ5IHNoYWRlciBsYXlvdXRzOiB0aGV5IG11c3QgYmUgZGVjbGFyZWQsIHRlbGxpbmcgdGhlIHN5c3RlbSB0aGUgcHJpbWl0aXZlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgYW5kIG1heGltdW0gbnVtYmVyIG9mIHZlcnRpY2VzLgogICAgICArIEFkZGVkIGdlb21ldHJ5IHNoYWRlciBjb25zdGFudHMuCiAgICAgICsgQnJvYWRlbiBzdHJ1Y3R1cmUgdXNhZ2UgdG8gaW5jbHVkZSBnZW9tZXRyeSBpbnB1dHMgYW5kIGdlb21ldHJ5IG91dHB1dHMuCiAgICAgICsgdGV4ZWwgb2Zmc2V0IGxpbWl0IGNoZWNraW5nCiAgICAgICsgMS41MDogZ2VvbWV0cnkgc2hhZGVyczogbWF4X3ZlcnRpY2VzIG11c3QgYmUgY2hlY2tlZCBhZ2FpbnN0IGdsX01heEdlb21ldHJ5T3V0cHV0VmVydGljZXMgKG1heWJlIGF0IGNvbXBpbGUgdGltZSkKICAgIEdMU0wgMy4zCiAgICAgICsgQWRkIEFSQl9leHBsaWNpdF9hdHRyaWJfbG9jYXRpb24gZXh0ZW5zaW9uCiAgICAgICsgQWRkIEFSQl9zaGFkZXJfYml0X2VuY29kaW5nIGV4dGVuc2lvbgogICAgR0xTTCA0LjAKICAgICAgKyB0ZXNzZWxsYXRpb24gY29udHJvbCBzdGFnZSBhbmQgdGVzc2VsbGF0aW9uIGV2YWx1YXRpb24gc3RhZ2UuIEluY2x1ZGVzIGJhcnJpZXIoKSBidWlsdC1pbiBmb3Igc3luY2hyb25pemF0aW9uLgogICAgICAgICsgcGF0Y2ggaW4sIHBhdGNoIG91dAogICAgICAgICsgaW5wdXQvb3V0cHV0IGFycmF5cwogICAgICAgICAgKyB1bnNpemVkIGFycmF5IHNpemluZyB0byBnbF9NYXhQYXRjaFZlcnRpY2VzLCBpbmNsdWRpbmcgZ2xfaW4vZ2xfb3V0CiAgICAgICAgKyBidWlsdC1pbiB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgYW5kIGNvbnN0YW50cyB2ZXJpZmljYXRpb24KICAgICAgICArIGxheW91dCBxdWFsaWZpZXJzIGZvciBwcmltaXRpdmUgdHlwZXMKICAgICAgLSBQb2x5bW9ycGhpYyBmdW5jdGlvbnM6IFJ1bi10aW1lIHNlbGVjdGlvbiBvZiB3aGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkLCB0aHJvdWdoIHRoZSBuZXcga2V5d29yZCBzdWJyb3V0aW5lLgogICAgICAtIDY0Yml0IGZsb2F0aW5nIHBvaW50IG51bWJlcnMgd2l0aCB0aGUgbmV3IHR5cGUga2V5d29yZCBkb3VibGUuICBCdWlsdC1pbiBmdW5jdGlvbnMgZXh0ZW5kZWQgZm9yIGRvdWJsZXMsIGFuZCBuZXcgZnVuY3Rpb24gbWF0Y2hpbmcgcnVsZXMgYXJlIGFkZGVkIHRvIGJvdGggYWxsb3cgaW1wbGljaXQgY29udmVyc2lvbnMgd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gYW5kIHByZXNlcnZlIG1vc3QgZXhpc3RpbmcgZnVuY3Rpb24gbWF0Y2hpbmcgb25jZSBkb3VibGVzIGFyZSBpbmNsdWRlZC4gCiAgICAgICsgTW9yZSBpbXBsaWNpdCBjb252ZXJzaW9ucyAKICAgICAgICAgKyBmbG9hdCB0byBkb3VibGUsIGFuZCBzaW1pbGFybHkgZm9yIGFsbCBmbG9hdGluZy1wb2ludCB2ZWN0b3IgYW5kIG1hdHJpeCB0eXBlcwogICAgICAgICArIGludCB0byB1aW50LCBhbmQgc2ltaWxhcmx5IGZvciBhbGwgaW50ZWdlciB2ZWN0b3IgdHlwZXMKICAgICAgICAgKyBpbnQgdG8gZG91YmxlLCBhbmQgc2ltaWxhcmx5IGZvciBhbGwgdmVjdG9ycyBvZiBpbnRlZ2VycyBhbmQgZG91Ymxlcy4KICAgICAgICAgKyB1aW50IHRvIGRvdWJsZSwgYW5kIHNpbWlsYXJseSBmb3IgYWxsIHZlY3RvcnMgb2YgaW50ZWdlcnMgYW5kIGRvdWJsZXMuCiAgICAgICsgQ3ViZSBtYXAgYXJyYXkgdGV4dHVyZXMgYW5kIHRleHR1cmUgZnVuY3Rpb25zIHRleHR1cmUoKSwgdGV4dHVyZVNpemUoKSwgdGV4dHVyZUxvZCgpLCBhbmQgdGV4dHVyZUdyYWQoKS4KICAgICAgKyBTYW1wbGVyIGFycmF5cyBjYW4gdGFrZSBhIHZhcmlhYmxlIGluZGV4IG5vdywgYXMgbG9uZyBhcyBpdCdzIHZhbHVlIGlzIHVuaWZvcm0gZm9yIGFsbCB1c2VzLgogICAgICAtIFBlci1zYW1wbGUgc2hhZGluZy4gSW5jbHVkaW5nIHNhbXBsZSBpbnB1dCBtYXNrIGdsX1NhbXBsZU1hc2tJbltdIGFuZCBwZXItc2FtcGxlIGludGVycG9sYXRpb24sIHdpdGggZXhwbGljaXQgaW50ZXJwb2xhdGlvbiBidWlsdC1pbnMgaW50ZXJwb2xhdGVBdENlbnRyb2lkKCksIGludGVycG9sYXRlQXRTYW1wbGUoKSwgYW5kIGludGVycG9sYXRlQXRPZmZzZXQoKS4KICAgICAgLSBOZXcgcHJlY2lzZSBxdWFsaWZpZXIgdG8gZGlzYWxsb3cgb3B0aW1pemF0aW9ucyB0aGF0IHJlLW9yZGVyIG9wZXJhdGlvbnMgb3IgdHJlYXQgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBvcGVyYXRvciB3aXRoIGRpZmZlcmVudCBwcmVjaXNpb24uCiAgICAgICsgQWRkIGEgZnVzZWQgbXVsdGlwbHkgYW5kIGFkZCBidWlsdC1pbiwgZm1hKCksIGluIHJlbGF0aW9uIHRvIHRoZSBuZXcgcHJlY2lzZSBxdWFsaWZpZXIuIChCZWNhdXNlIJNhICogYiArIGOUIHdpbGwgcmVxdWlyZSB0d28gb3BlcmF0aW9ucyB1bmRlciBuZXcgcnVsZXMgZm9yIHByZWNpc2UuKQogICAgICArIEFkZGVkIG5ldyBidWlsdC1pbiBmbG9hdGluZy1wb2ludCBmdW5jdGlvbnMgCiAgICAgICAgICsgZnJleHAoKSBhbmQgbGRleHAoKQogICAgICAgICArIHBhY2tVbm9ybTJ4MTYoKSwgdW5wYWNrVW5vcm0yeDE2KCksCiAgICAgICAgICsgcGFja1Vub3JtNHg4KCksIHBhY2tTbm9ybTR4OCgpLCB1bnBhY2tVbm9ybTR4OCgpLCB1bnBhY2tTbm9ybTR4OCgpCiAgICAgICAgICsgcGFja0RvdWJsZTJ4MzIoKSBhbmQgdW5wYWNrRG91YmxlMngzMigpCiAgICAgICsgQWRkIG5ldyBidWlsdC1pbiBpbnRlZ2VyIGZ1bmN0aW9ucwogICAgICAgICArIHVhZGRDYXJyeSgpIGFuZCB1c3ViQm9ycm93KCkKICAgICAgICAgKyB1bXVsRXh0ZW5kZWQoKSBhbmQgaW11bEV4dGVuZGVkKCkKICAgICAgICAgKyBiaXRmaWVsZEV4dHJhY3QoKSBhbmQgYml0ZmllbGRJbnNlcnQoKQogICAgICAgICArIGJpdGZpZWxkUmV2ZXJzZSgpCiAgICAgICAgICsgYml0Q291bnQoKSwgZmluZExTQigpLCBhbmRmaW5kTVNCKCkKICAgICAgLSBOZXcgYnVpbHQtaW4gdG8gcXVlcnkgTE9ELCB0ZXh0dXJlUXVlcnlMb2QoKS4KICAgICAgLSBOZXcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBtYXRjaGluZyBhbGdvcml0aG0sIGhhbmRsaW5nIHNlbGVjdGlvbiBmcm9tIG1hbnkgdmFsaWQgbXVsdGlwbGUgY2hvaWNlcy4KICAgICAgKyBUZXh0dXJlIGdhdGhlciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gZm91ciB0ZXhlbHMgd2l0aCBhIHNpbmdsZSBjYWxsLgogICAgICAgICArIHRleHR1cmVHYXRoZXIoKQogICAgICAgICArIHRleHR1cmVHYXRoZXJPZmZzZXQoKQogICAgICAgICArIHRleHR1cmVHYXRoZXJPZmZzZXRzKCkKICAgICAgKyBBZGQgc3RyZWFtcyBvdXQgZnJvbSBnZW9tZXRyeSBzaGFkZXIuIE91dHB1dCBjYW4gYmUgZGlyZWN0ZWQgdG8gc3RyZWFtcyB0aHJvdWdoCiAgICAgICAgICsgRW1pdFN0cmVhbVZlcnRleCgpIGFuZCBFbmRTdHJlYW1QcmltaXRpdmUoKS4KICAgIEdMU0wgNC4xCiAgICAgICsgU3VwcG9ydCBmb3IgcGFydGl0aW9uaW5nIHNoYWRlcnMgaW50byBtdWx0aXBsZSBwcm9ncmFtcyB0byBwcm92aWRlIGxpZ2h0LXdlaWdodCBtaXhpbmcgb2YgZGlmZmVyZW50IHNoYWRlciBzdGFnZXMuCiAgICAgICAgICAgIChHTF9BUkJfc2VwYXJhdGVfc2hhZGVyX29iamVjdHMpCiAgICAgICAgKyBsYXlvdXQgcXVhbGlmaWVycwogICAgICAgICsgcmVkZWNsYXJhdGlvbiBvZiBpbnB1dC9vdXRwdXQgYmxvY2tzCiAgICAgICAgKyAuLi4KICAgICAgLSBBZGQgNjQtYml0IGZsb2F0aW5nLXBvaW50IGF0dHJpYnV0ZXMgZm9yIHZlcnRleCBzaGFkZXIgaW5wdXRzLgogICAgICArIFN1cHBvcnQgdmlld3BvcnQgYXJyYXlzIHNvIHdoZXJlIHRoZSBnZW9tZXRyeSBzaGFkZXIgc2VsZWN0cyB3aGljaCB2aWV3cG9ydCBhcnJheSB3aWxsIHRyYW5zZm9ybSBpdHMgb3V0cHV0LgogICAgR0xTTCA0LjIKICAgICAgKyBNb3ZlIHRoZXNlIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBmZWF0dXJlcyB0byBiZSBvbmx5IGluIHRoZSBjb21wYXRpYmlsaXR5IHByb2ZpbGU6CiAgICAgICAgKyBUaGUga2V5d29yZCBhdHRyaWJ1dGUgZm9yIHZlcnRleCBzaGFkZXIgaW5wdXRzLiAoVXNlIGluIGluc3RlYWQuKQogICAgICAgICsgVGhlIGtleXdvcmQgdmFyeWluZyBmb3IgaW5wdXRzIGFuZCBvdXRwdXRzLiAoVXNlIGluIGFuZCBvdXQgaW5zdGVhZC4pCiAgICAgICAgKyBUaGUgb3JpZ2luYWwgdGV4dHVyaW5nIGJ1aWx0LWluIGZ1bmN0aW9ucy4gKFVzZSB0aGUgbmV3IGZvcm1zIGluc3RlYWQuKQogICAgICAgICsgVGhlIGJ1aWx0LWluIHZhcmlhYmxlcyBnbF9GcmFnQ29sb3IgYW5kIGdsX0ZyYWdEYXRhLiAoVXNlIG91dCBpbnN0ZWFkLikKICAgICAgICArIEJ1aWx0LWluIGNvbnN0YW50cyByZWxhdGVkIHRvIHRoZXNlLgogICAgICArIENoYW5nZSBmcm9tIEFTQ0lJIHRvIFVURi04IGZvciB0aGUgbGFuZ3VhZ2UgY2hhcmFjdGVyIHNldCBhbmQgYWxzbyBhbGxvdyBhbnkgY2hhcmFjdGVycyBpbnNpZGUgY29tbWVudHMgKGV4Y2VwdCB0aGUgYnl0ZSB2YWx1ZSAwKSwgCiAgICAgICAgaW5jbHVkaW5nICdcJy4KICAgICAgKyBBZGQgbGluZS1jb250aW51YXRpb24gdXNpbmcgJ1wnLCBhcyBpbiBDKysuCiAgICAgICsgRVMgY29udmVyZ2VuY2UKICAgICAgICArIENsYXJpZnkgdGhhdCAueHl6d3h5Lnh5IGlzIGlsbGVnYWwsIGFzIGl0IHRlbXBvcmFyaWx5IG1ha2VzIGEgk3ZlYzaULgogICAgICAgICsgQ2xhcmlmeSB0aGF0IHJldHVybiBzdGF0ZW1lbnRzIG9ubHkgYWNjZXB0IHZhbHVlcyAobm8gcmV0dXJuIG9mIGEgdm9pZCBmdW5jdGlvbikuCiAgICAgICsgQWRkIGltYWdlIHR5cGVzIChHTF9BUkJfc2hhZGVyX2ltYWdlX2xvYWRfc3RvcmUpCiAgICAgICAgKyAzMyBuZXcgdHlwZXMsIGFsbCB3aXRoIJNpbWFnZZQgaW4gdGhlaXIgbmFtZSwgY29ycmVzcG9uZCB0byB0aGUgbm9uLXNoYWRvdyB0ZXh0dXJlIHR5cGVzCiAgICAgICAgKyBhZGRpdGlvbiBvZiBtZW1vcnkgcXVhbGlmaWVyczogY29oZXJlbnQsIHZvbGF0aWxlLCByZXN0cmljdCwgcmVhZG9ubHksIGFuZCB3cml0ZW9ubHkKICAgICAgICArIGNhbiByZWFkL3dyaXRlL21vZGlmeSBpbWFnZXMgZnJvbSBhIHNoYWRlciwgdGhyb3VnaCBuZXcgYnVpbHQtaW4gZnVuY3Rpb25zCiAgICAgICAgKyBxdWFsaWZpZXJzIGNhbiBhY3QgaW5kZXBlbmRlbnRseSBvbiB0aGUgb3BhcXVlIHNoYWRlciB2YXJpYWJsZSBhbmQgdGhlIGJhY2tpbmcgaW1hZ2UsIHNvIGV4dHJhIHF1YWxpZmllcnMgY2FuIGJlIHVzZWQgdG8gc2VwYXJhdGVseSBxdWFsaWZ5IHRoZXNlCiAgICAgICAgKyBlYXJseV9mcmFnbWVudF90ZXN0cwogICAgICArIFZhcmlhYmxlcyBkZWNsYXJlZCBpbiBpZiBhbmQgZWxzZSBzdGF0ZW1lbnRzIGFyZSBzY29wZWQgb25seSB0byB0aGUgZW5kIG9mIHRob3NlIHN0YXRlbWVudHMsIGVzcGVjaWFsbHkgZm9yIG5vbi1jb21wb3VuZCBzdGF0ZW1lbnRzCiAgICAgICAgTm90ZSwgdGhpcyBpcyBub3QgYmFja3dhcmQgY29tcGF0aWJsZSwgaXQgbWF5IGRlcGVuZCBvbiAjdmVyc2lvbi4KICAgICAgKyBBbGxvdyBpbXBsaWNpdCBjb252ZXJzaW9ucyBvZiByZXR1cm4gdmFsdWVzIHRvIHRoZSBkZWNsYXJlZCB0eXBlIG9mIHRoZSBmdW5jdGlvbi4KICAgICAgKyBUaGUgY29uc3Qga2V5d29yZCBjYW4gYmUgdXNlZCB0byBkZWNsYXJlIHZhcmlhYmxlcyB3aXRoaW4gYSBmdW5jdGlvbiBib2R5IHdpdGggaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbnMgdGhhdCBhcmUgbm90IGNvbnN0YW50IGV4cHJlc3Npb25zLgogICAgICArIFF1YWxpZmllcnMgb24gdmFyaWFibGUgZGVjbGFyYXRpb25zIG5vIGxvbmdlciBoYXZlIHRvIGZvbGxvdyBhIHN0cmljdCBvcmRlci4gVGhlIGxheW91dCBxdWFsaWZpZXIgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMsIGFuZCBtdWx0aXBsZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyBjYW4gYmUgdXNlZC4KICAgICAgKyBQYXJhbWV0ZXIgcXVhbGlmaWVycyBjYW4gaW5jbHVkZSBwcmVjaXNpb24gYW5kIG1lbW9yeSBxdWFsaWZpZXJzLgogICAgICArIEFkZCBhIG5ldyBhdG9taWNfdWludCB0eXBlIHRvIHN1cHBvcnQgYXRvbWljIGNvdW50ZXJzLiBBbHNvLCBhZGQgYnVpbHQtaW4gZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgYXRvbWljIGNvdW50ZXJzLgogICAgICAgICsgYXRvbWljQ291bnRlckluY3JlbWVudCwgYXRvbWljQ291bnRlckRlY3JlbWVudCwgYW5kIGF0b21pY0NvdW50ZXIKICAgICAgKyBBZGQgbGF5b3V0IHF1YWxpZmllciBpZGVudGlmaWVycyBiaW5kaW5nIGFuZCBvZmZzZXQgdG8gYmluZCB1bml0cyB0byBzYW1wbGVyIGFuZCBpbWFnZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGF0b21pYyBjb3VudGVycywgYW5kIHVuaWZvcm0gYmxvY2tzLgogICAgICArIEFkZCBidWlsdC1pbiBmdW5jdGlvbnMgdG8gcGFjay91bnBhY2sgMTYgYml0IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgKEFSQl9zaGFkaW5nX2xhbmd1YWdlX3BhY2syZikuCiAgICAgICAgKyBwYWNrSGFsZjJ4MTYgYW5kIHVucGFja0hhbGYyeDE2CiAgICAgICAgKyBwYWNrU25vcm0yeDE2YW5kIHVucGFja1Nub3JtMngxNgogICAgICArIEFkZCBnbF9GcmFnRGVwdGggbGF5b3V0IHF1YWxpZmllcnMgdG8gY29tbXVuaWNhdGUgd2hhdCBraW5kIG9mIGNoYW5nZXMgd2lsbCBiZSBtYWRlIHRvIGdsX0ZyYWdEZXB0aCAoR0xfQU1EX2NvbnNlcnZhdGl2ZSBkZXB0aCkuCiAgICAgICsgQWRkIEMtc3R5bGUgY3VybHkgYnJhY2UgaW5pdGlhbGl6ZXIgbGlzdHMgc3ludGF4IGZvciBpbml0aWFsaXplcnMuIEZ1bGwgaW5pdGlhbGl6YXRpb24gb2YgYWdncmVnYXRlcyBpcyByZXF1aXJlZCB3aGVuIHRoZXNlIGFyZSB1c2VkLgogICAgICArIEFsbG93IC5sZW5ndGgoKSB0byBiZSBhcHBsaWVkIHRvIHZlY3RvcnMgYW5kIG1hdHJpY2VzLCByZXR1cm5pbmcgdGhlIG51bWJlciBvZiBjb21wb25lbnRzIG9yIGNvbHVtbnMuCiAgICAgICsgQ2xhcmlmeSB0aGF0IC5sZW5ndGgoKSByZXR1cm5zIGFuIGludCB0eXBlIGFuZCBjYW4gYmUgdXNlZCBhcyBhIGNvbnN0YW50IGludGVnZXIgZXhwcmVzc2lvbi4KICAgICAgKyBBbGxvdyBzd2l6emxlIG9wZXJhdGlvbnMgb24gc2NhbGFycy4KICAgICAgKyBQb3NpdGl2ZSBzaWduZWQgZGVjaW1hbCBsaXRlcmFscywgYXMgd2VsbCBhcyBvY3RhbCBhbmQgaGV4YWRlY2ltYWwsIGNhbiBzZXQgYWxsIDMyIGJpdHMuIFRoaXMgaW5jbHVkZXMgc2V0dGluZyB0aGUgc2lnbiBiaXQgdG8gY3JlYXRlIGEgbmVnYXRpdmUgdmFsdWUuCiAgICAgICsgQ2xhcmlmaWVkIHRoYXQgYSBjb21tYSBzZXF1ZW5jZS1vcGVyYXRvciBleHByZXNzaW9uIGNhbm5vdCBiZSBhIGNvbnN0YW50IGV4cHJlc3Npb24uIEUuZy4sIJMoMiwzKZQgaXMgbm90IGFsbG93ZWQsIHNlbWFudGljYWxseSwgCiAgICAgICAgICAgIGFzIGEgdmFsaWQgY29uc3RhbnQgZXhwcmVzc2lvbiAzLCBldmVuIHRob3VnaCBpdCBpcyBhbiBleHByZXNzaW9uIHRoYXQgd2lsbCBldmFsdWF0ZSB0byAzLgogICAgICArIFVzZSB2ZWMyIGluc3RlYWQgb2YgdmVjMyBmb3IgY29vcmRpbmF0ZSBpbiB0ZXh0dXJlR2F0aGVyKihzYW1wbGVyMkRSZWN0LC4uLikuCiAgICAgICsgQ2xhcmlmeSB0aGF0IHRleHR1cmVHYXRoZXJPZmZzZXQoKSBjYW4gdGFrZSBub24tY29uc3RhbnRzIGZvciB0aGUgb2Zmc2V0cy4KICAgIEdMU0wgNC4zCiAgICAgICsgQWRkIHNoYWRlciBzdG9yYWdlIGJ1ZmZlciBvYmplY3RzLCBhcyBwZXIgdGhlIEFSQl9zaGFkZXJfc3RvcmFnZV9idWZmZXJfb2JqZWN0IGV4dGVuc2lvbi4gVGhpcyBpbmNsdWRlcyAKICAgICAgICAgICAgKyBhbGxvd2luZyB0aGUgbGFzdCBtZW1iZXIgb2YgYSBzdG9yYWdlIGJ1ZmZlciBibG9jayB0byBiZSBhbiBhcnJheSB0aGF0IGRvZXMgbm90IGtub3cgaXRzIHNpemUgdW50aWwgcmVuZGVyIHRpbWUKICAgICAgICAgICAgKyByZWFkL3dyaXRlIG1lbW9yeSBzaGFyZWQgd2l0aCB0aGUgYXBwbGljYXRpb24gYW5kIG90aGVyIHNoYWRlciBpbnZvY2F0aW9ucwogICAgICAgICAgICArIGFkZGluZyB0aGUgc3RkNDMwIGxheW91dCBxdWFsaWZpZXIgZm9yIHNoYWRlciBzdG9yYWdlIGJsb2NrcwogICAgICAgICAgICArIGFkZCBhdG9taWMgYnVpbHQtaW5zCiAgICAgICAgICAgICsgbGF5b3V0KGJpbmRpbmc9KQogICAgICAtIEFsbG93IC5sZW5ndGgoKSBvbiBhbGwgYXJyYXlzOyByZXR1cm5pbmcgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgb3Igbm90LCBkZXBlbmRpbmcgb24gaG93IHRoZSAKICAgICAgICBhcnJheSBpcyBzaXplZCwgYXMgcGVyIHRoZSBBUkJfc2hhZGVyX3N0b3JhZ2VfYnVmZmVyX29iamVjdCBleHRlbnNpb24uCiAgICAgIC0gQmUgY2xlYXIgdGhhdCBpbXBsaWNpdCBhcnJheSBzaXppbmcgaXMgb25seSB3aXRoaW4gYSBzdGFnZSwgbm90IGNyb3NzIHN0YWdlLgogICAgICAtIEFycmF5IGNsYXJpZmljYXRpb25zOiAKICAgICAgICAgICAgLSBBbGwgYXJyYXlzIGFyZSBpbmhlcmVudGx5IGhvbW9nZW5lb3VzLCBleGNlcHQgZm9yIGFycmF5cyBvZiB0aGUgbmV3IHNoYWRlciBzdG9yYWdlIGJ1ZmZlciBvYmplY3RzCiAgICAgICAgICAgIC0gQXJyYXlzIG9mIHNoYWRlciBzdG9yYWdlIGJ1ZmZlciBvYmplY3RzIHdpbGwgYmUgZGVyZWZlcmVuY2VkIHdoZW4gdGhlIC5sZW5ndGgoKSBtZXRob2QgaXMgdXNlZCBvbiBhbiB1bnNpemVkIGFycmF5IAogICAgICAgICAgICAgICAgbWVtYmVyLCBzbyB0aGF0IG11c3QgYSBoYXZlIHZhbGlkIGluZGV4LiAKICAgICAgICAgICAgLSBBcnJheXMgb2Ygb3RoZXIgb2JqZWN0cyAodW5pZm9ybSBibG9ja3MpIGNvbnRhaW5pbmcgaW1wbGljaXRseSBzaXplZCBhcnJheXMgd2lsbCBoYXZlIHRoZSBzYW1lIGltcGxpY2l0IHNpemUgZm9yIGFsbCAKICAgICAgICAgICAgICAgIGVsZW1lbnRzIG9mIHRoZSBhcnJheS4KICAgICAgLSBBcnJheXMgb2YgYXJyYXlzIGFyZSBub3cgc3VwcG9ydGVkLCBhcyBwZXIgdGhlIEdMX0FSQl9hcnJheXNfb2ZfYXJyYXlzIGV4dGVuc2lvbi4KICAgICAgKyBDb21wdXRlIHNoYWRlcnMgYXJlIG5vdyBzdXBwb3J0ZWQsIGFzIHBlciB0aGUgR0xfQVJCX2NvbXB1dGVfc2hhZGVyIGV4dGVuc2lvbi4KICAgICAgKyBBZGRlZCBpbWFnZVNpemUoKSBidWlsdC1pbnMgdG8gcXVlcnkgdGhlIGRpbWVuc2lvbnMgb2YgYW4gaW1hZ2UuCiAgICAgIC0gQWxsb3cgZXhwbGljaXQgbG9jYXRpb25zL2luZGV4ZXMgdG8gYmUgYXNzaWduZWQgdG8gc3Vicm91dGluZXMsIGFzIHBlciB0aGUgR0xfQVJCX2V4cGxpY2l0X3VuaWZvcm1fbG9jYXRpb24gZXh0ZW5zaW9uLgogICAgICArIEFjY2VwdCBFUyBHTFNMIHNoYWRlciAjdmVyc2lvbiBzdGF0ZW1lbnRzLCB3aGljaCB3aWxsIHJlcXVlc3QgRVMgZnVuY3Rpb25hbGl0eSBmb3IgRVMgR0xTTCAKICAgICAgICB2ZXJzaW9ucyAxMDAgYW5kIDMwMCwgYXMgcGVyIHRoZSBHTF9BUkJfRVMzX2NvbXBhdGliaWxpdHkgZXh0ZW5zaW9uLgogICAgICArIENsYXJpZnkgYW5kIGNvcnJlY3Qgc2NvcGluZyBydWxlcyB0byB3aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGV4cGVjdGVkIGFuZCB3aGF0IHdhcyBpbnRlbmRlZC4gCiAgICAgICAgKEZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGJvZHkgbmVzdCBpbnNpZGUgZ2xvYmFsIHNwYWNlLiBMb29wIHZhcmlhYmxlcyBhbmQgYm9keSBuZXN0IGluc2lkZSAKICAgICAgICBsb29wIHNjb3BlLikKICAgICAgKyBUaGVyZSBhcmUgbm8gZGlncmFwaHMgKHRyaWdyYXBocyB3ZXJlIGFscmVhZHkgZGlzYWxsb3dlZCkuCiAgICAgICsgUmVtb3ZlIHRoZSBDUFAgZGlmZmVyZW5jZSB0aGF0IGl0IGlzIGEgY29tcGlsZS10aW1lIGVycm9yIHRvIHVzZSAjaWYgb3IgI2VsaWYgb24gZXhwcmVzc2lvbnMgCiAgICAgICAgY29udGFpbmluZyB1bmRlZmluZWQgbWFjcm8gbmFtZXMuIFRoaXMgcmV2ZXJ0cyBiYWNrIHRvIGZvbGxvd2luZyBleHBlY3RlZCBDUFAgYmVoYXZpb3IuCiAgICAgICsgU2V0IGJvdGggZ2xfTWF4RnJhZ21lbnRJbWFnZVVuaWZvcm1zIGFuZCBnbF9NYXhDb21iaW5lZEltYWdlVW5pZm9ybXMgdG8gOC4KICAgICAgLSBDbGFyaWZ5IHRleHR1cmVTaXplKCkgZm9yIGN1YmUgbWFwIGFycmF5cy4KICAgICAgLSBGb3IgbGF5b3V0IHF1YWxpZmllcnMsCiAgICAgICAgICAgICsgbWFrZSBuZWdhdGl2ZSBvdXRwdXQgbG9jYXRpb25zIGEgY29tcGlsZS10aW1lIGVycm9yLCBvbmNlIGludGVnZXIgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQgaW4gbGF5b3V0cwogICAgICAgICAgICAtIG1ha2UgaW5kZXhlcyBvdXRzaWRlIHRoZSByYW5nZSBbMCwxXSBhIGNvbXBpbGUtdGltZSBlcnJvci4KICAgICAgLSBBZGQgdGV4dHVyZVF1ZXJ5TGV2ZWxzKCkgYnVpbHQtaW5zIHRvIHF1ZXJ5IHRoZSBudW1iZXIgb2YgbWlwbWFwIGxldmVscywgYXMgcGVyIHRoZSAKICAgICAgICBHTF9BUkJfdGV4dHVyZV9xdWVyeV9sZXZlbHMgZXh0ZW5zaW9uLgogICAgICArIE1ha2UgZ2xfTGF5ZXIgYW5kIGdsX1ZpZXdwb3J0SW5kZXggYWxzbyBiZSBpbnB1dHMgdG8gdGhlIGZyYWdtZW50IHNoYWRlciwgYXMgcGVyIHRoZSAKICAgICAgICBHTF9BUkJfZnJhZ21lbnRfbGF5ZXJfdmlld3BvcnQgZXh0ZW5zaW9uLgogICAgICAtIENsYXJpZnkgZnJhZ21lbnQgb3V0cHV0IHZhcmlhYmxlcyBjYW5ub3QgYmUgZG91YmxlIHByZWNpc2lvbi4KICAgICAgKyBBbGxvdyB0aGUgbmV3IHNoYXJlZCBrZXl3b3JkIHRvIGJlIGluIGxheW91dC1xdWFsaWZpZXItaWQsIGFsbG93aW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgCiAgICAgICAgd2l0aCB0aGUgc2hhcmVkIGlkZW50aWZpZXIgdGhhdCB3YXMgcHJldmlvdXNseSB1c2VkLgogICAgICArIEFkZGVkIG92ZXJsb29rZWQgdGV4dHVyZSBmdW5jdGlvbiBmbG9hdCB0ZXh0dXJlT2Zmc2V0IChzYW1wbGVyMkRBcnJheVNoYWRvdyBzYW1wbGVyLCB2ZWM0IFAsIHZlYzIgb2Zmc2V0IFssIGZsb2F0IGJpYXNdICkuCiAgICAgICsgQWRkIG1pc3NpbmcgdHlwZSBpbiBncmFtbWFyLCBBVE9NSUNfVUlOVCwgYW5kIG1pc3NpbmcgcXVhbGlmaWVycyBDT0hFUkVOVCwgVk9MQVRJTEUsIFJFU1RSSUNULCBSRUFET05MWSwgYW5kIFdSSVRFT05MWS4KICAgICAgKyBBZGQgbWlzc2luZyBpbml0aWFsaXplciBsaXN0cyB0byBncmFtbWFyLgogICAgR0xTTCA0LjQKICAgICAgKyBJbmNvcnBvcmF0ZSB0aGUgQVJCX2VuaGFuY2VkX2xheW91dHMgZXh0ZW5zaW9uLCB3aGljaCBhZGRzCiAgICAgICAgKyBjb21waWxlLXRpbWUgY29uc3RhbnQgZXhwcmVzc2lvbnMgZm9yIGxheW91dCBxdWFsaWZpZXIgaW50ZWdlcnMKICAgICAgICArIG5ldyBvZmZzZXQgYW5kIGFsaWduIGxheW91dCBxdWFsaWZpZXJzIGZvciBjb250cm9sIG92ZXIgYnVmZmVyIGJsb2NrIGxheW91dHMKICAgICAgICArIGFkZCBsb2NhdGlvbiBsYXlvdXQgcXVhbGlmaWVyIGZvciBpbnB1dCBhbmQgb3V0cHV0IGJsb2NrcyBhbmQgYmxvY2sgbWVtYmVycwogICAgICAgICsgbmV3IGNvbXBvbmVudCBsYXlvdXQgcXVhbGlmaWVyIGZvciBmaW5lci1ncmFpbmVkIGxheW91dCBjb250cm9sIG9mIGlucHV0IGFuZCBvdXRwdXQgdmFyaWFibGVzIGFuZCBibG9ja3MKICAgICAgICArIG5ldyB4ZmJfYnVmZmVyLCB4ZmJfc3RyaWRlLCBhbmQgeGZiX29mZnNldGxheW91dCBxdWFsaWZpZXJzIHRvIGFsbG93IHRoZSBzaGFkZXIgdG8gY29udHJvbCAKICAgICAgICAgIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJpbmcuCiAgICAgICsgQnVnIDEwNTMwOiBUbyBiZSBjb25zaXN0ZW50IHdpdGggRVMsIGluY2x1ZGUgc2FtcGxlIHR5cGVzIGFzIHZhbGlkIGluIGEgcHJlY2lzaW9uIHN0YXRlbWVudC4gCiAgICAgICAgTm90ZSB0aGUgZGVmYXVsdHMgYXJlIGlycmVsZXZhbnQsIGFzIHByZWNpc2lvbiBxdWFsaWZpZXJzIGFyZSBub3QgcmVxdWlyZWQgb3IgaGF2ZSBhbnkgbWVhbmluZy4KICAgIEdMU0wgNC41CiAgICAgICsgSW5jb3Jwb3JhdGUgdGhlIEFSQl9FUzNfMV9jb21wYXRpYmlsaXR5IGV4dGVuc2lvbgogICAgICAgICsgU3VwcG9ydHMgT3BlbkdMIEVTIDMxMCBzaGFkZXJzLgogICAgICAgICsgQWRkcyBpbWFnZUF0b21pY0V4Y2hhbmdlKCkgYnVpbHQtaW4gZnVuY3Rpb24gZm9yIGZsb2F0aW5nLXBvaW50IGltYWdlcy4KICAgICAgICArIEFkZHMgY29oZXJlbnQgdG8gYXRvbWljIGFuZCBpbWFnZS1hdG9taWMgYnVpbHQtaW4gZnVuY3Rpb24gcGFyYW1ldGVycy4KICAgICAgICArIEFkZHMgZ2xfSGVscGVySW52b2NhdGlvbiBidWlsdC1pbiB2YXJpYWJsZSB0byBzYXkgd2hldGhlciBhIGZyYWdtZW50IHNoYWRlciBpbnZvY2F0aW9uIGlzIAogICAgICAgICAgICAgIG9ubHkgYXMgYSBoZWxwZXIsIHNvIHRoZSBzaGFkZXIgY2FuIHNraXAgY29kZSBub3QgbmVlZGVkIG9yIGhhcm1mdWwgd2hlbiBpbiBhIGhlbHBlciBpbnZvY2F0aW9uLgogICAgICAgICsgQWRkcyBnbF9NYXhTYW1wbGVzYnVpbHQtaW4gY29uc3RhbnQsIGFuZCBzZXZlcmFsIG90aGVyIGJ1aWx0LWluIGNvbnN0YW50cy4KICAgICAgICArIEFkZHMgbWl4KCkgYnVpbHQtaW4gZnVuY3Rpb25zIGZvciBzZWxlY3Rpb24gb2YgaW50LCB1aW50LCBhbmRib29sIGNvbXBvbmVudHMuCiAgICAgICsgSW5jb3Jwb3JhdGUgdGhlIEdMX0FSQl9zaGFkZXJfdGV4dHVyZV9pbWFnZV9zYW1wbGVzIGV4dGVuc2lvbiB0byBxdWVyeSBob3cgbWFueSBzYW1wbGVzIGFyZSBpbiBhIG11bHRpLXNhbXBsZSB0ZXh0dXJlIG9yIGltYWdlLgogICAgICArIEluY29ycG9yYXRlIHRoZSBHTF9BUkJfY3VsbF9kaXN0YW5jZSBleHRlbnNpb25zIHRvIGFkZCB0aGUgYnVpbHQtaW4gdmFyaWFibGUgZ2xfQ3VsbERpc3RhbmNlW10gLCB3aGljaCB3aWxsIGN1bGwgd2hvbGUgcHJpbWl0aXZlcy4KICAgICAgKyBJbmNvcnBvcmF0ZSB0aGUgR0xfQVJCX2Rlcml2YXRpdmVfY29udHJvbCBleHRlbnNpb24K