REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 74.78 KB
Close
/opt/cloudlinux/venv/lib/python3.11/site-packages/alembic/operations/__pycache__/base.cpython-311.pyc
Text
Base64
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ZmF1bHQgd2lsbCBvbmx5IHVzZSAicmVjcmVhdGUiIHN0eWxlIG9uIHRoZQogICAgICAgIFNRTGl0ZSBiYWNrZW5kLCBhbmQgb25seSBpZiBkaXJlY3RpdmVzIGFyZSBwcmVzZW50IHdoaWNoIHJlcXVpcmUKICAgICAgICB0aGlzIGZvcm0sIGUuZy4gYW55dGhpbmcgb3RoZXIgdGhhbiBgYGFkZF9jb2x1bW4oKWBgLiAgIFRoZSBiYXRjaAogICAgICAgIG9wZXJhdGlvbiBvbiBvdGhlciBiYWNrZW5kcyB3aWxsIHByb2NlZWQgdXNpbmcgc3RhbmRhcmQgQUxURVIgVEFCTEUKICAgICAgICBvcGVyYXRpb25zLgoKICAgICAgICBUaGUgbWV0aG9kIGlzIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIHdoaWNoIHJldHVybnMgYW4gaW5zdGFuY2UKICAgICAgICBvZiA6Y2xhc3M6YC5CYXRjaE9wZXJhdGlvbnNgOyB0aGlzIG9iamVjdCBpcyB0aGUgc2FtZSBhcwogICAgICAgIDpjbGFzczpgLk9wZXJhdGlvbnNgIGV4Y2VwdCB0aGF0IHRhYmxlIG5hbWVzIGFuZCBzY2hlbWEgbmFtZXMKICAgICAgICBhcmUgb21pdHRlZC4gIEUuZy46OgoKICAgICAgICAgICAgd2l0aCBvcC5iYXRjaF9hbHRlcl90YWJsZSgic29tZV90YWJsZSIpIGFzIGJhdGNoX29wOgogICAgICAgICAgICAgICAgYmF0Y2hfb3AuYWRkX2NvbHVtbihDb2x1bW4oImZvbyIsIEludGVnZXIpKQogICAgICAgICAgICAgICAgYmF0Y2hfb3AuZHJvcF9jb2x1bW4oImJhciIpCgogICAgICAgIFRoZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgY29udGV4dCBtYW5hZ2VyIGFyZSBpbnZva2VkIGF0IG9uY2UKICAgICAgICB3aGVuIHRoZSBjb250ZXh0IGlzIGVuZGVkLiAgIFdoZW4gcnVuIGFnYWluc3QgU1FMaXRlLCBpZiB0aGUKICAgICAgICBtaWdyYXRpb25zIGluY2x1ZGUgb3BlcmF0aW9ucyBub3Qgc3VwcG9ydGVkIGJ5IFNRTGl0ZSdzIEFMVEVSIFRBQkxFLAogICAgICAgIHRoZSBlbnRpcmUgdGFibGUgd2lsbCBiZSBjb3BpZWQgdG8gYSBuZXcgb25lIHdpdGggdGhlIG5ldwogICAgICAgIHNwZWNpZmljYXRpb24sIG1vdmluZyBhbGwgZGF0YSBhY3Jvc3MgYXMgd2VsbC4KCiAgICAgICAgVGhlIGNvcHkgb3BlcmF0aW9uIGJ5IGRlZmF1bHQgdXNlcyByZWZsZWN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50CiAgICAgICAgc3RydWN0dXJlIG9mIHRoZSB0YWJsZSwgYW5kIHRoZXJlZm9yZSA6bWV0aDpgLmJhdGNoX2FsdGVyX3RhYmxlYAogICAgICAgIGluIHRoaXMgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBtaWdyYXRpb24gaXMgcnVuIGluICJvbmxpbmUiIG1vZGUuCiAgICAgICAgVGhlIGBgY29weV9mcm9tYGAgcGFyYW1ldGVyIG1heSBiZSBwYXNzZWQgd2hpY2ggcmVmZXJzIHRvIGFuIGV4aXN0aW5nCiAgICAgICAgOmNsYXNzOmAuVGFibGVgIG9iamVjdCwgd2hpY2ggd2lsbCBieXBhc3MgdGhpcyByZWZsZWN0aW9uIHN0ZXAuCgogICAgICAgIC4uIG5vdGU6OiAgVGhlIHRhYmxlIGNvcHkgb3BlcmF0aW9uIHdpbGwgY3VycmVudGx5IG5vdCBjb3B5CiAgICAgICAgICAgQ0hFQ0sgY29uc3RyYWludHMsIGFuZCBtYXkgbm90IGNvcHkgVU5JUVVFIGNvbnN0cmFpbnRzIHRoYXQgYXJlCiAgICAgICAgICAgdW5uYW1lZCwgYXMgaXMgcG9zc2libGUgb24gU1FMaXRlLiAgIFNlZSB0aGUgc2VjdGlvbgogICAgICAgICAgIDpyZWY6YHNxbGl0ZV9iYXRjaF9jb25zdHJhaW50c2AgZm9yIHdvcmthcm91bmRzLgoKICAgICAgICA6cGFyYW0gdGFibGVfbmFtZTogbmFtZSBvZiB0YWJsZQogICAgICAgIDpwYXJhbSBzY2hlbWE6IG9wdGlvbmFsIHNjaGVtYSBuYW1lLgogICAgICAgIDpwYXJhbSByZWNyZWF0ZTogdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoZSB0YWJsZSBzaG91bGQgYmUKICAgICAgICAgcmVjcmVhdGVkLiBBdCBpdHMgZGVmYXVsdCBvZiBgYCJhdXRvImBgLCB0aGUgU1FMaXRlIGRpYWxlY3Qgd2lsbAogICAgICAgICByZWNyZWF0ZSB0aGUgdGFibGUgaWYgYW55IG9wZXJhdGlvbnMgb3RoZXIgdGhhbiBgYGFkZF9jb2x1bW4oKWBgLAogICAgICAgICBgYGNyZWF0ZV9pbmRleCgpYGAsIG9yIGBgZHJvcF9pbmRleCgpYGAgYXJlCiAgICAgICAgIHByZXNlbnQuIE90aGVyIG9wdGlvbnMgaW5jbHVkZSBgYCJhbHdheXMiYGAgYW5kIGBgIm5ldmVyImBgLgogICAgICAgIDpwYXJhbSBjb3B5X2Zyb206IG9wdGlvbmFsIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QKICAgICAgICAgdGhhdCB3aWxsIGFjdCBhcyB0aGUgc3RydWN0dXJlIG9mIHRoZSB0YWJsZSBiZWluZyBjb3BpZWQuICBJZiBvbWl0dGVkLAogICAgICAgICB0YWJsZSByZWZsZWN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgdGFibGUuCgogICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpyZWY6YGJhdGNoX29mZmxpbmVfbW9kZWAKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgfi5PcGVyYXRpb25zLmJhdGNoX2FsdGVyX3RhYmxlLnJlZmxlY3RfYXJnc2AKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgfi5PcGVyYXRpb25zLmJhdGNoX2FsdGVyX3RhYmxlLnJlZmxlY3Rfa3dhcmdzYAoKICAgICAgICA6cGFyYW0gcmVmbGVjdF9hcmdzOiBhIHNlcXVlbmNlIG9mIGFkZGl0aW9uYWwgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhdAogICAgICAgICB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHRhYmxlIHN0cnVjdHVyZSBiZWluZyByZWZsZWN0ZWQgLyBjb3BpZWQ7CiAgICAgICAgIHRoaXMgbWF5IGJlIHVzZWQgdG8gcGFzcyBjb2x1bW4gYW5kIGNvbnN0cmFpbnQgb3ZlcnJpZGVzIHRvIHRoZQogICAgICAgICB0YWJsZSB0aGF0IHdpbGwgYmUgcmVmbGVjdGVkLCBpbiBsaWV1IG9mIHBhc3NpbmcgdGhlIHdob2xlCiAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCB1c2luZwogICAgICAgICA6cGFyYW1yZWY6YH4uT3BlcmF0aW9ucy5iYXRjaF9hbHRlcl90YWJsZS5jb3B5X2Zyb21gLgogICAgICAgIDpwYXJhbSByZWZsZWN0X2t3YXJnczogYSBkaWN0aW9uYXJ5IG9mIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKICAgICAgICAgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHRhYmxlIHN0cnVjdHVyZSBiZWluZyBjb3BpZWQ7IHRoaXMgbWF5IGJlCiAgICAgICAgIHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsIHRhYmxlIGFuZCByZWZsZWN0aW9uIG9wdGlvbnMgdG8gdGhlIHRhYmxlIHRoYXQKICAgICAgICAgd2lsbCBiZSByZWZsZWN0ZWQsIGluIGxpZXUgb2YgcGFzc2luZyB0aGUgd2hvbGUKICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIHVzaW5nCiAgICAgICAgIDpwYXJhbXJlZjpgfi5PcGVyYXRpb25zLmJhdGNoX2FsdGVyX3RhYmxlLmNvcHlfZnJvbWAuCiAgICAgICAgOnBhcmFtIHRhYmxlX2FyZ3M6IGEgc2VxdWVuY2Ugb2YgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGF0CiAgICAgICAgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgbmV3IDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCB3aGVuCiAgICAgICAgIGNyZWF0ZWQsIGluIGFkZGl0aW9uIHRvIHRob3NlIGNvcGllZCBmcm9tIHRoZSBzb3VyY2UgdGFibGUuCiAgICAgICAgIFRoaXMgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIHN1Y2ggYXMgQ0hFQ0sKICAgICAgICAgY29uc3RyYWludHMgdGhhdCBtYXkgbm90IGJlIHJlZmxlY3RlZC4KICAgICAgICA6cGFyYW0gdGFibGVfa3dhcmdzOiBhIGRpY3Rpb25hcnkgb2YgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cwogICAgICAgICB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgbmV3IDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYAogICAgICAgICB3aGVuIGNyZWF0ZWQsIGluIGFkZGl0aW9uIHRvIHRob3NlIGNvcGllZCBmcm9tIHRoZSBzb3VyY2UgdGFibGUuCiAgICAgICAgIFRoaXMgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBmb3IgYWRkaXRpb25hbCB0YWJsZSBvcHRpb25zIHRoYXQgbWF5CiAgICAgICAgIG5vdCBiZSByZWZsZWN0ZWQuCiAgICAgICAgOnBhcmFtIG5hbWluZ19jb252ZW50aW9uOiBhIG5hbWluZyBjb252ZW50aW9uIGRpY3Rpb25hcnkgb2YgdGhlIGZvcm0KICAgICAgICAgZGVzY3JpYmVkIGF0IDpyZWY6YGF1dG9nZW5fbmFtaW5nX2NvbnZlbnRpb25zYCB3aGljaCB3aWxsIGJlIGFwcGxpZWQKICAgICAgICAgdG8gdGhlIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLk1ldGFEYXRhYCBkdXJpbmcgdGhlIHJlZmxlY3Rpb24KICAgICAgICAgcHJvY2Vzcy4gIFRoaXMgaXMgdHlwaWNhbGx5IHJlcXVpcmVkIGlmIG9uZSB3YW50cyB0byBkcm9wIFNRTGl0ZQogICAgICAgICBjb25zdHJhaW50cywgYXMgdGhlc2UgY29uc3RyYWludHMgd2lsbCBub3QgaGF2ZSBuYW1lcyB3aGVuCiAgICAgICAgIHJlZmxlY3RlZCBvbiB0aGlzIGJhY2tlbmQuICBSZXF1aXJlcyBTUUxBbGNoZW15ICoqMC45LjQqKiBvciBncmVhdGVyLgoKICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6cmVmOmBkcm9wcGluZ19zcWxpdGVfZm9yZWlnbl9rZXlzYAoKICAgICAgICA6cGFyYW0gcGFydGlhbF9yZW9yZGVyaW5nOiBhIGxpc3Qgb2YgdHVwbGVzLCBlYWNoIHN1Z2dlc3RpbmcgYSBkZXNpcmVkCiAgICAgICAgIG9yZGVyaW5nIG9mIHR3byBvciBtb3JlIGNvbHVtbnMgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgdGFibGUuICBSZXF1aXJlcwogICAgICAgICB0aGF0IDpwYXJhbXJlZjpgLmJhdGNoX2FsdGVyX3RhYmxlLnJlY3JlYXRlYCBpcyBzZXQgdG8gYGAiYWx3YXlzImBgLgogICAgICAgICBFeGFtcGxlcywgZ2l2ZW4gYSB0YWJsZSB3aXRoIGNvbHVtbnMgImEiLCAiYiIsICJjIiwgYW5kICJkIjoKCiAgICAgICAgIFNwZWNpZnkgdGhlIG9yZGVyIG9mIGFsbCBjb2x1bW5zOjoKCiAgICAgICAgICAgIHdpdGggb3AuYmF0Y2hfYWx0ZXJfdGFibGUoCiAgICAgICAgICAgICAgICAic29tZV90YWJsZSIsCiAgICAgICAgICAgICAgICByZWNyZWF0ZT0iYWx3YXlzIiwKICAgICAgICAgICAgICAgIHBhcnRpYWxfcmVvcmRlcmluZz1bKCJjIiwgImQiLCAiYSIsICJiIildLAogICAgICAgICAgICApIGFzIGJhdGNoX29wOgogICAgICAgICAgICAgICAgcGFzcwoKICAgICAgICAgRW5zdXJlICJkIiBhcHBlYXJzIGJlZm9yZSAiYyIsIGFuZCAiYiIsIGFwcGVhcnMgYmVmb3JlICJhIjo6CgogICAgICAgICAgICB3aXRoIG9wLmJhdGNoX2FsdGVyX3RhYmxlKAogICAgICAgICAgICAgICAgInNvbWVfdGFibGUiLAogICAgICAgICAgICAgICAgcmVjcmVhdGU9ImFsd2F5cyIsCiAgICAgICAgICAgICAgICBwYXJ0aWFsX3Jlb3JkZXJpbmc9WygiZCIsICJjIiksICgiYiIsICJhIildLAogICAgICAgICAgICApIGFzIGJhdGNoX29wOgogICAgICAgICAgICAgICAgcGFzcwoKICAgICAg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ICAgICAgIGlzIHVzZWQgd2l0aGluIGEgbmFtaW5nIGNvbnZlbnRpb24sIHNvIHRoYXQgaXQgY2FuIGJlIGlkZW50aWZpZWQKICAgICAgICB0aGF0IHRoaXMgcGFydGljdWxhciBuYW1lIHNob3VsZCByZW1haW4gZml4ZWQuCgogICAgICAgIElmIHRoZSA6bWV0aDpgLk9wZXJhdGlvbnMuZmAgaXMgdXNlZCBvbiBhIGNvbnN0cmFpbnQsIHRoZSBuYW1pbmcKICAgICAgICBjb252ZW50aW9uIHdpbGwgbm90IHRha2UgZWZmZWN0OjoKCiAgICAgICAgICAgIG9wLmFkZF9jb2x1bW4oInQiLCAieCIsIEJvb2xlYW4obmFtZT1vcC5mKCJja19ib29sX3RfeCIpKSkKCiAgICAgICAgQWJvdmUsIHRoZSBDSEVDSyBjb25zdHJhaW50IGdlbmVyYXRlZCB3aWxsIGhhdmUgdGhlIG5hbWUKICAgICAgICBgYGNrX2Jvb2xfdF94YGAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBhIG5hbWluZyBjb252ZW50aW9uIGlzCiAgICAgICAgaW4gdXNlLgoKICAgICAgICBBbHRlcm5hdGl2ZWx5LCBpZiBhIG5hbWluZyBjb252ZW50aW9uIGlzIGluIHVzZSwgYW5kICdmJyBpcyBub3QgdXNlZCwKICAgICAgICBuYW1lcyB3aWxsIGJlIGNvbnZlcnRlZCBhbG9uZyBjb252ZW50aW9ucy4gIElmIHRoZSBgYHRhcmdldF9tZXRhZGF0YWBgCiAgICAgICAgY29udGFpbnMgdGhlIG5hbWluZyBjb252ZW50aW9uCiAgICAgICAgYGB7ImNrIjogImNrX2Jvb2xfJSh0YWJsZV9uYW1lKXNfJShjb25zdHJhaW50X25hbWUpcyJ9YGAsIHRoZW4gdGhlCiAgICAgICAgb3V0cHV0IG9mIHRoZSBmb2xsb3dpbmc6CgogICAgICAgICAgICBvcC5hZGRfY29sdW1uKCJ0IiwgIngiLCBCb29sZWFuKG5hbWU9IngiKSkKCiAgICAgICAgd2lsbCBiZTo6CgogICAgICAgICAgICBDT05TVFJBSU5UIGNrX2Jvb2xfdF94IENIRUNLICh4IGluICgxLCAwKSkpCgogICAgICAgIFRoZSBmdW5jdGlvbiBpcyByZW5kZXJlZCBpbiB0aGUgb3V0cHV0IG9mIGF1dG9nZW5lcmF0ZSB3aGVuCiAgICAgICAgYSBwYXJ0aWN1bGFyIGNvbnN0cmFpbnQgbmFtZSBpcyBhbHJlYWR5IGNvbnZlcnRlZC4KCiAgICAgICAgchMAAAApAnI9AAAAckEAAABzAgAAACAgcj4AAADaAWZ6FEFic3RyYWN0T3BlcmF0aW9ucy5mjQEAAHMRAAAAgAD1SAEAEBSQRIl6jHrQCBlyQAAAANoFdmFsdWX6D1VuaW9uW3N0ciwgaW50XdoFdHlwZV/6GU9wdGlvbmFsW1R5cGVFbmdpbmVbQW55XV1yHgAAAGMDAAAAAAAAAAAAAAAFAAAAAwAAAfMwAAAAlwB0AQAAAAAAAAAAAABqAQAAAAAAAAAAZAF8AXwCrAKmAwAAqwMAAAAAAAAAAFMAKQNhbQcAAFByb2R1Y2UgYW4gJ2lubGluZSBsaXRlcmFsJyBleHByZXNzaW9uLCBzdWl0YWJsZSBmb3IKICAgICAgICB1c2luZyBpbiBhbiBJTlNFUlQsIFVQREFURSwgb3IgREVMRVRFIHN0YXRlbWVudC4KCiAgICAgICAgV2hlbiB1c2luZyBBbGVtYmljIGluICJvZmZsaW5lIiBtb2RlLCBDUlVEIG9wZXJhdGlvbnMKICAgICAgICBhcmVuJ3QgY29tcGF0aWJsZSB3aXRoIFNRTEFsY2hlbXkncyBkZWZhdWx0IGJlaGF2aW9yIHN1cnJvdW5kaW5nCiAgICAgICAgbGl0ZXJhbCB2YWx1ZXMsCiAgICAgICAgd2hpY2ggaXMgdGhhdCB0aGV5IGFyZSBjb252ZXJ0ZWQgaW50byBib3VuZCB2YWx1ZXMgYW5kIHBhc3NlZAogICAgICAgIHNlcGFyYXRlbHkgaW50byB0aGUgYGBleGVjdXRlKClgYCBtZXRob2Qgb2YgdGhlIERCQVBJIGN1cnNvci4KICAgICAgICBBbiBvZmZsaW5lIFNRTAogICAgICAgIHNjcmlwdCBuZWVkcyB0byBoYXZlIHRoZXNlIHJlbmRlcmVkIGlubGluZS4gIFdoaWxlIGl0IHNob3VsZAogICAgICAgIGFsd2F5cyBiZSBub3RlZCB0aGF0IGlubGluZSBsaXRlcmFsIHZhbHVlcyBhcmUgYW4gKiplbm9ybW91cyoqCiAgICAgICAgc2VjdXJpdHkgaG9sZSBpbiBhbiBhcHBsaWNhdGlvbiB0aGF0IGhhbmRsZXMgdW50cnVzdGVkIGlucHV0LAogICAgICAgIGEgc2NoZW1hIG1pZ3JhdGlvbiBpcyBub3QgcnVuIGluIHRoaXMgY29udGV4dCwgc28KICAgICAgICBsaXRlcmFscyBhcmUgc2FmZSB0byByZW5kZXIgaW5saW5lLCB3aXRoIHRoZSBjYXZlYXQgdGhhdAogICAgICAgIGFkdmFuY2VkIHR5cGVzIGxpa2UgZGF0ZXMgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgZGlyZWN0bHkKICAgICAgICBieSBTUUxBbGNoZW15LgoKICAgICAgICBTZWUgOm1ldGg6YC5PcGVyYXRpb25zLmV4ZWN1dGVgIGZvciBhbiBleGFtcGxlIHVzYWdlIG9mCiAgICAgICAgOm1ldGg6YC5PcGVyYXRpb25zLmlubGluZV9saXRlcmFsYC4KCiAgICAgICAgVGhlIGVudmlyb25tZW50IGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gYXR0ZW1wdCB0byByZW5kZXIKICAgICAgICAibGl0ZXJhbCIgdmFsdWVzIGlubGluZSBhdXRvbWF0aWNhbGx5LCBmb3IgdGhvc2Ugc2ltcGxlIHR5cGVzCiAgICAgICAgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkaWFsZWN0OyBzZWUKICAgICAgICA6cGFyYW1yZWY6YC5FbnZpcm9ubWVudENvbnRleHQuY29uZmlndXJlLmxpdGVyYWxfYmluZHNgIGZvciB0aGlzCiAgICAgICAgbW9yZSByZWNlbnRseSBhZGRlZCBmZWF0dXJlLgoKICAgICAgICA6cGFyYW0gdmFsdWU6IFRoZSB2YWx1ZSB0byByZW5kZXIuICBTdHJpbmdzLCBpbnRlZ2VycywgYW5kIHNpbXBsZQogICAgICAgICBudW1lcmljcyBzaG91bGQgYmUgc3VwcG9ydGVkLiAgIE90aGVyIHR5cGVzIGxpa2UgYm9vbGVhbiwKICAgICAgICAgZGF0ZXMsIGV0Yy4gbWF5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ZWQgdG8gdGhlIGNhbGxhYmxlIHNoYXJlcyB0aGUgc2FtZQogICAgICAgIHRyYW5zYWN0aW9uIGFzIHRoZSBjb25uZWN0aW9uIHJ1bm5pbmcgaW4gdGhlIG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICBBbnkgYWRkaXRpb25hbCBhcmcgb3Iga3dfYXJnIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZSBwYXNzZWQKICAgICAgICB0byB0aGUgcHJvdmlkZWQgYXN5bmMgZnVuY3Rpb24uCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDogMS4xMQoKICAgICAgICAuLiBub3RlOjoKCiAgICAgICAgICAgIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb25seSB3aGVuIGFsZW1iaWMgaXMgY2FsbGVkIHVzaW5nCiAgICAgICAgICAgIGFuIGFzeW5jIGRpYWxlY3QuCiAgICAgICAgehtTUUxBbGNoZW15IDEuNC4xOCsgcmVxdWlyZWROeiFDYW5ub3QgY2FsbCBydW5fYXN5bmMgaW4gU1FMIG1vZGV6KENhbm5vdCBjYWxsIHJ1bl9hc3luYyB3aXRoIGEgc3luYyBlbmdpbmVyAgAAACkB2g9Bc3luY0Nvbm5lY3Rpb24pAdoKYXdhaXRfb25seSkMchoAAADaCnNxbGFfMTRfMTjaE05vdEltcGxlbWVudGVkRXJyb3JyrAAAANoHZGlhbGVjdNoIaXNfYXN5bmPaClZhbHVlRXJyb3LaFnNxbGFsY2hlbXkuZXh0LmFzeW5jaW9ysQAAANoPc3FsYWxjaGVteS51dGlscrIAAADaGl9yZXRyaWV2ZV9wcm94eV9mb3JfdGFyZ2V0KQhyPQAAAHKtAAAAclcAAAByrwAAANoJc3luY19jb25ucrEAAABysgAAANoKYXN5bmNfY29ubnMIAAAAICAgICAgICByPgAAANoJcnVuX2FzeW5jehxBYnN0cmFjdE9wZXJhdGlvbnMucnVuX2FzeW5j7QEAAHPAAAAAgAD1NgAQG9QPJfAAAQlFAd0SJdAmQ9ESRNQSRNAMRNgUGJdNkk2RT5RPiAnYCxTQCxzdEiXQJknREkrUEkrQDErYDxjUDyDUDynwAAEJSQHdEhzQHUfREkjUEkjQDEjY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dCBvZiB0aGUgOm1ldGg6YC5FbnZpcm9ubWVudENvbnRleHQucnVuX21pZ3JhdGlvbnNgCiAgICBtZXRob2QgY2FsbGVkIGZyb20gYW4gYGBlbnYucHlgYCBzY3JpcHQsIGEgc3RhbmRhbG9uZQogICAgOmNsYXNzOmAuT3BlcmF0aW9uc2AgaW5zdGFuY2UgY2FuIGJlCiAgICBtYWRlIGZvciB1c2UgY2FzZXMgZXh0ZXJuYWwgdG8gcmVndWxhciBBbGVtYmljCiAgICBtaWdyYXRpb25zIGJ5IHBhc3NpbmcgaW4gYSA6Y2xhc3M6YC5NaWdyYXRpb25Db250ZXh0YDo6CgogICAgICAgIGZyb20gYWxlbWJpYy5taWdyYXRpb24gaW1wb3J0IE1pZ3JhdGlvbkNvbnRleHQKICAgICAgICBmcm9tIGFsZW1iaWMub3BlcmF0aW9ucyBpbXBvcnQgT3BlcmF0aW9ucwoKICAgICAgICBjb25uID0gbXllbmdpbmUuY29ubmVjdCgpCiAgICAgICAgY3R4ID0gTWlncmF0aW9uQ29udGV4dC5jb25maWd1cmUoY29ubikKICAgICAgICBvcCA9IE9wZXJhdGlvbnMoY3R4KQoKICAgICAgICBvcC5hbHRlcl9jb2x1bW4oInQiLCAiYyIsIG51bGxhYmxlPVRydWUpCgogICAgTm90ZSB0aGF0IGFzIG9mIDAuOCwgbW9zdCBvZiB0aGUgbWV0aG9kcyBvbiB0aGlzIGNsYXNzIGFyZSBwcm9kdWNlZAogICAgZHluYW1pY2FsbHkgdXNpbmcgdGhlIDptZXRoOmAuT3BlcmF0aW9ucy5yZWdpc3Rlcl9vcGVyYXRpb25gCiAgICBtZXRob2QuCgogICAgTikBcoYAAAByhQAAAHJCAAAA2gZjb2x1bW76C0NvbHVtbltBbnldcoYAAAByRAAAAHI4AAAAcjkAAABjAwAAAAAAAAABAAAAAQAAAAMAAAHzBgAAAJcAZAFTACkCYboOAABJc3N1ZSBhbiAiYWRkIGNvbHVtbiIgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlIGN1cnJlbnQKICAgICAgICAgICAgbWlncmF0aW9uIGNvbnRleHQuCgogICAgICAgICAgICBlLmcuOjoKCiAgICAgICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IENvbHVtbiwgU3RyaW5nCgogICAgICAgICAgICAgICAgb3AuYWRkX2NvbHVtbigib3JnYW5pemF0aW9uIiwgQ29sdW1uKCJuYW1lIiwgU3RyaW5nKCkpKQoKICAgICAgICAgICAgVGhlIDptZXRoOmAuT3BlcmF0aW9ucy5hZGRfY29sdW1uYCBtZXRob2QgdHlwaWNhbGx5IGNvcnJlc3BvbmRzCiAgICAgICAgICAgIHRvIHRoZSBTUUwgY29tbWFuZCAiQUxURVIgVEFCTEUuLi4gQUREIENPTFVNTiIuICAgIFdpdGhpbiB0aGUgc2NvcGUKICAgICAgICAgICAgb2YgdGhpcyBjb21tYW5kLCB0aGUgY29sdW1uJ3MgbmFtZSwgZGF0YXR5cGUsIG51bGxhYmlsaXR5LAogICAgICAgICAgICBhbmQgb3B0aW9uYWwgc2VydmVyLWdlbmVyYXRlZCBkZWZhdWx0cyBtYXkgYmUgaW5kaWNhdGVkLgoKICAgICAgICAgICAgLi4gbm90ZTo6CgogICAgICAgICAgICAgICAgV2l0aCB0aGUgZXhjZXB0aW9uIG9mIE5PVCBOVUxMIGNvbnN0cmFpbnRzIG9yIHNpbmdsZS1jb2x1bW4gRk9SRUlHTgogICAgICAgICAgICAgICAgS0VZIGNvbnN0cmFpbnRzLCBvdGhlciBraW5kcyBvZiBjb25zdHJhaW50cyBzdWNoIGFzIFBSSU1BUlkgS0VZLAogICAgICAgICAgICAgICAgVU5JUVVFIG9yIENIRUNLIGNvbnN0cmFpbnRzICoqY2Fubm90KiogYmUgZ2VuZXJhdGVkIHVzaW5nIHRoaXMKICAgICAgICAgICAgICAgIG1ldGhvZDsgZm9yIHRoZXNlIGNvbnN0cmFpbnRzLCByZWZlciB0byBvcGVyYXRpb25zIHN1Y2ggYXMKICAgICAgICAgICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5jcmVhdGVfcHJpbWFyeV9rZXlgIGFuZAogICAgICAgICAgICAgICAgOm1ldGg6YC5PcGVyYXRpb25zLmNyZWF0ZV9jaGVja19jb25zdHJhaW50YC4gSW4gcGFydGljdWxhciwgdGhlCiAgICAgICAgICAgICAgICBmb2xsb3dpbmcgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uYCBwYXJhbWV0ZXJzIGFyZQogICAgICAgICAgICAgICAgKippZ25vcmVkKio6CgogICAgICAgICAgICAgICAgKiA6cGFyYW1yZWY6YH5zcWxhbGNoZW15LnNjaGVtYS5Db2x1bW4ucHJpbWFyeV9rZXlgIC0gU1FMIGRhdGFiYXNlcwogICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgZG8gbm90IHN1cHBvcnQgYW4gQUxURVIgb3BlcmF0aW9uIHRoYXQgY2FuIGFkZAogICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIGNvbHVtbnMgb25lIGF0IGEgdGltZSB0byBhbiBleGlzdGluZyBwcmltYXJ5IGtleQogICAgICAgICAgICAgICAgICBjb25zdHJhaW50LCB0aGVyZWZvcmUgaXQncyBsZXNzIGFtYmlndW91cyB0byB1c2UgdGhlCiAgICAgICAgICAgICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5jcmVhdGVfcHJpbWFyeV9rZXlgIG1ldGhvZCwgd2hpY2ggYXNzdW1lcyBubwogICAgICAgICAgICAgICAgICBleGlzdGluZyBwcmltYXJ5IGtleSBjb25zdHJhaW50IGlzIHByZXNlbnQuCiAgICAgICAgICAgICAgICAqIDpwYXJhbXJlZjpgfnNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbi51bmlxdWVgIC0gdXNlIHRoZQogICAgICAgICAgICAgICAgICA6bWV0aDpgLk9wZXJhdGlvbnMuY3JlYXRlX3VuaXF1ZV9jb25zdHJhaW50YCBtZXRob2QKICAgICAgICAgICAgICAgICogOnBhcmFtcmVmOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uLmluZGV4YCAtIHVzZSB0aGUKICAgICAgICAgICAgICAgICAgOm1ldGg6YC5PcGVyYXRpb25zLmNyZWF0ZV9pbmRleGAgbWV0aG9kCgoKICAgICAgICAgICAgVGhlIHByb3ZpZGVkIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbmAgb2JqZWN0IG1heSBpbmNsdWRlIGEKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuRm9yZWlnbktleWAgY29uc3RyYWludCBkaXJlY3RpdmUsCiAgICAgICAgICAgIHJlZmVyZW5jaW5nIGEgcmVtb3RlIHRhYmxlIG5hbWUuIEZvciB0aGlzIHNwZWNpZmljIHR5cGUgb2YgY29uc3RyYWludCwKICAgICAgICAgICAgQWxlbWJpYyB3aWxsIGF1dG9tYXRpY2FsbHkgZW1pdCBhIHNlY29uZCBBTFRFUiBzdGF0ZW1lbnQgaW4gb3JkZXIgdG8KICAgICAgICAgICAgYWRkIHRoZSBzaW5nbGUtY29sdW1uIEZPUkVJR04gS0VZIGNvbnN0cmFpbnQgc2VwYXJhdGVseTo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBDb2x1bW4sIElOVEVHRVIsIEZvcmVpZ25LZXkKCiAgICAgICAgICAgICAgICBvcC5hZGRfY29sdW1uKAogICAgICAgICAgICAgICAgICAgICJvcmdhbml6YXRpb24iLAogICAgICAgICAgICAgICAgICAgIENvbHVtbigiYWNjb3VudF9pZCIsIElOVEVHRVIsIEZvcmVpZ25LZXkoImFjY291bnRzLmlkIikpLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgVGhlIGNvbHVtbiBhcmd1bWVudCBwYXNzZWQgdG8gOm1ldGg6YC5PcGVyYXRpb25zLmFkZF9jb2x1bW5gIGlzIGEKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uYCBjb25zdHJ1Y3QsIHVzZWQgaW4gdGhlIHNhbWUgd2F5IGl0J3MKICAgICAgICAgICAgdXNlZCBpbiBTUUxBbGNoZW15LiBJbiBwYXJ0aWN1bGFyLCB2YWx1ZXMgb3IgZnVuY3Rpb25zIHRvIGJlIGluZGljYXRlZAogICAgICAgICAgICBhcyBwcm9kdWNpbmcgdGhlIGNvbHVtbidzIGRlZmF1bHQgdmFsdWUgb24gdGhlIGRhdGFiYXNlIHNpZGUgYXJlCiAgICAgICAgICAgIHNwZWNpZmllZCB1c2luZyB0aGUgYGBzZXJ2ZXJfZGVmYXVsdGBgIHBhcmFtZXRlciwgYW5kIG5vdCBgYGRlZmF1bHRgYAogICAgICAgICAgICB3aGljaCBvbmx5IHNwZWNpZmllcyBQeXRob24tc2lkZSBkZWZhdWx0czo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBDb2x1bW4sIFRJTUVTVEFNUCwgZnVuYwoKICAgICAgICAgICAgICAgICMgc3BlY2lmeSAiREVGQVVMVCBOT1ciIGFsb25nIHdpdGggdGhlIGNvbHVtbiBhZGQKICAgICAgICAgICAgICAgIG9wLmFkZF9jb2x1bW4oCiAgICAgICAgICAgICAgICAgICAgImFjY291bnQiLAogICAgICAgICAgICAgICAgICAgIENvbHVtbigidGltZXN0YW1wIiwgVElNRVNUQU1QLCBzZXJ2ZXJfZGVmYXVsdD1mdW5jLm5vdygpKSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBTdHJpbmcgbmFtZSBvZiB0aGUgcGFyZW50IHRhYmxlLgogICAgICAgICAgICA6cGFyYW0gY29sdW1uOiBhIDpjbGFzczpgc3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uYCBvYmplY3QKICAgICAgICAgICAgIHJlcHJlc2VudGluZyB0aGUgbmV3IGNvbHVtbi4KICAgICAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgICAgICBxdW90aW5nIG9mIHRoZSBzY2hlbWEgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdXNlCiAgICAgICAgICAgICB0aGUgU1FMQWxjaGVteSBjb25zdHJ1Y3QKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KCiAgICAgICAgICAgIE5yTAAAACkEcj0AAAByhQAAAHLFAAAAcoYAAABzBAAAACAgICByPgAAANoKYWRkX2NvbHVtbnoVT3BlcmF0aW9ucy5hZGRfY29sdW1uOQIAAHMKAAAAgADwaAIADRCIQ3JAAAAARikK2ghudWxsYWJsZdoHY29tbWVudNoOc2VydmVyX2RlZmF1bHTaD25ld19jb2x1bW5fbmFtZXKmAAAA2g1leGlzdGluZ190eXBl2hdleGlzdGluZ19zZXJ2ZXJfZGVmYXVsdNoRZXhpc3RpbmdfbnVsbGFibGXaEGV4aXN0aW5nX2NvbW1lbnRyhgAAANoLY29sdW1uX25hbWVyyQAAAPoOT3B0aW9uYWxbYm9vbF1yygAAAPogVW5pb25bc3RyLCBMaXRlcmFsW0ZhbHNlXSwgTm9uZV1yywAAAHIFAAAAcswAAABypgAAAPopVW5pb25bVHlwZUVuZ2luZSwgVHlwZVtUeXBlRW5naW5lXSwgTm9uZV1yzQAAAHLOAAAA+ipVbmlvbltzdHIsIGJvb2wsIElkZW50aXR5LCBDb21wdXRlZCwgTm9uZV1yzwAAAHLQAAAA2gJrd2MDAAAAAAAAAAoAAAABAAAACwAAAfMGAAAAlwBkAVMAKQJh5BIAAElzc3VlIGFuICJhbHRlciBjb2x1bW4iIGluc3RydWN0aW9uIHVzaW5nIHRoZQogICAgICAgICAgICBjdXJyZW50IG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgR2VuZXJhbGx5LCBvbmx5IHRoYXQgYXNwZWN0IG9mIHRoZSBjb2x1bW4gd2hpY2gKICAgICAgICAgICAgaXMgYmVpbmcgY2hhbmdlZCwgaS5lLiBuYW1lLCB0eXBlLCBudWxsYWJpbGl0eSwKICAgICAgICAgICAgZGVmYXVsdCwgbmVlZHMgdG8gYmUgc3BlY2lmaWVkLiAgTXVsdGlwbGUgY2hhbmdlcwogICAgICAgICAgICBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgYXQgb25jZSBhbmQgdGhlIGJhY2tlbmQgc2hvdWxkCiAgICAgICAgICAgICJkbyB0aGUgcmlnaHQgdGhpbmciLCBlbWl0dGluZyBlYWNoIGNoYW5nZSBlaXRoZXIKICAgICAgICAgICAgc2VwYXJhdGVseSBvciB0b2dldGhlciBhcyB0aGUgYmFja2VuZCBhbGxvd3MuCgogICAgICAgICAgICBNeVNRTCBoYXMgc3BlY2lhbCByZXF1aXJlbWVudHMgaGVyZSwgc2luY2UgTXlTUUwKICAgICAgICAgICAgY2Fubm90IEFMVEVSIGEgY29sdW1uIHdpdGhvdXQgYSBmdWxsIHNwZWNpZmljYXRpb24uCiAgICAgICAgICAgIFdoZW4gcHJvZHVjaW5nIE15U1FMLWNvbXBhdGlibGUgbWlncmF0aW9uIGZpbGVzLAogICAgICAgICAgICBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBgYGV4aXN0aW5nX3R5cGVgYCwKICAgICAgICAgICAgYGBleGlzdGluZ19zZXJ2ZXJfZGVmYXVsdGBgLCBhbmQgYGBleGlzdGluZ19udWxsYWJsZWBgCiAgICAgICAgICAgIHBhcmFtZXRlcnMgYmUgcHJlc2VudCwgaWYgbm90IGJlaW5nIGFsdGVyZWQuCgogICAgICAgICAgICBUeXBlIGNoYW5nZXMgd2hpY2ggYXJlIGFnYWluc3QgdGhlIFNRTEFsY2hlbXkKICAgICAgICAgICAgInNjaGVtYSIgdHlwZXMgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5Cb29sZWFuYAogICAgICAgICAgICBhbmQgIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuRW51bWAgbWF5IGFsc28KICAgICAgICAgICAgYWRkIG9yIGRyb3AgY29uc3RyYWludHMgd2hpY2ggYWNjb21wYW55IHRob3NlCiAgICAgICAgICAgIHR5cGVzIG9uIGJhY2tlbmRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtIG5hdGl2ZWx5LgogICAgICAgICAgICBUaGUgYGBleGlzdGluZ190eXBlYGAgYXJndW1lbnQgaXMKICAgICAgICAgICAgdXNlZCBpbiB0aGlzIGNhc2UgdG8gaWRlbnRpZnkgYW5kIHJlbW92ZSBhIHByZXZpb3VzCiAgICAgICAgICAgIGNvbnN0cmFpbnQgdGhhdCB3YXMgYm91bmQgdG8gdGhlIHR5cGUgb2JqZWN0LgoKICAgICAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IHN0cmluZyBuYW1lIG9mIHRoZSB0YXJnZXQgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBjb2x1bW5fbmFtZTogc3RyaW5nIG5hbWUgb2YgdGhlIHRhcmdldCBjb2x1bW4sCiAgICAgICAgICAgICBhcyBpdCBleGlzdHMgYmVmb3JlIHRoZSBvcGVyYXRpb24gYmVnaW5zLgogICAgICAgICAgICA6cGFyYW0gbnVsbGFibGU6IE9wdGlvbmFsOyBzcGVjaWZ5IGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYAogICAgICAgICAgICAgdG8gYWx0ZXIgdGhlIGNvbHVtbidzIG51bGxhYmlsaXR5LgogICAgICAgICAgICA6cGFyYW0gc2VydmVyX2RlZmF1bHQ6IE9wdGlvbmFsOyBzcGVjaWZ5IGEgc3RyaW5nCiAgICAgICAgICAgICBTUUwgZXhwcmVzc2lvbiwgOmZ1bmM6YH5zcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLnRleHRgLAogICAgICAgICAgICAgb3IgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuRGVmYXVsdENsYXVzZWAgdG8gaW5kaWNhdGUKICAgICAgICAgICAgIGFuIGFsdGVyYXRpb24gdG8gdGhlIGNvbHVtbidzIGRlZmF1bHQgdmFsdWUuCiAgICAgICAgICAgICBTZXQgdG8gYGBOb25lYGAgdG8gaGF2ZSB0aGUgZGVmYXVsdCByZW1vdmVkLgogICAgICAgICAgICA6cGFyYW0gY29tbWVudDogb3B0aW9uYWwgc3RyaW5nIHRleHQgb2YgYSBuZXcgY29tbWVudCB0byBhZGQgdG8gdGhlCiAgICAgICAgICAgICBjb2x1bW4uCgogICAgICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4wLjYKCiAgICAgICAgICAgIDpwYXJhbSBuZXdfY29sdW1uX25hbWU6IE9wdGlvbmFsOyBzcGVjaWZ5IGEgc3RyaW5nIG5hbWUgaGVyZSB0bwogICAgICAgICAgICAgaW5kaWNhdGUgdGhlIG5ldyBuYW1lIHdpdGhpbiBhIGNvbHVtbiByZW5hbWUgb3BlcmF0aW9uLgogICAgICAgICAgICA6cGFyYW0gdHlwZVxfOiBPcHRpb25hbDsgYSA6Y2xhc3M6YH5zcWxhbGNoZW15LnR5cGVzLlR5cGVFbmdpbmVgCiAgICAgICAgICAgICB0eXBlIG9iamVjdCB0byBzcGVjaWZ5IGEgY2hhbmdlIHRvIHRoZSBjb2x1bW4ncyB0eXBlLgogICAgICAgICAgICAgRm9yIFNRTEFsY2hlbXkgdHlwZXMgdGhhdCBhbHNvIGluZGljYXRlIGEgY29uc3RyYWludCAoaS5lLgogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5Cb29sZWFuYCwgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5FbnVtYCksCiAgICAgICAgICAgICB0aGUgY29uc3RyYWludCBpcyBhbHNvIGdlbmVyYXRlZC4KICAgICAgICAgICAgOnBhcmFtIGF1dG9pbmNyZW1lbnQ6IHNldCB0aGUgYGBBVVRPX0lOQ1JFTUVOVGBgIGZsYWcgb2YgdGhlIGNvbHVtbjsKICAgICAgICAgICAgIGN1cnJlbnRseSB1bmRlcnN0b29kIGJ5IHRoZSBNeVNRTCBkaWFsZWN0LgogICAgICAgICAgICA6cGFyYW0gZXhpc3RpbmdfdHlwZTogT3B0aW9uYWw7IGEKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuVHlwZUVuZ2luZWAKICAgICAgICAgICAgIHR5cGUgb2JqZWN0IHRvIHNwZWNpZnkgdGhlIHByZXZpb3VzIHR5cGUuICAgVGhpcwogICAgICAgICAgICAgaXMgcmVxdWlyZWQgZm9yIGFsbCBNeVNRTCBjb2x1bW4gYWx0ZXIgb3BlcmF0aW9ucyB0aGF0CiAgICAgICAgICAgICBkb24ndCBvdGhlcndpc2Ugc3BlY2lmeSBhIG5ldyB0eXBlLCBhcyB3ZWxsIGFzIGZvcgogICAgICAgICAgICAgd2hlbiBudWxsYWJpbGl0eSBpcyBiZWluZyBjaGFuZ2VkIG9uIGEgU1FMIFNlcnZlcgogICAgICAgICAgICAgY29sdW1uLiAgSXQgaXMgYWxzbyB1c2VkIGlmIHRoZSB0eXBlIGlzIGEgc28tY2FsbGVkCiAgICAgICAgICAgICBTUUxsY2hlbXkgInNjaGVtYSIgdHlwZSB3aGljaCBtYXkgZGVmaW5lIGEgY29uc3RyYWludCAoaS5lLgogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5Cb29sZWFuYCwKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuRW51bWApLAogICAgICAgICAgICAgc28gdGhhdCB0aGUgY29uc3RyYWludCBjYW4gYmUgZHJvcHBlZC4KICAgICAgICAgICAgOnBhcmFtIGV4aXN0aW5nX3NlcnZlcl9kZWZhdWx0OiBPcHRpb25hbDsgVGhlIGV4aXN0aW5nCiAgICAgICAgICAgICBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjb2x1bW4uICAgUmVxdWlyZWQgb24gTXlTUUwgaWYKICAgICAgICAgICAgIGFuIGV4aXN0aW5nIGRlZmF1bHQgaXMgbm90IGJlaW5nIGNoYW5nZWQ7IGVsc2UgTXlTUUwKICAgICAgICAgICAgIHJlbW92ZXMgdGhlIGRlZmF1bHQuCiAgICAgICAgICAgIDpwYXJhbSBleGlzdGluZ19udWxsYWJsZTogT3B0aW9uYWw7IHRoZSBleGlzdGluZyBudWxsYWJpbGl0eQogICAgICAgICAgICAgb2YgdGhlIGNvbHVtbi4gIFJlcXVpcmVkIG9uIE15U1FMIGlmIHRoZSBleGlzdGluZyBudWxsYWJpbGl0eQogICAgICAgICAgICAgaXMgbm90IGJlaW5nIGNoYW5nZWQ7IGVsc2UgTXlTUUwgc2V0cyB0aGlzIHRvIE5VTEwuCiAgICAgICAgICAgIDpwYXJhbSBleGlzdGluZ19hdXRvaW5jcmVtZW50OiBPcHRpb25hbDsgdGhlIGV4aXN0aW5nIGF1dG9pbmNyZW1lbnQKICAgICAgICAgICAgIG9mIHRoZSBjb2x1bW4uICBVc2VkIGZvciBNeVNRTCdzIHN5c3RlbSBvZiBhbHRlcmluZyBhIGNvbHVtbgogICAgICAgICAgICAgdGhhdCBzcGVjaWZpZXMgYGBBVVRPX0lOQ1JFTUVOVGBgLgogICAgICAgICAgICA6cGFyYW0gZXhpc3RpbmdfY29tbWVudDogc3RyaW5nIHRleHQgb2YgdGhlIGV4aXN0aW5nIGNvbW1lbnQgb24gdGhlCiAgICAgICAgICAgICBjb2x1bW4gdG8gYmUgbWFpbnRhaW5lZC4gIFJlcXVpcmVkIG9uIE15U1FMIGlmIHRoZSBleGlzdGluZyBjb21tZW50CiAgICAgICAgICAgICBvbiB0aGUgY29sdW1uIGlzIG5vdCBiZWluZyBjaGFuZ2VkLgoKICAgICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMC42CgogICAgICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4gIFRvIGNvbnRyb2wKICAgICAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgICAgIHRoZSBTUUxBbGNoZW15IGNvbnN0cnVjdAogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgLgogICAgICAgICAgICA6cGFyYW0gcG9zdGdyZXNxbF91c2luZzogU3RyaW5nIGFyZ3VtZW50IHdoaWNoIHdpbGwgaW5kaWNhdGUgYQogICAgICAgICAgICAgU1FMIGV4cHJlc3Npb24gdG8gcmVuZGVyIHdpdGhpbiB0aGUgUG9zdGdyZXNxbC1zcGVjaWZpYyBVU0lORyBjbGF1c2UKICAgICAgICAgICAgIHdpdGhpbiBBTFRFUiBDT0xVTU4uICAgIFRoaXMgc3RyaW5nIGlzIHRha2VuIGRpcmVjdGx5IGFzIHJhdyBTUUwgd2hpY2gKICAgICAgICAgICAgIG11c3QgZXhwbGljaXRseSBpbmNsdWRlIGFueSBuZWNlc3NhcnkgcXVvdGluZyBvciBlc2NhcGluZyBvZiB0b2tlbnMKICAgICAgICAgICAgIHdpdGhpbiB0aGUgZXhwcmVzc2lvbi4KCiAgICAgICAgICAgIE5yTAAAACkOcj0AAAByhQAAAHLRAAAAcskAAAByygAAAHLLAAAAcswAAABypgAAAHLNAAAAcs4AAAByzwAAAHLQAAAAcoYAAABy1gAAAHMOAAAAICAgICAgICAgICAgICByPgAAANoMYWx0ZXJfY29sdW1uehdPcGVyYXRpb25zLmFsdGVyX2NvbHVtbo8CAABzCgAAAIAA8FYDAA0QiENyQAAAAFQpAdoLbXVsdGlpbnNlcnTaBXRhYmxl+hlVbmlvbltUYWJsZSwgVGFibGVDbGF1c2Vd2gRyb3dz+gpMaXN0W2RpY3RdctkAAADaBGJvb2xjAwAAAAAAAAABAAAAAQAAAAMAAAHzBgAAAJcAZAFTACkCYcAPAABJc3N1ZSBhICJidWxrIGluc2VydCIgb3BlcmF0aW9uIHVzaW5nIHRoZSBjdXJyZW50CiAgICAgICAgICAgIG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgVGhpcyBwcm92aWRlcyBhIG1lYW5zIG9mIHJlcHJlc2VudGluZyBhbiBJTlNFUlQgb2YgbXVsdGlwbGUgcm93cwogICAgICAgICAgICB3aGljaCB3b3JrcyBlcXVhbGx5IHdlbGwgaW4gdGhlIGNvbnRleHQgb2YgZXhlY3V0aW5nIG9uIGEgbGl2ZQogICAgICAgICAgICBjb25uZWN0aW9uIGFzIHdlbGwgYXMgdGhhdCBvZiBnZW5lcmF0aW5nIGEgU1FMIHNjcmlwdC4gICBJbiB0aGUKICAgICAgICAgICAgY2FzZSBvZiBhIFNRTCBzY3JpcHQsIHRoZSB2YWx1ZXMgYXJlIHJlbmRlcmVkIGlubGluZSBpbnRvIHRoZQogICAgICAgICAgICBzdGF0ZW1lbnQuCgogICAgICAgICAgICBlLmcuOjoKCiAgICAgICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCiAgICAgICAgICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkuc3FsIGltcG9ydCB0YWJsZSwgY29sdW1uCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IFN0cmluZywgSW50ZWdlciwgRGF0ZQoKICAgICAgICAgICAgICAgICMgQ3JlYXRlIGFuIGFkLWhvYyB0YWJsZSB0byB1c2UgZm9yIHRoZSBpbnNlcnQgc3RhdGVtZW50LgogICAgICAgICAgICAgICAgYWNjb3VudHNfdGFibGUgPSB0YWJsZSgKICAgICAgICAgICAgICAgICAgICAiYWNjb3VudCIsCiAgICAgICAgICAgICAgICAgICAgY29sdW1uKCJpZCIsIEludGVnZXIpLAogICAgICAgICAgICAgICAgICAgIGNvbHVtbigibmFtZSIsIFN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgY29sdW1uKCJjcmVhdGVfZGF0ZSIsIERhdGUpLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgIG9wLmJ1bGtfaW5zZXJ0KAogICAgICAgICAgICAgICAgICAgIGFjY291bnRzX3RhYmxlLAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkpvaG4gU21pdGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZV9kYXRlIjogZGF0ZSgyMDEwLCAxMCwgNSksCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJFZCBXaWxsaWFtcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlX2RhdGUiOiBkYXRlKDIwMDcsIDUsIDI3KSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIldlbmR5IEpvbmVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVhdGVfZGF0ZSI6IGRhdGUoMjAwOCwgOCwgMTUpLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBXaGVuIHVzaW5nIC0tc3FsIG1vZGUsIHNvbWUgZGF0YXR5cGVzIG1heSBub3QgcmVuZGVyIGlubGluZQogICAgICAgICAgICBhdXRvbWF0aWNhbGx5LCBzdWNoIGFzIGRhdGVzIGFuZCBvdGhlciBzcGVjaWFsIHR5cGVzLiAgIFdoZW4gdGhpcwogICAgICAgICAgICBpc3N1ZSBpcyBwcmVzZW50LCA6bWV0aDpgLk9wZXJhdGlvbnMuaW5saW5lX2xpdGVyYWxgIG1heSBiZSB1c2VkOjoKCiAgICAgICAgICAgICAgICBvcC5idWxrX2luc2VydCgKICAgICAgICAgICAgICAgICAgICBhY2NvdW50c190YWJsZSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJKb2huIFNtaXRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVhdGVfZGF0ZSI6IG9wLmlubGluZV9saXRlcmFsKCIyMDEwLTEwLTA1IiksCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJFZCBXaWxsaWFtcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlX2RhdGUiOiBvcC5pbmxpbmVfbGl0ZXJhbCgiMjAwNy0wNS0yNyIpLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiAzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiV2VuZHkgSm9uZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZV9kYXRlIjogb3AuaW5saW5lX2xpdGVyYWwoIjIwMDgtMDgtMTUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIG11bHRpaW5zZXJ0PUZhbHNlLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgV2hlbiB1c2luZyA6bWV0aDpgLk9wZXJhdGlvbnMuaW5saW5lX2xpdGVyYWxgIGluIGNvbmp1bmN0aW9uIHdpdGgKICAgICAgICAgICAgOm1ldGg6YC5PcGVyYXRpb25zLmJ1bGtfaW5zZXJ0YCwgaW4gb3JkZXIgZm9yIHRoZSBzdGF0ZW1lbnQgdG8gd29yawogICAgICAgICAgICBpbiAib25saW5lIiAoZS5nLiBub24gLS1zcWwpIG1vZGUsIHRoZQogICAgICAgICAgICA6cGFyYW1yZWY6YH4uT3BlcmF0aW9ucy5idWxrX2luc2VydC5tdWx0aWluc2VydGAKICAgICAgICAgICAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBgRmFsc2VgYCwgd2hpY2ggd2lsbCBoYXZlIHRoZSBlZmZlY3Qgb2YKICAgICAgICAgICAgaW5kaXZpZHVhbCBJTlNFUlQgc3RhdGVtZW50cyBiZWluZyBlbWl0dGVkIHRvIHRoZSBkYXRhYmFzZSwgZWFjaAogICAgICAgICAgICB3aXRoIGEgZGlzdGluY3QgVkFMVUVTIGNsYXVzZSwgc28gdGhhdCB0aGUgImlubGluZSIgdmFsdWVzIGNhbgogICAgICAgICAgICBzdGlsbCBiZSByZW5kZXJlZCwgcmF0aGVyIHRoYW4gYXR0ZW1wdGluZyB0byBwYXNzIHRoZSB2YWx1ZXMKICAgICAgICAgICAgYXMgYm91bmQgcGFyYW1ldGVycy4KCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZTogYSB0YWJsZSBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgdGFyZ2V0IG9mIHRoZSBJTlNFUlQuCgogICAgICAgICAgICA6cGFyYW0gcm93czogYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBpbmRpY2F0aW5nIHJvd3MuCgogICAgICAgICAgICA6cGFyYW0gbXVsdGlpbnNlcnQ6IHdoZW4gYXQgaXRzIGRlZmF1bHQgb2YgVHJ1ZSBhbmQgLS1zcWwgbW9kZSBpcyBub3QKICAgICAgICAgICAgICAgZW5hYmxlZCwgdGhlIElOU0VSVCBzdGF0ZW1lbnQgd2lsbCBiZSBleGVjdXRlZCB1c2luZwogICAgICAgICAgICAgICAiZXhlY3V0ZW1hbnkoKSIgc3R5bGUsIHdoZXJlIGFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCBvZgogICAgICAgICAgICAgICBkaWN0aW9uYXJpZXMgYXJlIHBhc3NlZCBhcyBib3VuZCBwYXJhbWV0ZXJzIGluIGEgc2luZ2xlCiAgICAgICAgICAgICAgIGxpc3QuICAgU2V0dGluZyB0aGlzIHRvIEZhbHNlIHJlc3VsdHMgaW4gaW5kaXZpZHVhbCBJTlNFUlQKICAgICAgICAgICAgICAgc3RhdGVtZW50cyBiZWluZyBlbWl0dGVkIHBlciBwYXJhbWV0ZXIgc2V0LCBhbmQgaXMgbmVlZGVkCiAgICAgICAgICAgICAgIGluIHRob3NlIGNhc2VzIHdoZXJlIG5vbi1saXRlcmFsIHZhbHVlcyBhcmUgcHJlc2VudCBpbiB0aGUKICAgICAgICAgICAgICAgcGFyYW1ldGVyIHNldHMuCgogICAgICAgICAgICBOckwAAAApBHI9AAAActoAAABy3AAAAHLZAAAAcwQAAAAgICAgcj4AAADaC2J1bGtfaW5zZXJ0ehZPcGVyYXRpb25zLmJ1bGtfaW5zZXJ0/AIAAHMKAAAAgADwTAMADRCIQ3JAAAAA2g9jb25zdHJhaW50X25hbWXaCWNvbmRpdGlvbvooVW5pb25bc3RyLCBCaW5hcnlFeHByZXNzaW9uLCBUZXh0Q2xhdXNlXWMEAAAAAAAAAAEAAAABAAAACwAAAfMGAAAAlwBkAVMAKQJhhQcAAElzc3VlIGEgImNyZWF0ZSBjaGVjayBjb25zdHJhaW50IiBpbnN0cnVjdGlvbiB1c2luZyB0aGUKICAgICAgICAgICAgY3VycmVudCBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgICAgIGUuZy46OgoKICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKICAgICAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteS5zcWwgaW1wb3J0IGNvbHVtbiwgZnVuYwoKICAgICAgICAgICAgICAgIG9wLmNyZWF0ZV9jaGVja19jb25zdHJhaW50KAogICAgICAgICAgICAgICAgICAgICJja191c2VyX25hbWVfbGVuIiwKICAgICAgICAgICAgICAgICAgICAidXNlciIsCiAgICAgICAgICAgICAgICAgICAgZnVuYy5sZW4oY29sdW1uKCJuYW1lIikpID4gNSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIENIRUNLIGNvbnN0cmFpbnRzIGFyZSB1c3VhbGx5IGFnYWluc3QgYSBTUUwgZXhwcmVzc2lvbiwgc28gYWQtaG9jCiAgICAgICAgICAgIHRhYmxlIG1ldGFkYXRhIGlzIHVzdWFsbHkgbmVlZGVkLiAgIFRoZSBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgdGhlIGdpdmVuCiAgICAgICAgICAgIGFyZ3VtZW50cyBpbnRvIGEgOmNsYXNzOmBzcWxhbGNoZW15LnNjaGVtYS5DaGVja0NvbnN0cmFpbnRgIGJvdW5kCiAgICAgICAgICAgIHRvIGFuIGFub255bW91cyB0YWJsZSBpbiBvcmRlciB0byBlbWl0IHRoZSBDUkVBVEUgc3RhdGVtZW50LgoKICAgICAgICAgICAgOnBhcmFtIG5hbWU6IE5hbWUgb2YgdGhlIGNoZWNrIGNvbnN0cmFpbnQuICBUaGUgbmFtZSBpcyBuZWNlc3NhcnkKICAgICAgICAgICAgIHNvIHRoYXQgYW4gQUxURVIgc3RhdGVtZW50IGNhbiBiZSBlbWl0dGVkLiAgRm9yIHNldHVwcyB0aGF0CiAgICAgICAgICAgICB1c2UgYW4gYXV0b21hdGVkIG5hbWluZyBzY2hlbWUgc3VjaCBhcyB0aGF0IGRlc2NyaWJlZCBhdAogICAgICAgICAgICAgOnJlZjpgc3FsYTpjb25zdHJhaW50X25hbWluZ19jb252ZW50aW9uc2AsCiAgICAgICAgICAgICBgYG5hbWVgYCBoZXJlIGNhbiBiZSBgYE5vbmVgYCwgYXMgdGhlIGV2ZW50IGxpc3RlbmVyIHdpbGwKICAgICAgICAgICAgIGFwcGx5IHRoZSBuYW1lIHRvIHRoZSBjb25zdHJhaW50IG9iamVjdCB3aGVuIGl0IGlzIGFzc29jaWF0ZWQKICAgICAgICAgICAgIHdpdGggdGhlIHRhYmxlLgogICAgICAgICAgICA6cGFyYW0gdGFibGVfbmFtZTogU3RyaW5nIG5hbWUgb2YgdGhlIHNvdXJjZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIGNvbmRpdGlvbjogU1FMIGV4cHJlc3Npb24gdGhhdCdzIHRoZSBjb25kaXRpb24gb2YgdGhlCiAgICAgICAgICAgICBjb25zdHJhaW50LiBDYW4gYmUgYSBzdHJpbmcgb3IgU1FMQWxjaGVteSBleHByZXNzaW9uIGxhbmd1YWdlCiAgICAgICAgICAgICBzdHJ1Y3R1cmUuCiAgICAgICAgICAgIDpwYXJhbSBkZWZlcnJhYmxlOiBvcHRpb25hbCBib29sLiBJZiBzZXQsIGVtaXQgREVGRVJSQUJMRSBvcgogICAgICAgICAgICAgTk9UIERFRkVSUkFCTEUgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gaW5pdGlhbGx5OiBvcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBJTklUSUFMTFkgPHZhbHVlPgogICAgICAgICAgICAgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4gIFRvIGNvbnRyb2wKICAgICAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgICAgIHRoZSBTUUxBbGNoZW15IGNvbnN0cnVjdAogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgLgoKICAgICAgICAgICAgTnJMAAAAKQZyPQAAAHLhAAAAcoUAAABy4gAAAHKGAAAActYAAABzBgAAACAgICAgIHI+AAAA2hdjcmVhdGVfY2hlY2tfY29uc3RyYWludHoiT3BlcmF0aW9ucy5jcmVhdGVfY2hlY2tfY29uc3RyYWludGQDAABzCgAAAIAA8GIBAA0QiENyQAAAANoIZWxlbWVudHNyjAAAAGMDAAAAAAAAAAAAAAABAAAADwAAAfMGAAAAlwBkAVMAKQJhQAUAAElzc3VlIGFuIGFsdGVyIHRvIGNyZWF0ZSBhbiBFWENMVURFIGNvbnN0cmFpbnQgdXNpbmcgdGhlCiAgICAgICAgICAgIGN1cnJlbnQgbWlncmF0aW9uIGNvbnRleHQuCgogICAgICAgICAgICAuLiBub3RlOjogIFRoaXMgbWV0aG9kIGlzIFBvc3RncmVzcWwgc3BlY2lmaWMsIGFuZCBhZGRpdGlvbmFsbHkKICAgICAgICAgICAgICAgcmVxdWlyZXMgYXQgbGVhc3QgU1FMQWxjaGVteSAxLjAuCgogICAgICAgICAgICBlLmcuOjoKCiAgICAgICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCgogICAgICAgICAgICAgICAgb3AuY3JlYXRlX2V4Y2x1ZGVfY29uc3RyYWludCgKICAgICAgICAgICAgICAgICAgICAidXNlcl9leGNsIiwKICAgICAgICAgICAgICAgICAgICAidXNlciIsCiAgICAgICAgICAgICAgICAgICAgKCJwZXJpb2QiLCAiJiYiKSwKICAgICAgICAgICAgICAgICAgICAoImdyb3VwIiwgIj0iKSwKICAgICAgICAgICAgICAgICAgICB3aGVyZT0oImdyb3VwICE9ICdzb21lIGdyb3VwJyIpLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBleHByZXNzaW9ucyB3b3JrIHRoZSBzYW1lIHdheSBhcyB0aGF0IG9mCiAgICAgICAgICAgIHRoZSBgYEV4Y2x1ZGVDb25zdHJhaW50YGAgb2JqZWN0IGl0c2VsZjsgaWYgcGxhaW4gc3RyaW5ncyBhcmUKICAgICAgICAgICAgcGFzc2VkLCBxdW90aW5nIHJ1bGVzIG11c3QgYmUgYXBwbGllZCBtYW51YWxseS4KCiAgICAgICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9mIHRoZSBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gdGFibGVfbmFtZTogU3RyaW5nIG5hbWUgb2YgdGhlIHNvdXJjZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIGVsZW1lbnRzOiBleGNsdWRlIGNvbmRpdGlvbnMuCiAgICAgICAgICAgIDpwYXJhbSB3aGVyZTogU1FMIGV4cHJlc3Npb24gb3IgU1FMIHN0cmluZyB3aXRoIG9wdGlvbmFsIFdIRVJFCiAgICAgICAgICAgICBjbGF1c2UuCiAgICAgICAgICAgIDpwYXJhbSBkZWZlcnJhYmxlOiBvcHRpb25hbCBib29sLiBJZiBzZXQsIGVtaXQgREVGRVJSQUJMRSBvcgogICAgICAgICAgICAgTk9UIERFRkVSUkFCTEUgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gaW5pdGlhbGx5OiBvcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBJTklUSUFMTFkgPHZhbHVlPgogICAgICAgICAgICAgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4KCiAgICAgICAgICAgIE5yTAAAACkFcj0AAABy4QAAAHKFAAAAcuYAAABy1gAAAHMFAAAAICAgICByPgAAANoZY3JlYXRlX2V4Y2x1ZGVfY29uc3RyYWludHokT3BlcmF0aW9ucy5jcmVhdGVfZXhjbHVkZV9jb25zdHJhaW50lwMAAHMKAAAAgADwUgEADRCIQ3JAAAAAKQfaCG9udXBkYXRl2ghvbmRlbGV0ZdoKZGVmZXJyYWJsZdoJaW5pdGlhbGx52gVtYXRjaNoNc291cmNlX3NjaGVtYdoPcmVmZXJlbnRfc2NoZW1h2gxzb3VyY2VfdGFibGXaDnJlZmVyZW50X3RhYmxl2gpsb2NhbF9jb2xz+glMaXN0W3N0cl3aC3JlbW90ZV9jb2xzcukAAABy6gAAAHLrAAAAcuwAAABy7QAAAHLuAAAAcu8AAADaCmRpYWxlY3Rfa3djBgAAAAAAAAAHAAAAAQAAAAsAAAHzBgAAAJcAZAFTACkCYV4JAABJc3N1ZSBhICJjcmVhdGUgZm9yZWlnbiBrZXkiIGluc3RydWN0aW9uIHVzaW5nIHRoZQogICAgICAgICAgICBjdXJyZW50IG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgZS5nLjo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgICAgIG9wLmNyZWF0ZV9mb3JlaWduX2tleSgKICAgICAgICAgICAgICAgICAgICAiZmtfdXNlcl9hZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgInVzZXIiLAogICAgICAgICAgICAgICAgICAgIFsidXNlcl9pZCJdLAogICAgICAgICAgICAgICAgICAgIFsiaWQiXSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIFRoaXMgaW50ZXJuYWxseSBnZW5lcmF0ZXMgYSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAgb2JqZWN0CiAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBjb2x1bW5zLCB0aGVuIGdlbmVyYXRlcyBhIG5ldwogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5Gb3JlaWduS2V5Q29uc3RyYWludGAKICAgICAgICAgICAgb2JqZWN0IHdoaWNoIGl0IHRoZW4gYXNzb2NpYXRlcyB3aXRoIHRoZQogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAuCiAgICAgICAgICAgIEFueSBldmVudCBsaXN0ZW5lcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWN0aW9uIHdpbGwgYmUgZmlyZWQKICAgICAgICAgICAgb2ZmIG5vcm1hbGx5LiAgIFRoZSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5BZGRDb25zdHJhaW50YAogICAgICAgICAgICBjb25zdHJ1Y3QgaXMgdWx0aW1hdGVseSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBBTFRFUiBzdGF0ZW1lbnQuCgogICAgICAgICAgICA6cGFyYW0gY29uc3RyYWludF9uYW1lOiBOYW1lIG9mIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50LiAgVGhlIG5hbWUKICAgICAgICAgICAgIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IGFuIEFMVEVSIHN0YXRlbWVudCBjYW4gYmUgZW1pdHRlZC4gIEZvciBzZXR1cHMKICAgICAgICAgICAgIHRoYXQgdXNlIGFuIGF1dG9tYXRlZCBuYW1pbmcgc2NoZW1lIHN1Y2ggYXMgdGhhdCBkZXNjcmliZWQgYXQKICAgICAgICAgICAgIDpyZWY6YHNxbGE6Y29uc3RyYWludF9uYW1pbmdfY29udmVudGlvbnNgLAogICAgICAgICAgICAgYGBuYW1lYGAgaGVyZSBjYW4gYmUgYGBOb25lYGAsIGFzIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsCiAgICAgICAgICAgICBhcHBseSB0aGUgbmFtZSB0byB0aGUgY29uc3RyYWludCBvYmplY3Qgd2hlbiBpdCBpcyBhc3NvY2lhdGVkCiAgICAgICAgICAgICB3aXRoIHRoZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIHNvdXJjZV90YWJsZTogU3RyaW5nIG5hbWUgb2YgdGhlIHNvdXJjZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIHJlZmVyZW50X3RhYmxlOiBTdHJpbmcgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBsb2NhbF9jb2xzOiBhIGxpc3Qgb2Ygc3RyaW5nIGNvbHVtbiBuYW1lcyBpbiB0aGUKICAgICAgICAgICAgIHNvdXJjZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIHJlbW90ZV9jb2xzOiBhIGxpc3Qgb2Ygc3RyaW5nIGNvbHVtbiBuYW1lcyBpbiB0aGUKICAgICAgICAgICAgIHJlbW90ZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIG9udXBkYXRlOiBPcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBPTiBVUERBVEUgPHZhbHVlPiB3aGVuCiAgICAgICAgICAgICBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LiBUeXBpY2FsIHZhbHVlcyBpbmNsdWRlIENBU0NBREUsCiAgICAgICAgICAgICBERUxFVEUgYW5kIFJFU1RSSUNULgogICAgICAgICAgICA6cGFyYW0gb25kZWxldGU6IE9wdGlvbmFsIHN0cmluZy4gSWYgc2V0LCBlbWl0IE9OIERFTEVURSA8dmFsdWU+IHdoZW4KICAgICAgICAgICAgIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuIFR5cGljYWwgdmFsdWVzIGluY2x1ZGUgQ0FTQ0FERSwKICAgICAgICAgICAgIERFTEVURSBhbmQgUkVTVFJJQ1QuCiAgICAgICAgICAgIDpwYXJhbSBkZWZlcnJhYmxlOiBvcHRpb25hbCBib29sLiBJZiBzZXQsIGVtaXQgREVGRVJSQUJMRSBvciBOT1QKICAgICAgICAgICAgIERFRkVSUkFCTEUgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gc291cmNlX3NjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgb2YgdGhlIHNvdXJjZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIHJlZmVyZW50X3NjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIHRhYmxlLgoKICAgICAgICAgICAgTnJMAAAAKQ5yPQAAAHLhAAAAcvAAAABy8QAAAHLyAAAAcvQAAABy6QAAAHLqAAAAcusAAABy7AAAAHLtAAAAcu4AAABy7wAAAHL1AAAAcw4AAAAgICAgICAgICAgICAgIHI+AAAA2hJjcmVhdGVfZm9yZWlnbl9rZXl6HU9wZXJhdGlvbnMuY3JlYXRlX2ZvcmVpZ25fa2V5wgMAAHMKAAAAgADwRAIADRCIQ3JAAAAAKQJyhgAAANoGdW5pcXVl2gppbmRleF9uYW1l2gdjb2x1bW5z+i9TZXF1ZW5jZVtVbmlvbltzdHIsIFRleHRDbGF1c2UsIEZ1bmN0aW9uW0FueV1dXXL4AAAAYwQAAAAAAAAAAgAAAAEAAAALAAAB8wYAAACXAGQBUwApAmGnBwAASXNzdWUgYSAiY3JlYXRlIGluZGV4IiBpbnN0cnVjdGlvbiB1c2luZyB0aGUgY3VycmVudAogICAgICAgICAgICBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgICAgIGUuZy46OgoKICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKCiAgICAgICAgICAgICAgICBvcC5jcmVhdGVfaW5kZXgoImlrX3Rlc3QiLCAidDEiLCBbImZvbyIsICJiYXIiXSkKCiAgICAgICAgICAgIEZ1bmN0aW9uYWwgaW5kZXhlcyBjYW4gYmUgcHJvZHVjZWQgYnkgdXNpbmcgdGhlCiAgICAgICAgICAgIDpmdW5jOmBzcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLnRleHRgIGNvbnN0cnVjdDo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCB0ZXh0CgogICAgICAgICAgICAgICAgb3AuY3JlYXRlX2luZGV4KCJpa190ZXN0IiwgInQxIiwgW3RleHQoImxvd2VyKGZvbykiKV0pCgogICAgICAgICAgICA6cGFyYW0gaW5kZXhfbmFtZTogbmFtZSBvZiB0aGUgaW5kZXguCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBuYW1lIG9mIHRoZSBvd25pbmcgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBjb2x1bW5zOiBhIGxpc3QgY29uc2lzdGluZyBvZiBzdHJpbmcgY29sdW1uIG5hbWVzIGFuZC9vcgogICAgICAgICAgICAgOmZ1bmM6YH5zcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLnRleHRgIGNvbnN0cnVjdHMuCiAgICAgICAgICAgIDpwYXJhbSBzY2hlbWE6IE9wdGlvbmFsIHNjaGVtYSBuYW1lIHRvIG9wZXJhdGUgd2l0aGluLiAgVG8gY29udHJvbAogICAgICAgICAgICAgcXVvdGluZyBvZiB0aGUgc2NoZW1hIG91dHNpZGUgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHVzZQogICAgICAgICAgICAgdGhlIFNRTEFsY2hlbXkgY29uc3RydWN0CiAgICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNxbC5lbGVtZW50cy5xdW90ZWRfbmFtZWAuCiAgICAgICAgICAgIDpwYXJhbSB1bmlxdWU6IElmIFRydWUsIGNyZWF0ZSBhIHVuaXF1ZSBpbmRleC4KCiAgICAgICAgICAgIDpwYXJhbSBxdW90ZToKICAgICAgICAgICAgICAgIEZvcmNlIHF1b3Rpbmcgb2YgdGhpcyBjb2x1bW4ncyBuYW1lIG9uIG9yIG9mZiwgY29ycmVzcG9uZGluZwogICAgICAgICAgICAgICAgdG8gYGBUcnVlYGAgb3IgYGBGYWxzZWBgLiBXaGVuIGxlZnQgYXQgaXRzIGRlZmF1bHQKICAgICAgICAgICAgICAgIG9mIGBgTm9uZWBgLCB0aGUgY29sdW1uIGlkZW50aWZpZXIgd2lsbCBiZSBxdW90ZWQgYWNjb3JkaW5nIHRvCiAgICAgICAgICAgICAgICB3aGV0aGVyIHRoZSBuYW1lIGlzIGNhc2Ugc2Vuc2l0aXZlIChpZGVudGlmaWVycyB3aXRoIGF0IGxlYXN0IG9uZQogICAgICAgICAgICAgICAgdXBwZXIgY2FzZSBjaGFyYWN0ZXIgYXJlIHRyZWF0ZWQgYXMgY2FzZSBzZW5zaXRpdmUpLCBvciBpZiBpdCdzIGEKICAgICAgICAgICAgICAgIHJlc2VydmVkIHdvcmQuIFRoaXMgZmxhZyBpcyBvbmx5IG5lZWRlZCB0byBmb3JjZSBxdW90aW5nIG9mIGEKICAgICAgICAgICAgICAgIHJlc2VydmVkIHdvcmQgd2hpY2ggaXMgbm90IGtub3duIGJ5IHRoZSBTUUxBbGNoZW15IGRpYWxlY3QuCgogICAgICAgICAgICA6cGFyYW0gXCoqa3c6IEFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgbm90IG1lbnRpb25lZCBhYm92ZSBhcmUKICAgICAgICAgICAgICAgIGRpYWxlY3Qgc3BlY2lmaWMsIGFuZCBwYXNzZWQgaW4gdGhlIGZvcm0KICAgICAgICAgICAgICAgIGBgPGRpYWxlY3RuYW1lPl88YXJnbmFtZT5gYC4KICAgICAgICAgICAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgYW4gaW5kaXZpZHVhbCBkaWFsZWN0IGF0CiAgICAgICAgICAgICAgICA6cmVmOmBkaWFsZWN0X3RvcGxldmVsYCBmb3IgZGV0YWlsIG9uIGRvY3VtZW50ZWQgYXJndW1lbnRzLgoKICAgICAgICAgICAgTnJMAAAAKQdyPQAAAHL5AAAAcoUAAABy+gAAAHKGAAAAcvgAAABy1gAAAHMHAAAAICAgICAgIHI+AAAA2gxjcmVhdGVfaW5kZXh6F09wZXJhdGlvbnMuY3JlYXRlX2luZGV4BgQAAHMKAAAAgADwagEADRCIQ3JAAAAAYwQAAAAAAAAAAQAAAAEAAAADAAAB8wYAAACXAGQBUwApAmGOBgAASXNzdWUgYSAiY3JlYXRlIHByaW1hcnkga2V5IiBpbnN0cnVjdGlvbiB1c2luZyB0aGUgY3VycmVudAogICAgICAgICAgICBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgICAgIGUuZy46OgoKICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKCiAgICAgICAgICAgICAgICBvcC5jcmVhdGVfcHJpbWFyeV9rZXkoInBrX215X3RhYmxlIiwgIm15X3RhYmxlIiwgWyJpZCIsICJ2ZXJzaW9uIl0pCgogICAgICAgICAgICBUaGlzIGludGVybmFsbHkgZ2VuZXJhdGVzIGEgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIG9iamVjdAogICAgICAgICAgICBjb250YWluaW5nIHRoZSBuZWNlc3NhcnkgY29sdW1ucywgdGhlbiBnZW5lcmF0ZXMgYSBuZXcKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuUHJpbWFyeUtleUNvbnN0cmFpbnRgCiAgICAgICAgICAgIG9iamVjdCB3aGljaCBpdCB0aGVuIGFzc29jaWF0ZXMgd2l0aCB0aGUKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgLgogICAgICAgICAgICBBbnkgZXZlbnQgbGlzdGVuZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjdGlvbiB3aWxsIGJlIGZpcmVkCiAgICAgICAgICAgIG9mZiBub3JtYWxseS4gICBUaGUgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQWRkQ29uc3RyYWludGAKICAgICAgICAgICAgY29uc3RydWN0IGlzIHVsdGltYXRlbHkgdXNlZCB0byBnZW5lcmF0ZSB0aGUgQUxURVIgc3RhdGVtZW50LgoKICAgICAgICAgICAgOnBhcmFtIGNvbnN0cmFpbnRfbmFtZTogTmFtZSBvZiB0aGUgcHJpbWFyeSBrZXkgY29uc3RyYWludC4gIFRoZSBuYW1lCiAgICAgICAgICAgICBpcyBuZWNlc3Nhcnkgc28gdGhhdCBhbiBBTFRFUiBzdGF0ZW1lbnQgY2FuIGJlIGVtaXR0ZWQuICBGb3Igc2V0dXBzCiAgICAgICAgICAgICB0aGF0IHVzZSBhbiBhdXRvbWF0ZWQgbmFtaW5nIHNjaGVtZSBzdWNoIGFzIHRoYXQgZGVzY3JpYmVkIGF0CiAgICAgICAgICAgICA6cmVmOmBzcWxhOmNvbnN0cmFpbnRfbmFtaW5nX2NvbnZlbnRpb25zYAogICAgICAgICAgICAgYGBuYW1lYGAgaGVyZSBjYW4gYmUgYGBOb25lYGAsIGFzIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsCiAgICAgICAgICAgICBhcHBseSB0aGUgbmFtZSB0byB0aGUgY29uc3RyYWludCBvYmplY3Qgd2hlbiBpdCBpcyBhc3NvY2lhdGVkCiAgICAgICAgICAgICB3aXRoIHRoZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IFN0cmluZyBuYW1lIG9mIHRoZSB0YXJnZXQgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBjb2x1bW5zOiBhIGxpc3Qgb2Ygc3RyaW5nIGNvbHVtbiBuYW1lcyB0byBiZSBhcHBsaWVkIHRvIHRoZQogICAgICAgICAgICAgcHJpbWFyeSBrZXkgY29uc3RyYWludC4KICAgICAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgICAgICBxdW90aW5nIG9mIHRoZSBzY2hlbWEgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdXNlCiAgICAgICAgICAgICB0aGUgU1FMQWxjaGVteSBjb25zdHJ1Y3QKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KCiAgICAgICAgICAgIE5yTAAAACkFcj0AAABy4QAAAHKFAAAAcvoAAAByhgAAAHMFAAAAICAgICByPgAAANoSY3JlYXRlX3ByaW1hcnlfa2V5eh1PcGVyYXRpb25zLmNyZWF0ZV9wcmltYXJ5X2tleT0EAABzCgAAAIAA8FQBAA0QiENyQAAAAHIqAAAAciAAAABjAgAAAAAAAAAAAAAAAQAAAA8AAAHzBgAAAJcAZAFTACkCYUkNAABJc3N1ZSBhICJjcmVhdGUgdGFibGUiIGluc3RydWN0aW9uIHVzaW5nIHRoZSBjdXJyZW50IG1pZ3JhdGlvbgogICAgICAgICAgICBjb250ZXh0LgoKICAgICAgICAgICAgVGhpcyBkaXJlY3RpdmUgcmVjZWl2ZXMgYW4gYXJndW1lbnQgbGlzdCBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlCiAgICAgICAgICAgIHRyYWRpdGlvbmFsIDpjbGFzczpgc3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIGNvbnN0cnVjdCwgYnV0IHdpdGhvdXQgdGhlCiAgICAgICAgICAgIG1ldGFkYXRhOjoKCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IElOVEVHRVIsIFZBUkNIQVIsIE5WQVJDSEFSLCBDb2x1bW4KICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKCiAgICAgICAgICAgICAgICBvcC5jcmVhdGVfdGFibGUoCiAgICAgICAgICAgICAgICAgICAgImFjY291bnQiLAogICAgICAgICAgICAgICAgICAgIENvbHVtbigiaWQiLCBJTlRFR0VSLCBwcmltYXJ5X2tleT1UcnVlKSwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oIm5hbWUiLCBWQVJDSEFSKDUwKSwgbnVsbGFibGU9RmFsc2UpLAogICAgICAgICAgICAgICAgICAgIENvbHVtbigiZGVzY3JpcHRpb24iLCBOVkFSQ0hBUigyMDApKSwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oInRpbWVzdGFtcCIsIFRJTUVTVEFNUCwgc2VydmVyX2RlZmF1bHQ9ZnVuYy5ub3coKSksCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBOb3RlIHRoYXQgOm1ldGg6YC5jcmVhdGVfdGFibGVgIGFjY2VwdHMKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uYAogICAgICAgICAgICBjb25zdHJ1Y3RzIGRpcmVjdGx5IGZyb20gdGhlIFNRTEFsY2hlbXkgbGlicmFyeS4gIEluIHBhcnRpY3VsYXIsCiAgICAgICAgICAgIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGNyZWF0ZWQgb24gdGhlIGRhdGFiYXNlIHNpZGUgYXJlCiAgICAgICAgICAgIHNwZWNpZmllZCB1c2luZyB0aGUgYGBzZXJ2ZXJfZGVmYXVsdGBgIHBhcmFtZXRlciwgYW5kIG5vdAogICAgICAgICAgICBgYGRlZmF1bHRgYCB3aGljaCBvbmx5IHNwZWNpZmllcyBQeXRob24tc2lkZSBkZWZhdWx0czo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBDb2x1bW4sIFRJTUVTVEFNUCwgZnVuYwoKICAgICAgICAgICAgICAgICMgc3BlY2lmeSAiREVGQVVMVCBOT1ciIGFsb25nIHdpdGggdGhlICJ0aW1lc3RhbXAiIGNvbHVtbgogICAgICAgICAgICAgICAgb3AuY3JlYXRlX3RhYmxlKAogICAgICAgICAgICAgICAgICAgICJhY2NvdW50IiwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oImlkIiwgSU5URUdFUiwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJ0aW1lc3RhbXAiLCBUSU1FU1RBTVAsIHNlcnZlcl9kZWZhdWx0PWZ1bmMubm93KCkpLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGFsc28gcmV0dXJucyBhIG5ld2x5IGNyZWF0ZWQKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIG9iamVjdCwgY29ycmVzcG9uZGluZyB0byB0aGUgdGFibGUKICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiBnaXZlbiwgd2hpY2ggaXMgc3VpdGFibGUgZm9yCiAgICAgICAgICAgIGltbWVkaWF0ZSBTUUwgb3BlcmF0aW9ucywgaW4gcGFydGljdWxhcgogICAgICAgICAgICA6bWV0aDpgLk9wZXJhdGlvbnMuYnVsa19pbnNlcnRgOjoKCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IElOVEVHRVIsIFZBUkNIQVIsIE5WQVJDSEFSLCBDb2x1bW4KICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKCiAgICAgICAgICAgICAgICBhY2NvdW50X3RhYmxlID0gb3AuY3JlYXRlX3RhYmxlKAogICAgICAgICAgICAgICAgICAgICJhY2NvdW50IiwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oImlkIiwgSU5URUdFUiwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJuYW1lIiwgVkFSQ0hBUig1MCksIG51bGxhYmxlPUZhbHNlKSwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oImRlc2NyaXB0aW9uIiwgTlZBUkNIQVIoMjAwKSksCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJ0aW1lc3RhbXAiLCBUSU1FU1RBTVAsIHNlcnZlcl9kZWZhdWx0PWZ1bmMubm93KCkpLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgIG9wLmJ1bGtfaW5zZXJ0KAogICAgICAgICAgICAgICAgICAgIGFjY291bnRfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAiQTEiLCAiZGVzY3JpcHRpb24iOiAiYWNjb3VudCAxIn0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJBMiIsICJkZXNjcmlwdGlvbiI6ICJhY2NvdW50IDIifSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IE5hbWUgb2YgdGhlIHRhYmxlCiAgICAgICAgICAgIDpwYXJhbSBcKmNvbHVtbnM6IGNvbGxlY3Rpb24gb2YgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uYAogICAgICAgICAgICAgb2JqZWN0cyB3aXRoaW4KICAgICAgICAgICAgIHRoZSB0YWJsZSwgYXMgd2VsbCBhcyBvcHRpb25hbCA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5Db25zdHJhaW50YAogICAgICAgICAgICAgb2JqZWN0cwogICAgICAgICAgICAgYW5kIDpjbGFzczpgfi5zcWxhbGNoZW15LnNjaGVtYS5JbmRleGAgb2JqZWN0cy4KICAgICAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgICAgICBxdW90aW5nIG9mIHRoZSBzY2hlbWEgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdXNlCiAgICAgICAgICAgICB0aGUgU1FMQWxjaGVteSBjb25zdHJ1Y3QKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KICAgICAgICAgICAgOnBhcmFtIFwqKmt3OiBPdGhlciBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nCiAgICAgICAgICAgICA6Y2xhc3M6YHNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QgY3JlYXRlZCBmb3IgdGhlIGNvbW1hbmQuCgogICAgICAgICAgICA6cmV0dXJuOiB0aGUgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIG9iamVjdCBjb3JyZXNwb25kaW5nCiAgICAgICAgICAgICB0byB0aGUgcGFyYW1ldGVycyBnaXZlbi4KCiAgICAgICAgICAgIE5yTAAAACkEcj0AAAByhQAAAHL6AAAActYAAABzBAAAACAgICByPgAAANoMY3JlYXRlX3RhYmxlehdPcGVyYXRpb25zLmNyZWF0ZV90YWJsZWkEAABzCgAAAIAA8GACAA0QiENyQAAAACkCctAAAAByhgAAAGMDAAAAAAAAAAIAAAABAAAAAwAAAfMGAAAAlwBkAVMAKQJhogIAAEVtaXQgYSBDT01NRU5UIE9OIG9wZXJhdGlvbiB0byBzZXQgdGhlIGNvbW1lbnQgZm9yIGEgdGFibGUuCgogICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuNgoKICAgICAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IHN0cmluZyBuYW1lIG9mIHRoZSB0YXJnZXQgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBjb21tZW50OiBzdHJpbmcgdmFsdWUgb2YgdGhlIGNvbW1lbnQgYmVpbmcgcmVnaXN0ZXJlZCBhZ2FpbnN0CiAgICAgICAgICAgICB0aGUgc3BlY2lmaWVkIHRhYmxlLgogICAgICAgICAgICA6cGFyYW0gZXhpc3RpbmdfY29tbWVudDogU3RyaW5nIHZhbHVlIG9mIGEgY29tbWVudAogICAgICAgICAgICAgYWxyZWFkeSByZWdpc3RlcmVkIG9uIHRoZSBzcGVjaWZpZWQgdGFibGUsIHVzZWQgd2l0aGluIGF1dG9nZW5lcmF0ZQogICAgICAgICAgICAgc28gdGhhdCB0aGUgb3BlcmF0aW9uIGlzIHJldmVyc2libGUsIGJ1dCBub3QgcmVxdWlyZWQgZm9yIGRpcmVjdAogICAgICAgICAgICAgdXNlLgoKICAgICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICAgICAgOm1ldGg6YC5PcGVyYXRpb25zLmRyb3BfdGFibGVfY29tbWVudGAKCiAgICAgICAgICAgICAgICA6cGFyYW1yZWY6YC5PcGVyYXRpb25zLmFsdGVyX2NvbHVtbi5jb21tZW50YAoKICAgICAgICAgICAgTnJMAAAAKQVyPQAAAHKFAAAAcsoAAABy0AAAAHKGAAAAcwUAAAAgICAgIHI+AAAA2hRjcmVhdGVfdGFibGVfY29tbWVudHofT3BlcmF0aW9ucy5jcmVhdGVfdGFibGVfY29tbWVudLsEAABzCQAAAIAA8DYADRCIQ3JAAAAA+g1TZXF1ZW5jZVtzdHJdYwQAAAAAAAAAAQAAAAEAAAALAAAB8wYAAACXAGQBUwApAmFuBwAASXNzdWUgYSAiY3JlYXRlIHVuaXF1ZSBjb25zdHJhaW50IiBpbnN0cnVjdGlvbiB1c2luZyB0aGUKICAgICAgICAgICAgY3VycmVudCBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgICAgIGUuZy46OgoKICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKICAgICAgICAgICAgICAgIG9wLmNyZWF0ZV91bmlxdWVfY29uc3RyYWludCgidXFfdXNlcl9uYW1lIiwgInVzZXIiLCBbIm5hbWUiXSkKCiAgICAgICAgICAgIFRoaXMgaW50ZXJuYWxseSBnZW5lcmF0ZXMgYSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAgb2JqZWN0CiAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBjb2x1bW5zLCB0aGVuIGdlbmVyYXRlcyBhIG5ldwogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5VbmlxdWVDb25zdHJhaW50YAogICAgICAgICAgICBvYmplY3Qgd2hpY2ggaXQgdGhlbiBhc3NvY2lhdGVzIHdpdGggdGhlCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYC4KICAgICAgICAgICAgQW55IGV2ZW50IGxpc3RlbmVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpb24gd2lsbCBiZSBmaXJlZAogICAgICAgICAgICBvZmYgbm9ybWFsbHkuICAgVGhlIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkFkZENvbnN0cmFpbnRgCiAgICAgICAgICAgIGNvbnN0cnVjdCBpcyB1bHRpbWF0ZWx5IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEFMVEVSIHN0YXRlbWVudC4KCiAgICAgICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9mIHRoZSB1bmlxdWUgY29uc3RyYWludC4gIFRoZSBuYW1lIGlzIG5lY2Vzc2FyeQogICAgICAgICAgICAgc28gdGhhdCBhbiBBTFRFUiBzdGF0ZW1lbnQgY2FuIGJlIGVtaXR0ZWQuICBGb3Igc2V0dXBzIHRoYXQKICAgICAgICAgICAgIHVzZSBhbiBhdXRvbWF0ZWQgbmFtaW5nIHNjaGVtZSBzdWNoIGFzIHRoYXQgZGVzY3JpYmVkIGF0CiAgICAgICAgICAgICA6cmVmOmBzcWxhOmNvbnN0cmFpbnRfbmFtaW5nX2NvbnZlbnRpb25zYCwKICAgICAgICAgICAgIGBgbmFtZWBgIGhlcmUgY2FuIGJlIGBgTm9uZWBgLCBhcyB0aGUgZXZlbnQgbGlzdGVuZXIgd2lsbAogICAgICAgICAgICAgYXBwbHkgdGhlIG5hbWUgdG8gdGhlIGNvbnN0cmFpbnQgb2JqZWN0IHdoZW4gaXQgaXMgYXNzb2NpYXRlZAogICAgICAgICAgICAgd2l0aCB0aGUgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBTdHJpbmcgbmFtZSBvZiB0aGUgc291cmNlIHRhYmxlLgogICAgICAgICAgICA6cGFyYW0gY29sdW1uczogYSBsaXN0IG9mIHN0cmluZyBjb2x1bW4gbmFtZXMgaW4gdGhlCiAgICAgICAgICAgICBzb3VyY2UgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBkZWZlcnJhYmxlOiBvcHRpb25hbCBib29sLiBJZiBzZXQsIGVtaXQgREVGRVJSQUJMRSBvcgogICAgICAgICAgICAgTk9UIERFRkVSUkFCTEUgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gaW5pdGlhbGx5OiBvcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBJTklUSUFMTFkgPHZhbHVlPgogICAgICAgICAgICAgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4gIFRvIGNvbnRyb2wKICAgICAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgICAgIHRoZSBTUUxBbGNoZW15IGNvbnN0cnVjdAogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgLgoKICAgICAgICAgICAgTnJMAAAAKQZyPQAAAHLhAAAAcoUAAABy+gAAAHKGAAAActYAAABzBgAAACAgICAgIHI+AAAA2hhjcmVhdGVfdW5pcXVlX2NvbnN0cmFpbnR6I09wZXJhdGlvbnMuY3JlYXRlX3VuaXF1ZV9jb25zdHJhaW502AQAAHMKAAAAgADwXAEADRCIQ3JAAAAAYwMAAAAAAAAAAQAAAAEAAAALAAAB8wYAAACXAGQBUwApAmH1BgAASXNzdWUgYSAiZHJvcCBjb2x1bW4iIGluc3RydWN0aW9uIHVzaW5nIHRoZSBjdXJyZW50CiAgICAgICAgICAgIG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgZS5nLjo6CgogICAgICAgICAgICAgICAgZHJvcF9jb2x1bW4oIm9yZ2FuaXphdGlvbiIsICJhY2NvdW50X2lkIikKCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBuYW1lIG9mIHRhYmxlCiAgICAgICAgICAgIDpwYXJhbSBjb2x1bW5fbmFtZTogbmFtZSBvZiBjb2x1bW4KICAgICAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgICAgICBxdW90aW5nIG9mIHRoZSBzY2hlbWEgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdXNlCiAgICAgICAgICAgICB0aGUgU1FMQWxjaGVteSBjb25zdHJ1Y3QKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KICAgICAgICAgICAgOnBhcmFtIG1zc3FsX2Ryb3BfY2hlY2s6IE9wdGlvbmFsIGJvb2xlYW4uICBXaGVuIGBgVHJ1ZWBgLCBvbgogICAgICAgICAgICAgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIgb25seSwgZmlyc3QKICAgICAgICAgICAgIGRyb3AgdGhlIENIRUNLIGNvbnN0cmFpbnQgb24gdGhlIGNvbHVtbiB1c2luZyBhCiAgICAgICAgICAgICBTUUwtc2NyaXB0LWNvbXBhdGlibGUKICAgICAgICAgICAgIGJsb2NrIHRoYXQgc2VsZWN0cyBpbnRvIGEgQHZhcmlhYmxlIGZyb20gc3lzLmNoZWNrX2NvbnN0cmFpbnRzLAogICAgICAgICAgICAgdGhlbiBleGVjJ3MgYSBzZXBhcmF0ZSBEUk9QIENPTlNUUkFJTlQgZm9yIHRoYXQgY29uc3RyYWludC4KICAgICAgICAgICAgOnBhcmFtIG1zc3FsX2Ryb3BfZGVmYXVsdDogT3B0aW9uYWwgYm9vbGVhbi4gIFdoZW4gYGBUcnVlYGAsIG9uCiAgICAgICAgICAgICBNaWNyb3NvZnQgU1FMIFNlcnZlciBvbmx5LCBmaXJzdAogICAgICAgICAgICAgZHJvcCB0aGUgREVGQVVMVCBjb25zdHJhaW50IG9uIHRoZSBjb2x1bW4gdXNpbmcgYQogICAgICAgICAgICAgU1FMLXNjcmlwdC1jb21wYXRpYmxlCiAgICAgICAgICAgICBibG9jayB0aGF0IHNlbGVjdHMgaW50byBhIEB2YXJpYWJsZSBmcm9tIHN5cy5kZWZhdWx0X2NvbnN0cmFpbnRzLAogICAgICAgICAgICAgdGhlbiBleGVjJ3MgYSBzZXBhcmF0ZSBEUk9QIENPTlNUUkFJTlQgZm9yIHRoYXQgZGVmYXVsdC4KICAgICAgICAgICAgOnBhcmFtIG1zc3FsX2Ryb3BfZm9yZWlnbl9rZXk6IE9wdGlvbmFsIGJvb2xlYW4uICBXaGVuIGBgVHJ1ZWBgLCBvbgogICAgICAgICAgICAgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIgb25seSwgZmlyc3QKICAgICAgICAgICAgIGRyb3AgYSBzaW5nbGUgRk9SRUlHTiBLRVkgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHVzaW5nIGEKICAgICAgICAgICAgIFNRTC1zY3JpcHQtY29tcGF0aWJsZQogICAgICAgICAgICAgYmxvY2sgdGhhdCBzZWxlY3RzIGludG8gYSBAdmFyaWFibGUgZnJvbQogICAgICAgICAgICAgc3lzLmZvcmVpZ25fa2V5cy9zeXMuZm9yZWlnbl9rZXlfY29sdW1ucywKICAgICAgICAgICAgIHRoZW4gZXhlYydzIGEgc2VwYXJhdGUgRFJPUCBDT05TVFJBSU5UIGZvciB0aGF0IGRlZmF1bHQuICBPbmx5CiAgICAgICAgICAgICB3b3JrcyBpZiB0aGUgY29sdW1uIGhhcyBleGFjdGx5IG9uZSBGSyBjb25zdHJhaW50IHdoaWNoIHJlZmVycyB0bwogICAgICAgICAgICAgaXQsIGF0IHRoZSBtb21lbnQuCgogICAgICAgICAgICBOckwAAAApBXI9AAAAcoUAAABy0QAAAHKGAAAActYAAABzBQAAACAgICAgcj4AAADaC2Ryb3BfY29sdW1uehZPcGVyYXRpb25zLmRyb3BfY29sdW1uCAUAAHMKAAAAgADwWAEADRCIQ3JAAAAAYwQAAAAA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dGFibGVfbmFtZTogc3RyaW5nIG5hbWUgb2YgdGhlIHRhcmdldCB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIGV4aXN0aW5nX2NvbW1lbnQ6IEFuIG9wdGlvbmFsIHN0cmluZyB2YWx1ZSBvZiBhIGNvbW1lbnQgYWxyZWFkeQogICAgICAgICAgICAgcmVnaXN0ZXJlZCBvbiB0aGUgc3BlY2lmaWVkIHRhYmxlLgoKICAgICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICAgICAgOm1ldGg6YC5PcGVyYXRpb25zLmNyZWF0ZV90YWJsZV9jb21tZW50YAoKICAgICAgICAgICAgICAgIDpwYXJhbXJlZjpgLk9wZXJhdGlvbnMuYWx0ZXJfY29sdW1uLmNvbW1lbnRgCgogICAgICAgICAgICBOckwAAAApBHI9AAAAcoUAAABy0AAAAHKGAAAAcwQAAAAgICAgcj4AAADaEmRyb3BfdGFibGVfY29tbWVudHodT3BlcmF0aW9ucy5kcm9wX3RhYmxlX2NvbW1lbnSBBQAAcwkAAACAAPAuAA0QiENyQAAAAKkB2hFleGVjdXRpb25fb3B0aW9uc9oHc3FsdGV4dPoeVW5pb25bc3RyLCBUZXh0Q2xhdXNlLCBVcGRhdGVdchMBAAD6GE9wdGlvbmFsW2RpY3Rbc3RyLCBBbnldXWMCAAAAAAAAAAEAAAABAAAAAwAAAfMGAAAAlwBkAVMAKQJh6Q4AAEV4ZWN1dGUgdGhlIGdpdmVuIFNRTCB1c2luZyB0aGUgY3VycmVudCBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgICAgIFRoZSBnaXZlbiBTUUwgY2FuIGJlIGEgcGxhaW4gc3RyaW5nLCBlLmcuOjoKCiAgICAgICAgICAgICAgICBvcC5leGVjdXRlKCJJTlNFUlQgSU5UTyB0YWJsZSAoZm9vKSBWQUxVRVMgKCdzb21lIHZhbHVlJykiKQoKICAgICAgICAgICAgT3IgaXQgY2FuIGJlIGFueSBraW5kIG9mIENvcmUgU1FMIEV4cHJlc3Npb24gY29uc3RydWN0LCBzdWNoIGFzCiAgICAgICAgICAgIGJlbG93IHdoZXJlIHdlIHVzZSBhbiB1cGRhdGUgY29uc3RydWN0OjoKCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkuc3FsIGltcG9ydCB0YWJsZSwgY29sdW1uCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IFN0cmluZwogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgICAgIGFjY291bnQgPSB0YWJsZSgiYWNjb3VudCIsIGNvbHVtbigibmFtZSIsIFN0cmluZykpCiAgICAgICAgICAgICAgICBvcC5leGVjdXRlKAogICAgICAgICAgICAgICAgICAgIGFjY291bnQudXBkYXRlKCkKICAgICAgICAgICAgICAgICAgICAud2hlcmUoYWNjb3VudC5jLm5hbWUgPT0gb3AuaW5saW5lX2xpdGVyYWwoImFjY291bnQgMSIpKQogICAgICAgICAgICAgICAgICAgIC52YWx1ZXMoeyJuYW1lIjogb3AuaW5saW5lX2xpdGVyYWwoImFjY291bnQgMiIpfSkKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIEFib3ZlLCB3ZSBtYWRlIHVzZSBvZiB0aGUgU1FMQWxjaGVteQogICAgICAgICAgICA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi50YWJsZWAgYW5kCiAgICAgICAgICAgIDpmdW5jOmBzcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLmNvbHVtbmAgY29uc3RydWN0cyB0byBtYWtlIGEgYnJpZWYsCiAgICAgICAgICAgIGFkLWhvYyB0YWJsZSBjb25zdHJ1Y3QganVzdCBmb3Igb3VyIFVQREFURSBzdGF0ZW1lbnQuICBBIGZ1bGwKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIGNvbnN0cnVjdCBvZiBjb3Vyc2Ugd29ya3MgcGVyZmVjdGx5CiAgICAgICAgICAgIGZpbmUgYXMgd2VsbCwgdGhvdWdoIG5vdGUgaXQncyBhIHJlY29tbWVuZGVkIHByYWN0aWNlIHRvIGF0IGxlYXN0CiAgICAgICAgICAgIGVuc3VyZSB0aGUgZGVmaW5pdGlvbiBvZiBhIHRhYmxlIGlzIHNlbGYtY29udGFpbmVkIHdpdGhpbiB0aGUgbWlncmF0aW9uCiAgICAgICAgICAgIHNjcmlwdCwgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgZnJvbSBhIG1vZHVsZSB0aGF0IG1heSBicmVhayBjb21wYXRpYmlsaXR5CiAgICAgICAgICAgIHdpdGggb2xkZXIgbWlncmF0aW9ucy4KCiAgICAgICAgICAgIEluIGEgU1FMIHNjcmlwdCBjb250ZXh0LCB0aGUgc3RhdGVtZW50IGlzIGVtaXR0ZWQgZGlyZWN0bHkgdG8gdGhlCiAgICAgICAgICAgIG91dHB1dCBzdHJlYW0uICAgVGhlcmUgaXMgKm5vKiByZXR1cm4gcmVzdWx0LCBob3dldmVyLCBhcyB0aGlzCiAgICAgICAgICAgIGZ1bmN0aW9uIGlzIG9yaWVudGVkIHRvd2FyZHMgZ2VuZXJhdGluZyBhIGNoYW5nZSBzY3JpcHQKICAgICAgICAgICAgdGhhdCBjYW4gcnVuIGluICJvZmZsaW5lIiBtb2RlLiAgICAgQWRkaXRpb25hbGx5LCBwYXJhbWV0ZXJpemVkCiAgICAgICAgICAgIHN0YXRlbWVudHMgYXJlIGRpc2NvdXJhZ2VkIGhlcmUsIGFzIHRoZXkgKndpbGwgbm90IHdvcmsqIGluIG9mZmxpbmUKICAgICAgICAgICAgbW9kZS4gIEFib3ZlLCB3ZSB1c2UgOm1ldGg6YC5pbmxpbmVfbGl0ZXJhbGAgd2hlcmUgcGFyYW1ldGVycyBhcmUKICAgICAgICAgICAgdG8gYmUgdXNlZC4KCiAgICAgICAgICAgIEZvciBmdWxsIGludGVyYWN0aW9uIHdpdGggYSBjb25uZWN0ZWQgZGF0YWJhc2Ugd2hlcmUgcGFyYW1ldGVycyBjYW4KICAgICAgICAgICAgYWxzbyBiZSB1c2VkIG5vcm1hbGx5LCB1c2UgdGhlICJiaW5kIiBhdmFpbGFibGUgZnJvbSB0aGUgY29udGV4dDo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBvcC5nZXRfYmluZCgpCgogICAgICAgICAgICAgICAgY29ubmVjdGlvbi5leGVjdXRlKAogICAgICAgICAgICAgICAgICAgIGFjY291bnQudXBkYXRlKCkKICAgICAgICAgICAgICAgICAgICAud2hlcmUoYWNjb3VudC5jLm5hbWUgPT0gImFjY291bnQgMSIpCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlcyh7Im5hbWUiOiAiYWNjb3VudCAyIn0pCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBBZGRpdGlvbmFsbHksIHdoZW4gcGFzc2luZyB0aGUgc3RhdGVtZW50IGFzIGEgcGxhaW4gc3RyaW5nLCBpdCBpcyBmaXJzdAogICAgICAgICAgICBjb2VyY2VlZCBpbnRvIGEgOmZ1bmM6YHNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24udGV4dGAgY29uc3RydWN0CiAgICAgICAgICAgIGJlZm9yZSBiZWluZyBwYXNzZWQgYWxvbmcuICBJbiB0aGUgbGVzcyBsaWtlbHkgY2FzZSB0aGF0IHRoZQogICAgICAgICAgICBsaXRlcmFsIFNRTCBzdHJpbmcgY29udGFpbnMgYSBjb2xvbiwgaXQgbXVzdCBiZSBlc2NhcGVkIHdpdGggYQogICAgICAgICAgICBiYWNrc2xhc2gsIGFzOjoKCiAgICAgICAgICAgICAgIG9wLmV4ZWN1dGUociJJTlNFUlQgSU5UTyB0YWJsZSAoZm9vKSBWQUxVRVMgKCdcOmNvbG9uX3ZhbHVlJykiKQoKCiAgICAgICAgICAgIDpwYXJhbSBzcWx0ZXh0OiBBbnkgbGVnYWwgU1FMQWxjaGVteSBleHByZXNzaW9uLCBpbmNsdWRpbmc6CgogICAgICAgICAgICAqIGEgc3RyaW5nCiAgICAgICAgICAgICogYSA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi50ZXh0YCBjb25zdHJ1Y3QuCiAgICAgICAgICAgICogYSA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi5pbnNlcnRgIGNvbnN0cnVjdC4KICAgICAgICAgICAgKiBhIDpmdW5jOmBzcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLnVwZGF0ZWAsCiAgICAgICAgICAgICAgOmZ1bmM6YHNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24uaW5zZXJ0YCwKICAgICAgICAgICAgICBvciA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi5kZWxldGVgICBjb25zdHJ1Y3QuCiAgICAgICAgICAgICogQW55ICJleGVjdXRhYmxlIiBkZXNjcmliZWQgaW4gU1FMQWxjaGVteSBDb3JlIGRvY3VtZW50YXRpb24sCiAgICAgICAgICAgICAgbm90aW5nIHRoYXQgbm8gcmVzdWx0IHNldCBpcyByZXR1cm5lZC4KCiAgICAgICAgICAgIC4uIG5vdGU6OiAgd2hlbiBwYXNzaW5nIGEgcGxhaW4gc3RyaW5nLCB0aGUgc3RhdGVtZW50IGlzIGNvZXJjZWQgaW50bwogICAgICAgICAgICAgICBhIDpmdW5jOmBzcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLnRleHRgIGNvbnN0cnVjdC4gVGhpcyBjb25zdHJ1Y3QKICAgICAgICAgICAgICAgY29uc2lkZXJzIHN5bWJvbHMgd2l0aCBjb2xvbnMsIGUuZy4gYGA6Zm9vYGAgdG8gYmUgYm91bmQgcGFyYW1ldGVycy4KICAgICAgICAgICAgICAgVG8gYXZvaWQgdGhpcywgZW5zdXJlIHRoYXQgY29sb24gc3ltYm9scyBhcmUgZXNjYXBlZCwgZS5nLgogICAgICAgICAgICAgICBgYFw6Zm9vYGAuCgogICAgICAgICAgICA6cGFyYW0gZXhlY3V0aW9uX29wdGlvbnM6IE9wdGlvbmFsIGRpY3Rpb25hcnkgb2YKICAgICAgICAgICAgIGV4ZWN1dGlvbiBvcHRpb25zLCB3aWxsIGJlIHBhc3NlZCB0bwogICAgICAgICAgICAgOm1ldGg6YHNxbGFsY2hlbXkuZW5naW5lLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnNgLgogICAgICAgICAgICBOckwAAACpA3I9AAAAchQBAAByEwEAAHMDAAAAICAgcj4AAADaB2V4ZWN1dGV6Ek9wZXJhdGlvbnMuZXhlY3V0ZZoFAABzCgAAAIAA8G4CAA0QiENyQAAAANoOb2xkX3RhYmxl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ZWlnbiBrZXkiIGluc3RydWN0aW9uIHVzaW5nIHRoZQogICAgICAgICAgICBjdXJyZW50IGJhdGNoIG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgVGhlIGJhdGNoIGZvcm0gb2YgdGhpcyBjYWxsIG9taXRzIHRoZSBgYHNvdXJjZWBgIGFuZCBgYHNvdXJjZV9zY2hlbWFgYAogICAgICAgICAgICBhcmd1bWVudHMgZnJvbSB0aGUgY2FsbC4KCiAgICAgICAgICAgIGUuZy46OgoKICAgICAgICAgICAgICAgIHdpdGggYmF0Y2hfYWx0ZXJfdGFibGUoImFkZHJlc3MiKSBhcyBiYXRjaF9vcDoKICAgICAgICAgICAgICAgICAgICBiYXRjaF9vcC5jcmVhdGVfZm9yZWlnbl9rZXkoCiAgICAgICAgICAgICAgICAgICAgICAgICJma191c2VyX2FkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAidXNlciIsCiAgICAgICAgICAgICAgICAgICAgICAgIFsidXNlcl9pZCJdLAogICAgICAgICAgICAgICAgICAgICAgICBbImlkIl0sCiAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICAgICAgOm1ldGg6YC5PcGVyYXRpb25zLmNyZWF0ZV9mb3JlaWduX2tleWAKCiAgICAgICAgICAgIE5yTAAAACkMcj0AAABy4QAAAHLxAAAAcvIAAABy9AAAAHLvAAAAcukAAABy6gAAAHLrAAAAcuwAAABy7QAAAHL1AAAAcwwAAAAgICAgICAgICAgICByPgAAAHL3AAAAeiJCYXRjaE9wZXJhdGlvbnMuY3JlYXRlX2ZvcmVpZ25fa2V5igYAAHMKAAAAgADwSAEADRCIQ3JAAAAAcvkAAABy+gAAAGMDAAAAAAAAAAAAAAABAAAACwAAAfMGAAAAlwBkAVMAKQJ6s0lzc3VlIGEgImNyZWF0ZSBpbmRleCIgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlCiAgICAgICAgICAgIGN1cnJlbnQgYmF0Y2ggbWlncmF0aW9uIGNvbnRleHQuCgogICAgICAgICAgICAuLiBz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ACLQACLQACLQACLgACXQACXQACXQACXQACXQACXYAAmACYAJgAnYAA+AD4APgA/YABbQABbQABbQABbQABbQABbYABzQABzQABzQABzQABzQABzYABvQABvQABvQABvQABvQABvYABfQABfQABfQABfQABfQABfYABvQABvQABvQABvQABvQABvYABfQABfQABfQABfQABfQABfYABrQABrQABrQABrQABrQABrYABvQABvQABvQABvQABvQABvYABvQABvQABvQABvQABvQABvYABjQABjQABjQABjQABjQABjYABfQABfQABfQABfQABfQABfYACDQACDQACDQACDQACDQACDYABrQABrQABrQABrQABrQABrYABjQABjQABjQABjQABjQABjgACjQACjQACjQACjQACjQACjgABPQABPQABPQABPQABPQABPYABfQABfQABfQABfQABfQABfYABPQABPQABPQABPQABPQABPYAB7QAB7QAB7QAB7QAB7QAB7YADHQADHQADHQADHQADHQADHYAC/QAC/QAC/QAC/QAC/QAC/YADDQADDQADDQADDQADDQADDYADHQADHQADHQADHQADHQADHwBgAEEfAAEwE12AQe0AQe0AQe0AQe0AQe0AQe4AQg0AQg0AQg0AQg0AQg0AQg2AQs0AQs0AQs0AQs0AQs0AQs2AQ60AQ60AQ60AQ60AQ60AQ62AQ10AQ10AQ10AQ10AQ10AQ12AQ00AQ00AQ00AQ00AQ00AQ02AQw0AQw0AQw0AQw0AQw0AQw2AQx0AQx0AQx0AQx0AQx0AQx2AQs0AQs0AQs0AQs0AQs0AQs2AQu0AQu0AQu0AQu0AQu0AQu2AQu0AQu0AQu0AQu0AQu0AQu2AQw0AQw0AQw0AQw0AQw0AQw2AQr0AQr0AQr0AQr0AQr0AQr4AQq0AQq0AQq0AQq0AQq0AQq2AQl0AQl0AQl0AQl0AQl0AQl2AQh0AQh0AQh0AQh0AQh0AQh2AQ00AQ00AQ00AQ00AQ00AQ02AorgAfYBQyAV4hUgV2EXYAC8AZaBwFIAfAAWgcBSAHwAFoHAUgB8ABaBwFIAfAAWgcBSAGYFNQZLPEAWgcBSAH0AFoHAUgB8ABaBwFIAfB6Dm4PARDwAG4PARDwAG4PARDwAG4PARDwAG4PARDQESPxAG4PARD0AG4PARDwAG4PARDwZh9rBAEQ8ABrBAEQ8ABrBAEQ8ABrBAEQ8ABrBAEQ0BYo8QBrBAEQ9ABrBAEQ8ABrBAEQ8ABrBAEQ8ABrBAEQckAAAAA=
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 6
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
base.cpython-311.pyc
74.78 KB
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
batch.cpython-311.pyc
33.45 KB
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ops.cpython-311.pyc
107.91 KB
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
schemaobj.cpython-311.pyc
13.81 KB
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
toimpl.cpython-311.pyc
10.23 KB
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
516 B
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).