Ci8qIHBuZ2djY3JkLmMgLSBtaXhlZCBDL2Fzc2VtYmxlciB2ZXJzaW9uIG9mIHV0aWxpdGllcyB0byByZWFkIGEgUE5HIGZpbGUKICoKICogRm9yIEludGVsIHg4NiBDUFUgKFBlbnRpdW0tTU1YIG9yIGxhdGVyKSBhbmQgR05VIEMgY29tcGlsZXIuCiAqCiAqIExhc3QgY2hhbmdlZCBpbiBsaWJwbmcgMS4yLjE5IEp1bHkgMTUsIDIwMDcKICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAqIENvcHlyaWdodCAoYykgMTk5OCBJbnRlbCBDb3Jwb3JhdGlvbgogKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiwyMDA3IEdyZWcgUm9lbG9mcwogKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBHbGVubiBSYW5kZXJzLVBlaHJzb24KICoKICogQmFzZWQgb24gTVNWQyBjb2RlIGNvbnRyaWJ1dGVkIGJ5IE5pcmF2IENoaGF0cmFwYXRpLCBJbnRlbCBDb3JwLiwgMTk5OC4KICogSW50ZXJmYWNlIHRvIGxpYnBuZyBjb250cmlidXRlZCBieSBHaWxsZXMgVm9sbGFudCwgMTk5OS4KICogR05VIEMgcG9ydCBieSBHcmVnIFJvZWxvZnMsIDE5OTktMjAwMS4KICoKICogUmVmZXJlbmNlczoKICoKICogICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2RyZy9wZW50aXVtSUkvYXBwbm90ZXMvOTE2LzkxNi5odG0KICogICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2RyZy9wZW50aXVtSUkvYXBwbm90ZXMvOTIzLzkyMy5odG0KICogICAgICAgW0ludGVsJ3MgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb2YgdGhlIE1NWCB2cy4gbm9uLU1NWCBjb2RlOwogKiAgICAgICAgbW92ZWQvZGVsZXRlZCBhcyBvZiAyMDA2LCBidXQgdGV4dCBhbmQgc29tZSBncmFwaHMgc3RpbGwKICogICAgICAgIGF2YWlsYWJsZSB2aWEgV2F5QmFjayBNYWNoaW5lIGF0IGFyY2hpdmUub3JnXQogKgogKiAgICAgaHR0cDovL3d3dy5pYmlibGlvLm9yZy9nZmVyZy9sZHAvR0NDLUlubGluZS1Bc3NlbWJseS1IT1dUTy5odG1sCiAqICAgICBodHRwOi8vc2FtLnpveS5vcmcvYmxvZy8yMDA3LTA0LTEzLXNobGliLXdpdGgtbm9uLXBpYy1jb2RlLWhhdmUtaW5saW5lLWFzc2VtYmx5LWFuZC1waWMtbWl4LXdlbGwKICogICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9WYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwKICogICAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9GdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwKICogICAgIEFNRDY0IEFyY2hpdGVjdHVyZSBQcm9ncmFtbWVyJ3MgTWFudWFsLCB2b2x1bWVzIDEgYW5kIDUKICogICAgICAgW2h0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9Qcm9jZXNzb3JzL1RlY2huaWNhbFJlc291cmNlcy8wLCwzMF8xODJfNzM5XzcwNDQsMDAuaHRtbF0KICogICAgIEludGVsIDY0IGFuZCBJQS0zMiBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWxzCiAqICAgICAgIFtodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9wcm9kdWN0cy9wcm9jZXNzb3IvbWFudWFscy9dCiAqCiAqIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14XyooKSB3ZXJlIGNvbnZlcnRlZCBpbiBwbGFjZSB3aXRoIGludGVsMmdhcyAxLjMuMToKICoKICogICAgIGludGVsMmdhcyAtbWRJIHBuZ2djY3JkLmMucGFydGlhbGx5LW1zdmMgLW8gcG5nZ2NjcmQuYwogKgogKiBhbmQgdGhlbiBjbGVhbmVkIHVwIGJ5IGhhbmQuICBTZWUgaHR0cDovL2hlcm1lcy50ZXJtaW5hbC5hdC9pbnRlbDJnYXMvIC4KICoKICogTk9URTogIEEgc3VmZmljaWVudGx5IHJlY2VudCB2ZXJzaW9uIG9mIEdOVSBhcyAob3IgYXMuZXhlIHVuZGVyIERPUy9XaW5kb3dzKQogKiBpcyByZXF1aXJlZCB0byBhc3NlbWJsZSB0aGUgbmV3ZXIgYXNtIGluc3RydWN0aW9ucyBzdWNoIGFzIG1vdnEuICAoVmVyc2lvbgogKiAyLjUuMmwuMTUgaXMgZGVmaW5pdGVseSB0b28gb2xkLikgIFNlZSBmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2JpbnV0aWxzLyAuCiAqLwoKLyoKICogUE9SVElORyBOT1RFUyBBTkQgQ0hBTkdFTE9HIChtb3N0bHkgYnkgR3JlZyBSb2Vsb2ZzKQogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KICoKICogMTk5OTEwMDY6CiAqICAtIGZpeGVkIHNpZ24gZXJyb3IgaW4gcG9zdC1NTVggY2xlYW51cCBjb2RlICgxNi0gJiAzMi1iaXQgY2FzZXMpCiAqCiAqIDE5OTkxMDA3OgogKiAgLSBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgKHBvc3NpYmxlIG9yIGRlZmluaXRlKToKICogICAgIHggW0RPTkVdIHdyaXRlIE1NWCBjb2RlIGZvciA2NC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gOCkgW25vdCB0ZXN0ZWRdCiAqICAgICAtIHdyaXRlIE1NWCBjb2RlIGZvciA0OC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gNikKICogICAgIC0gZmlndXJlIG91dCB3aGF0J3MgdXAgd2l0aCAyNC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gMyk6CiAqICAgICAgICB3aHkgc3VidHJhY3QgOCBmcm9tIHdpZHRoX21teCBpbiB0aGUgcGFzcyA0LzUgY2FzZT8KICogICAgICAgIChvbmx5IHdpZHRoX21teCBjYXNlKSAobmVhciBsaW5lIDIzMzUpCiAqICAgICB4IFtET05FXSByZXBsYWNlIHBpeGVsX2J5dGVzIHdpdGhpbiBlYWNoIGJsb2NrIHdpdGggdGhlIHRydWUKICogICAgICAgIGNvbnN0YW50IHZhbHVlIChvciBhcmUgY29tcGlsZXJzIHNtYXJ0IGVub3VnaCB0byBkbyB0aGF0PykKICogICAgIC0gcmV3cml0ZSBhbGwgTU1YIGludGVybGFjaW5nIGNvZGUgc28gaXQncyBhbGlnbmVkIHdpdGgKICogICAgICAgIHRoZSAqYmVnaW5uaW5nKiBvZiB0aGUgcm93IGJ1ZmZlciwgbm90IHRoZSBlbmQuICBUaGlzCiAqICAgICAgICB3b3VsZCBub3Qgb25seSBhbGxvdyBvbmUgdG8gZWxpbWluYXRlIGhhbGYgb2YgdGhlIG1lbW9yeQogKiAgICAgICAgd3JpdGVzIGZvciBvZGQgcGFzc2VzICh0aGF0IGlzLCBwYXNzID09IG9kZCksIGl0IG1heSBhbHNvCiAqICAgICAgICBlbGltaW5hdGUgc29tZSB1bmFsaWduZWQtZGF0YS1hY2Nlc3MgZXhjZXB0aW9ucyAoYXNzdW1pbmcKICogICAgICAgIHRoZXJlJ3MgYSBwZW5hbHR5IGZvciBub3QgYWxpZ25pbmcgNjQtYml0IGFjY2Vzc2VzIG9uCiAqICAgICAgICA2NC1iaXQgYm91bmRhcmllcykuICBUaGUgb25seSBjYXRjaCBpcyB0aGF0IHRoZSAibGVmdG92ZXIiCiAqICAgICAgICBwaXhlbChzKSBhdCB0aGUgZW5kIG9mIHRoZSByb3cgd291bGQgaGF2ZSB0byBiZSBzYXZlZCwKICogICAgICAgIGJ1dCB0aGVyZSBhcmUgZW5vdWdoIHVudXNlZCBNTVggcmVnaXN0ZXJzIGluIGV2ZXJ5IGNhc2UsCiAqICAgICAgICBzbyB0aGlzIGlzIG5vdCBhIHByb2JsZW0uICBBIGZ1cnRoZXIgYmVuZWZpdCBpcyB0aGF0IHRoZQogKiAgICAgICAgcG9zdC1NTVggY2xlYW51cCBjb2RlIChDIGNvZGUpIGluIGF0IGxlYXN0IHNvbWUgb2YgdGhlCiAqICAgICAgICBjYXNlcyBjb3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYXNzZW1ibGVyIGJsb2NrLgogKiAgeCBbRE9ORV0gdGhlICJ2MyB2MiB2MSB2MCB2NyB2NiB2NSB2NCIgY29tbWVudHMgYXJlIGNvbmZ1c2luZywKICogICAgIGluY29uc2lzdGVudCwgYW5kIGRvbid0IG1hdGNoIHRoZSBNTVggUHJvZ3JhbW1lcidzIFJlZmVyZW5jZQogKiAgICAgTWFudWFsIGNvbnZlbnRpb25zIGFueXdheS4gIFRoZXkgc2hvdWxkIGJlIGNoYW5nZWQgdG8KICogICAgICJiNyBiNiBiNSBiNCBiMyBiMiBiMSBiMCwiIHdoZXJlIGIwIGluZGljYXRlcyB0aGUgYnl0ZSB0aGF0CiAqICAgICB3YXMgbG93ZXN0IGluIG1lbW9yeSAoaS5lLiwgY29ycmVzcG9uZGluZyB0byBhIGxlZnQgcGl4ZWwpCiAqICAgICBhbmQgYjcgaXMgdGhlIGJ5dGUgdGhhdCB3YXMgaGlnaGVzdCAoaS5lLiwgYSByaWdodCBwaXhlbCkuCiAqCiAqIDE5OTkxMDE2OgogKiAgLSBCcmVubmFuJ3MgR3VpZGUgbm90d2l0aHN0YW5kaW5nLCBnY2MgdW5kZXIgTGludXggZG9lcyAqbm90KgogKiAgICAgd2FudCBnbG9iYWxzIHByZWZpeGVkIGJ5IHVuZGVyc2NvcmVzIHdoZW4gcmVmZXJlbmNpbmcgdGhlbS0tCiAqICAgICBpLmUuLCBpZiB0aGUgdmFyaWFibGUgaXMgY29uc3Q0LCB0aGVuIHJlZmVyIHRvIGl0IGFzIGNvbnN0NCwKICogICAgIG5vdCBfY29uc3Q0LiAgVGhpcyBzZWVtcyB0byBiZSBhIGRqZ3BwLXNwZWNpZmljIHJlcXVpcmVtZW50LgogKiAgICAgQWxzbywgc3VjaCB2YXJpYWJsZXMgYXBwYXJlbnRseSAqbXVzdCogYmUgZGVjbGFyZWQgb3V0c2lkZQogKiAgICAgb2YgZnVuY3Rpb25zOyBuZWl0aGVyIHN0YXRpYyBub3IgYXV0b21hdGljIHZhcmlhYmxlcyB3b3JrIGlmCiAqICAgICBkZWZpbmVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgYSBzaW5nbGUgZnVuY3Rpb24sIGJ1dCBib3RoCiAqICAgICBzdGF0aWMgYW5kIHRydWx5IGdsb2JhbCAobXVsdGktbW9kdWxlKSB2YXJpYWJsZXMgd29yayBmaW5lLgogKgogKiAxOTk5MTAxNzoKICogIC0gcmVwbGFjZWQgcGl4ZWxfYnl0ZXMgaW4gZWFjaCBwbmdfbWVtY3B5KCkgY2FsbCB3aXRoIGNvbnN0YW50IHZhbHVlIGZvcgogKiAgICAgaW5saW5pbmcgKHBuZ19kb19yZWFkX2ludGVybGFjZSgpICJub24tTU1YL21vZGlmaWVkIEMgY29kZSIgYmxvY2spCiAqCiAqIDE5OTkxMDIzOgogKiAgLSBmaXhlZCBwbmdfY29tYmluZV9yb3coKSBub24tTU1YIHJlcGxpY2F0aW9uIGJ1ZyAob2RkIHBhc3NlcyBvbmx5PykKICogIC0gc3dpdGNoZWQgZnJvbSBzdHJpbmctY29uY2F0ZW5hdGlvbi13aXRoLW1hY3JvcyB0byBjbGVhbmVyIG1ldGhvZCBvZgogKiAgICAgcmVuYW1pbmcgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgZGpncHAtLWkuZS4sIGFsd2F5cyB1c2UgcHJlZml4ZXMgaW4KICogICAgIGlubGluZWQgYXNzZW1ibGVyIGNvZGUgKD09IHN0cmluZ3MpIGFuZCBjb25kaXRpb25hbGx5IHJlbmFtZSB0aGUKICogICAgIHZhcmlhYmxlcywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiAgSGVuY2UgX2NvbnN0NCwgX21hc2s4XzAsIGV0Yy4KICoKICogMTk5OTEwMjQ6CiAqICAtIGZpeGVkIG1teHN1cHBvcnQoKS9wbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBmaXJzdC1yb3cgYnVnCiAqICAgICBUaGlzIG9uZSB3YXMgc2V2ZXJlbHkgd2VpcmQ6ICBldmVuIHRob3VnaCBtbXhzdXBwb3J0KCkgZG9lc24ndCB0b3VjaAogKiAgICAgZWJ4ICh3aGVyZSAicm93IiBwb2ludGVyIHdhcyBzdG9yZWQpLCBpdCBuZXZlcnRoZWxlc3MgbWFuYWdlZCB0byB6ZXJvCiAqICAgICB0aGUgcmVnaXN0ZXIgKGV2ZW4gaW4gc3RhdGljL25vbi1mUElDIGNvZGUtLXNlZSBiZWxvdyksIHdoaWNoIGluIHR1cm4KICogICAgIGNhdXNlZCBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSB0byByZXR1cm4gcHJlbWF0dXJlbHkgb24gdGhlIGZpcnN0IHJvdyBvZgogKiAgICAgaW50ZXJsYWNlZCBpbWFnZXMgKGkuZS4sIHdpdGhvdXQgZXhwYW5kaW5nIHRoZSBpbnRlcmxhY2VkIHBpeGVscykuCiAqICAgICBJbnNwZWN0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibHkgY29kZSBkaWRuJ3QgdHVybiB1cCBhbnkgY2x1ZXMsCiAqICAgICBhbHRob3VnaCBpdCBkaWQgcG9pbnQgYXQgYSBtaW5vciBvcHRpbWl6YXRpb24gKGkuZS4sIGdldCByaWQgb2YKICogICAgIG1teF9zdXBwb3J0ZWRfbG9jYWwgdmFyaWFibGUgYW5kIGp1c3QgdXNlIGVheCkuICBQb3NzaWJseSB0aGUgQ1BVSUQKICogICAgIGluc3RydWN0aW9uIGlzIG1vcmUgZGVzdHJ1Y3RpdmUgdGhhbiBpdCBsb29rcz8gIChOb3QgeWV0IGNoZWNrZWQuKQogKiAgLSAiaW5mbyBnY2MiIHdhcyBuZXh0IHRvIHVzZWxlc3MsIHNvIGNvbXBhcmVkIGZQSUMgYW5kIG5vbi1mUElDIGFzc2VtYmx5CiAqICAgICBsaXN0aW5ncy4uLiAgQXBwYXJlbnRseSByZWdpc3RlciBzcGlsbGFnZSBoYXMgdG8gZG8gd2l0aCBlYngsIHNpbmNlCiAqICAgICBpdCdzIHVzZWQgdG8gaW5kZXggdGhlIGdsb2JhbCBvZmZzZXQgdGFibGUuICBDb21tZW50aW5nIGl0IG91dCBvZiB0aGUKICogICAgIGlucHV0LXJlZyBsaXN0cyBpbiBwbmdfY29tYmluZV9yb3coKSBlbGltaW5hdGVkIGNvbXBpbGVyIGJhcmZhZ2UsIHNvCiAqICAgICBpZmRlZidkIHdpdGggX19QSUNfXyBtYWNybzogIGlmIGRlZmluZWQsIHVzZSBhIGdsb2JhbCBmb3IgdW5tYXNrCiAqCiAqIDE5OTkxMTA3OgogKiAgLSB2ZXJpZmllZCBDUFVJRCBjbG9iYmVyYWdlOiAgMTItY2hhciBzdHJpbmcgY29uc3RhbnQgKCJHZW51aW5lSW50ZWwiLAogKiAgICAgIkF1dGhlbnRpY0FNRCIsIGV0Yy4pIHBsYWNlZCBpbiBlYng6ZWN4OmVkeC4gIFN0aWxsIG5lZWQgdG8gcG9saXNoLgogKgogKiAxOTk5MTEyMDoKICogIC0gbWFkZSAiZGlmZiIgdmFyaWFibGUgKG5vdyAiX2RpZiIpIGdsb2JhbCB0byBzaW1wbGlmeSBjb252ZXJzaW9uIG9mCiAqICAgICBmaWx0ZXJpbmcgcm91dGluZXMgKHJ1bm5pbmcgb3V0IG9mIHJlZ3MsIHNpZ2gpLiAgImRpZmYiIGlzIHN0aWxsIHVzZWQKICogICAgIGluIGludGVybGFjaW5nIHJvdXRpbmVzLCBob3dldmVyLgogKiAgLSBmaXhlZCB1cCBib3RoIHZlcnNpb25zIG9mIG1teHN1cHBvcnQoKSAoT1JJR19USEFUX1VTRURfVE9fQ0xPQkJFUl9FQlgKICogICAgIG1hY3JvIGRldGVybWluZXMgd2hpY2ggaXMgdXNlZCk7IG9yaWdpbmFsIG5vdCB5ZXQgdGVzdGVkLgogKgogKiAyMDAwMDIxMzoKICogIC0gd2hlbiBjb21waWxpbmcgd2l0aCBnY2MsIGJlIHN1cmUgdG8gdXNlICAtZm9taXQtZnJhbWUtcG9pbnRlcgogKgogKiAyMDAwMDMxOToKICogIC0gZml4ZWQgYSByZWdpc3Rlci1uYW1lIHR5cG8gaW4gcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCksIGRlZmF1bHQgKE1NWCkgY2FzZSwKICogICAgIHBhc3MgPT0gNCBvciA1LCB0aGF0IGNhdXNlZCB2aXNpYmxlIGNvcnJ1cHRpb24gb2YgaW50ZXJsYWNlZCBpbWFnZXMKICoKICogMjAwMDA2MjM6CiAqICAtIFZhcmlvdXMgcHJvYmxlbXMgd2VyZSByZXBvcnRlZCB3aXRoIGdjYyAyLjk1LjIgaW4gdGhlIEN5Z3dpbiBlbnZpcm9ubWVudCwKICogICAgIG1hbnkgb2YgdGhlIGZvcm0gImZvcmJpZGRlbiByZWdpc3RlciAwIChheCkgd2FzIHNwaWxsZWQgZm9yIGNsYXNzIEFSRUcuIgogKiAgICAgVGhpcyBpcyBleHBsYWluZWQgYXQgaHR0cDovL2djYy5nbnUub3JnL2ZvbV9zZXJ2L2NhY2hlLzIzLmh0bWwsIGFuZAogKiAgICAgQ2h1Y2sgV2lsc29uIHN1cHBsaWVkIGEgcGF0Y2ggaW52b2x2aW5nIGR1bW15IG91dHB1dCByZWdpc3RlcnMuICBTZWUKICogICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvYnVncy8/ZnVuYz1kZXRhaWxidWcmYnVnX2lkPTEwODc0MSZncm91cF9pZD01NjI0CiAqICAgICBmb3IgdGhlIG9yaWdpbmFsIChhbm9ueW1vdXMpIFNvdXJjZUZvcmdlIGJ1ZyByZXBvcnQuCiAqCiAqIDIwMDAwNzA2OgogKiAgLSBDaHVjayBXaWxzb24gcGFzc2VkIGFsb25nIHRoZXNlIHJlbWFpbmluZyBnY2MgMi45NS4yIGVycm9yczoKICogICAgICAgcG5nZ2NjcmQuYzogSW4gZnVuY3Rpb24gYHBuZ19jb21iaW5lX3Jvdyc6CiAqICAgICAgIHBuZ2djY3JkLmM6NTI1OiBtb3JlIHRoYW4gMTAgb3BlcmFuZHMgaW4gYGFzbScKICogICAgICAgcG5nZ2NjcmQuYzo2Njk6IG1vcmUgdGhhbiAxMCBvcGVyYW5kcyBpbiBgYXNtJwogKiAgICAgICBwbmdnY2NyZC5jOjgyODogbW9yZSB0aGFuIDEwIG9wZXJhbmRzIGluIGBhc20nCiAqICAgICAgIHBuZ2djY3JkLmM6OTk0OiBtb3JlIHRoYW4gMTAgb3BlcmFuZHMgaW4gYGFzbScKICogICAgICAgcG5nZ2NjcmQuYzoxMTc3OiBtb3JlIHRoYW4gMTAgb3BlcmFuZHMgaW4gYGFzbScKICogICAgIFRoZXkgYXJlIGFsbCB0aGUgc2FtZSBwcm9ibGVtIGFuZCBjYW4gYmUgd29ya2VkIGFyb3VuZCBieSB1c2luZyB0aGUKICogICAgIGdsb2JhbCBfdW5tYXNrIHZhcmlhYmxlIHVuY29uZGl0aW9uYWxseSwgbm90IGp1c3QgaW4gdGhlIC1mUElDIGNhc2UuCiAqICAgICBSZXBvcnRlZGx5IGVhcmxpZXIgdmVyc2lvbnMgb2YgZ2NjIGFsc28gaGF2ZSB0aGUgcHJvYmxlbSB3aXRoIG1vcmUgdGhhbgogKiAgICAgMTAgb3BlcmFuZHM7IHRoZXkganVzdCBkb24ndCByZXBvcnQgaXQuICBNdWNoIHN0cmFuZ2VuZXNzIGVuc3VlcywgZXRjLgogKgogKiAyMDAwMDcyOToKICogIC0gZW5hYmxlZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cCgpIChzaG9ydGVzdCByZW1haW5pbmcgdW5jb252ZXJ0ZWQKICogICAgIE1NWCByb3V0aW5lKTsgYmVnYW4gY29udmVydGluZyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIoKQogKiAgLSB0byBmaW5pc2ggcmVtYWluaW5nIHNlY3Rpb25zOgogKiAgICAgLSBjbGVhbiB1cCBpbmRlbnRhdGlvbiBhbmQgY29tbWVudHMKICogICAgIC0gcHJlbG9hZCBsb2NhbCB2YXJpYWJsZXMKICogICAgIC0gYWRkIG91dHB1dCBhbmQgaW5wdXQgcmVncyAob3JkZXIgb2YgZm9ybWVyIGRldGVybWluZXMgbnVtZXJpY2FsCiAqICAgICAgICBtYXBwaW5nIG9mIGxhdHRlcikKICogICAgIC0gYXZvaWQgYWxsIHVzYWdlIG9mIGVieCAoaW5jbHVkaW5nIGJ4LCBiaCwgYmwpIHJlZ2lzdGVyIFsyMDAwMDgyM10KICogICAgIC0gcmVtb3ZlICIkIiBmcm9tIGFkZHJlc3Npbmcgb2YgU2hpZnQgYW5kIE1hc2sgdmFyaWFibGVzIFsyMDAwMDgyM10KICoKICogMjAwMDA3MzE6CiAqICAtIGdsb2JhbCB1bmlvbiB2YXJzIGNhdXNpbmcgc2VnZmF1bHRzIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpPwogKgogKiAyMDAwMDgyMjoKICogIC0gQVJHSCwgc3R1cGlkIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIHNlZ2ZhdWx0IG9ubHkgaGFwcGVucyB3aXRoCiAqICAgICBzaGFyZWQtbGlicmFyeSAoLWZQSUMpIHZlcnNpb24hICBDb2RlIHdvcmtzIGp1c3QgZmluZSBhcyBwYXJ0IG9mIHN0YXRpYwogKiAgICAgbGlicmFyeS4gIERhbW4gZGFtbiBkYW1uIGRhbW4gZGFtbiwgc2hvdWxkIGhhdmUgdGVzdGVkIHRoYXQgc29vbmVyLgogKiAgICAgZWJ4IGlzIGdldHRpbmcgY2xvYmJlcmVkIGFnYWluIChleHBsaWNpdGx5IHRoaXMgdGltZSk7IG5lZWQgdG8gc2F2ZSBpdAogKiAgICAgb24gc3RhY2sgb3IgcmV3cml0ZSBhc20gY29kZSB0byBhdm9pZCB1c2luZyBpdCBhbHRvZ2V0aGVyLiAgQmxhcmdoIQogKgogKiAyMDAwMDgyMzoKICogIC0gZmlyc3Qgc2VjdGlvbiB3YXMgdHJpY2tpZXN0OyBhbGwgcmVtYWluaW5nIHNlY3Rpb25zIGhhdmUgZWJ4IC0+IGVkeCBub3cuCiAqICAgICAoLWZQSUMgd29ya3MgYWdhaW4uKSAgQWxzbyBhZGRlZCBtaXNzaW5nIHVuZGVyc2NvcmVzIHRvIHZhcmlvdXMgU2hpZnQqCiAqICAgICBhbmQgKk1hc2sqIGdsb2JhbHMgYW5kIGdvdCByaWQgb2YgbGVhZGluZyAiJCIgc2lnbnMuCiAqCiAqIDIwMDAwODI2OgogKiAgLSBhZGRlZCB2aXN1YWwgc2VwYXJhdG9ycyB0byBoZWxwIG5hdmlnYXRlIG1pY3Jvc2NvcGljIHByaW50ZWQgY29waWVzCiAqICAgICAoaHR0cDovL3BvYm94LmNvbS9+bmV3dC9jb2RlL2dwci1sYXRlc3QuemlwLCBtb2RlIDEwKTsgc3RhcnRlZCB3b3JraW5nCiAqICAgICBvbiBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKQogKgogKiAyMDAwMDgyODoKICogIC0gZmluaXNoZWQgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCk6ICBvbmx5IFBhZXRoIGxlZnQhICg5MzAgbGluZXMuLi4pCiAqICAgICBXaGF0IHRoZSBoZWxsLCBkaWQgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSwgdG9vLiAgQ29tbWVudHMgbm90CiAqICAgICBjbGVhbmVkIHVwL3Nob3J0ZW5lZCBpbiBlaXRoZXIgcm91dGluZSwgYnV0IGZ1bmN0aW9uYWxpdHkgaXMgY29tcGxldGUKICogICAgIGFuZCBzZWVtcyB0byBiZSB3b3JraW5nIGZpbmUuCiAqCiAqIDIwMDAwODI5OgogKiAgLSBhaGhoLCBmaWd1cmVkIG91dCBsYXN0KD8pIGJpdCBvZiBnY2MvZ2FzIGFzbS1mdTogIGlmIHJlZ2lzdGVyIGlzIGxpc3RlZAogKiAgICAgYXMgYW4gaW5wdXQgcmVnICh3aXRoIGR1bW15IG91dHB1dCB2YXJpYWJsZXMsIGV0Yy4pLCB0aGVuIGl0ICpjYW5ub3QqCiAqICAgICBhbHNvIGFwcGVhciBpbiB0aGUgY2xvYmJlciBsaXN0IG9yIGdjYyAyLjk1LjIgd2lsbCBiYXJmLiAgVGhlIHNvbHV0aW9uCiAqICAgICBpcyBzaW1wbGUgZW5vdWdoLi4uCiAqCiAqIDIwMDAwOTE0OgogKiAgLSBidWcgaW4gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCk6ICAxNi1iaXQgZ3JheXNjYWxlIG5vdCBoYW5kbGVkCiAqICAgICBjb3JyZWN0bHkgKGJ1dCA0OC1iaXQgUkdCIGp1c3QgZmluZSkKICoKICogMjAwMDA5MTY6CiAqICAtIGZpeGVkIGJ1ZyBpbiBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSwgYnBwID09IDIgY2FzZTsgdGhyZWUgZXJyb3JzOgogKiAgICAgLSAiX1NoaWZ0QnBwLnVzZSA9IDI0OyIgICAgICBzaG91bGQgaGF2ZSBiZWVuICAgIl9TaGlmdEJwcC51c2UgPSAxNjsiCiAqICAgICAtICJfU2hpZnRSZW0udXNlID0gNDA7IiAgICAgIHNob3VsZCBoYXZlIGJlZW4gICAiX1NoaWZ0UmVtLnVzZSA9IDQ4OyIKICogICAgIC0gInBzbGxxIF9TaGlmdFJlbSwgJSVtbTIiICAgc2hvdWxkIGhhdmUgYmVlbiAgICJwc3JscSBfU2hpZnRSZW0sICUlbW0yIgogKgogKiAyMDAxMDEwMToKICogIC0gYWRkZWQgbmV3IHBuZ19pbml0X21teF9mbGFncygpIGZ1bmN0aW9uIChoZXJlIG9ubHkgYmVjYXVzZSBpdCBuZWVkcyB0bwogKiAgICAgY2FsbCBtbXhzdXBwb3J0KCksIHdoaWNoIHNob3VsZCBwcm9iYWJseSBiZWNvbWUgZ2xvYmFsIHBuZ19tbXhzdXBwb3J0KCkpOwogKiAgICAgbW9kaWZpZWQgb3RoZXIgTU1YIHJvdXRpbmVzIHRvIHJ1biBjb25kaXRpb25hbGx5IChwbmdfcHRyLT5hc21fZmxhZ3MpCiAqCiAqIDIwMDEwMTAzOgogKiAgLSByZW5hbWVkIG1teHN1cHBvcnQoKSB0byBwbmdfbW14X3N1cHBvcnQoKSwgd2l0aCBhdXRvLXNldCBvZiBtbXhfc3VwcG9ydGVkLAogKiAgICAgYW5kIG1hZGUgaXQgcHVibGljOyBtb3ZlZCBwbmdfaW5pdF9tbXhfZmxhZ3MoKSB0byBwbmcuYyBhcyBpbnRlcm5hbCBmdW5jCiAqCiAqIDIwMDEwMTA0OgogKiAgLSByZW1vdmVkIGRlcGVuZGVuY3kgb24gcG5nX3JlYWRfZmlsdGVyX3Jvd19jKCkgKEMgY29kZSBhbHJlYWR5IGR1cGxpY2F0ZWQKICogICAgIHdpdGhpbiBNTVggdmVyc2lvbiBvZiBwbmdfcmVhZF9maWx0ZXJfcm93KCkpIHNvIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8KICogICAgIGNvbXBpbGUgaXQgaW50byBwbmdydXRpbC5vCiAqCiAqIDIwMDEwMzEwOgogKiAgLSBmaXhlZCBidWZmZXItb3ZlcnJ1biBidWcgaW4gcG5nX2NvbWJpbmVfcm93KCkgQyBjb2RlIChub24tTU1YKQogKgogKiAyMDAxMDgwODoKICogIC0gYWRkZWQgUE5HX1RIUkVBRF9VTlNBRkVfT0sgYXJvdW5kIGNvZGUgdXNpbmcgZ2xvYmFsIHZhcmlhYmxlcyBbR1JQXQogKgogKiAyMDAxMTEyNDoKICogIC0gZml4ZWQgbWlzc2luZyBzYXZlIG9mIEVmbGFnIGluIHBuZ19tbXhfc3VwcG9ydCgpIFtNYXhpbSBTb2JvbGV2XQogKgogKiAyMDAyMDMwNDoKICogIC0gZWxpbWluYXRlZCBpbmNvcnJlY3QgdXNlIG9mIHdpZHRoX21teCBpbiBwaXhlbF9ieXRlcyA9PSA4IGNhc2UKICoKICogMjAwMjA0MDc6CiAqICAtIGZpeGVkIGluc3VmZmljaWVudCBwcmVzZXJ2YXRpb24gb2YgZWJ4IHJlZ2lzdGVyIFtTYW1pIEZhcmluXQogKgogKiAyMDA0MDcyNDoKICogIC0gbW9yZSB0aW5rZXJpbmcgd2l0aCBjbG9iYmVyIGxpc3QgYXQgbGluZXMgNDUyOSBhbmQgNTAzMyB0byBnZXQgaXQgdG8KICogICAgIGNvbXBpbGUgd2l0aCBnY2MgMy40IFtHUlBdCiAqCiAqIDIwMDQwODA5OgogKiAgLSBhZGRlZCAicmltIiBkZWZpbml0aW9ucyBmb3IgQ09OU1Q0IGFuZCBDT05TVDYgW0dSUF0KICoKICogMjAwNjAzMDM6CiAqICAtIGFkZGVkICJPUzIiIHRvIGxpc3Qgb2Ygc3lzdGVtcyB0aGF0IGRvbid0IG5lZWQgbGVhZGluZyB1bmRlcnNjb3JlcyBbR1JQXQogKgogKiAyMDA2MDMyMDoKICogIC0gbWFkZSBQSUMtY29tcGxpYW50IFtDaHJpc3RpYW4gQWljaGluZ2VyXQogKgogKiAyMDA3MDMxMzoKICogIC0gZmluYWxseSBhcHBsaWVkIEdpdXNlcHBlIEdoaWLyJ3MgNjQtYml0IHBhdGNoIG9mIDIwMDYwODAzIChjb21wbGV0ZWx5CiAqICAgICBvdmVybG9va2VkIER5bGFuIEFsZXggU2ltb24ncyBzaW1pbGFyIHBhdGNoIG9mIDIwMDYwNDE0LCBvb3BzLi4uKQogKgogKiAyMDA3MDUyNDoKICogIC0gZml4ZWQgbGluayBmYWlsdXJlIGNhdXNlZCBieSBhc20tb25seSB2YXJpYWJsZXMgYmVpbmcgb3B0aW1pemVkIG91dAogKiAgICAgKGlkZW50aWZpZWQgYnkgRGltaXRyaSBvZiBUcm9sbHRlY2gpIHdpdGggX19hdHRyaWJ1dGVfXygodXNlZCkpLCB3aGljaAogKiAgICAgYWxzbyBnZXRzIHJpZCBvZiB3YXJuaW5ncyA9PiBudWtlZCB1Z2x5IHBuZ19zcXVlbGNoX3dhcm5pbmdzKCkgaGFjawogKiAgLSBkcm9wcGVkIHJlZHVuZGFudCBpZmRlZgogKiAgLSBtb3ZlZCBwbmdfbW14X3N1cHBvcnQoKSBiYWNrIHVwIHdoZXJlIG9yaWdpbmFsbHkgaW50ZW5kZWQgKGFzIGluCiAqICAgICBwbmd2Y3JkLmMpLCB1c2luZyBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpIGluIGV4dHJhIHByb3RvdHlwZQogKgogKiAyMDA3MDUyNzoKICogIC0gcmV2aXNlZCBwbmdfY29tYmluZV9yb3coKSB0byByZXVzZSBtYXNrIGluIGxpZXUgb2YgZXh0ZXJuYWwgX3VubWFzawogKiAgLSBtb3ZlZCAzMi1iaXQgKFJHQkEpIGNhc2UgdG8gdG9wIG9mIHBuZ19jb21iaW5lX3JvdygpOiAgbW9zdCBjb21tb24KICogIC0ganVzdCBhYm91dCByZWFkeSB0byBnaXZlIHVwIG9uIHg4Ni02NCAtZlBJQyBtb2RlOyBjYW4ndCBldmVuIGFjY2VzcyAxNgogKiAgICAgX21hc2sqXyogY29uc3RhbnRzIHdpdGhvdXQgdHJpZ2dlcmluZyBsaW5rIGVycm9yIG9uIHNoYXJlZCBsaWJyYXJ5OgogKiAgICAgICAvdXNyL2Jpbi9sZDogcG5nZ2NjcmQucGljLm86IHJlbG9jYXRpb24gUl9YODZfNjRfMzJTIGFnYWluc3QgYGEgbG9jYWwKICogICAgICAgICBzeW1ib2wnIGNhbiBub3QgYmUgdXNlZCB3aGVuIG1ha2luZyBhIHNoYXJlZCBvYmplY3Q7IHJlY29tcGlsZSB3aXRoCiAqICAgICAgICAgLWZQSUMKICogICAgICAgcG5nZ2NjcmQucGljLm86IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEJhZCB2YWx1ZQogKiAgICAgICAoIm9iamR1bXAgLXggcG5nZ2NjcmQucGljLm8gfCBncmVwIHJvZGF0YSIgdG8gdmVyaWZ5KQogKiAgICAgW21pZ2h0IGJlIGFibGUgdG8gd29yayBhcm91bmQgYnkgZG9pbmcgd2l0aGluIGFzc2VtYmx5IGNvZGUgd2hhdGV2ZXIKICogICAgIC1mUElDIGRvZXMsIGJ1dCBnaXZlbiBwcm9ibGVtcyB0byBkYXRlLCBzZWVtcyBsaWtlIGxvbmcgc2hvdC4uLl0KICogICAgIFtyZWxldmFudCBpZmRlZnM6ICBfX3g4Nl82NF9fICYmIF9fUElDX18gPT4gQyBjb2RlIG9ubHldCiAqICAtIGNoYW5nZWQgI2lmIDAgdG8gI2lmZGVmIFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCBpbiBjYXNlIGdjYyBldmVyCiAqICAgICBzdXBwb3J0cyBNTVggcmVncyAoJW1tMCwgZXRjLikgaW4gY2xvYmJlciBsaXN0IChub3Qgc3VwcG9ydGVkIGJ5IGdjYwogKiAgICAgMi43LjIuMywgMi45MS42NiAoZWdjcyAxLjEuMiksIDMueCwgb3IgNC4xLjIpCiAqCiAqIDIwMDcwNjAzOgogKiAgLSByZXZpc2VkIHBuZ19jb21iaW5lX3JvdygpIHRvIHVzZSBAR09UUENSRUwoJSVyaXApIGFkZHJlc3Npbmcgb24gX2M2NAogKiAgICAgc3RydWN0IG9mIF9tYXNrKl8qIGNvbnN0YW50cyBmb3IgeDg2LTY0IC1mUElDOyBzZWUgc2FtLnpveS5vcmcgbGluawogKiAgICAgYWJvdmUgZm9yIGRldGFpbHMKICogIC0gbW92ZWQgX2NvbnN0NCBhbmQgX2NvbnN0NiBpbnRvIF9jNjQgc3RydWN0LCByZW5hbWVkIHRvIF9hbWFzazVfM18wIGFuZAogKiAgICAgX2FtYXNrN18xXzAsIHJlc3BlY3RpdmVseQogKiAgLSBjYW4ndCBmaWd1cmUgb3V0IGhvdyB0byB1c2UgX2M2NC5fbWFzaypfKiB2YXJzIHdpdGhpbiBhc20gY29kZSwgc28gc3RpbGwKICogICAgIG5lZWQgc2luZ2xlIHZhcmlhYmxlcyBmb3Igbm9uLXg4Ni02NC8tZlBJQyBoYWxmIDotKAogKiAgLSByZXBsYWNlZCB2YXJpb3VzIF9fUElDX18gaWZkZWZzIHdpdGggKl9HT1RfZWJ4IG1hY3JvcwogKiAgLSBtb3ZlZCBfTEJDYXJyeU1hc2sgYW5kIF9IQkNsZWFyTWFzayBpbnRvIF9jNjQgc3RydWN0CiAqICAtIGNvbmRpdGlvbmFsbHkgcmVwbGFjZWQgX3AqdGVtcCB2YXJpYWJsZXMgd2l0aCAlcjExZC0lcjEzZCAodmlhIHAqX1RFTVAKICogICAgIGFuZCBDTE9CQkVSX3IxKmQgbWFjcm9zKQogKgogKiAyMDA3MDYwNDoKICogIC0gcmVwbGFjZWQgYWxsIF9BY3RpdmVNYXNrIGFuZCBfQWN0aXZlTWFza0VuZCB3aXRoIG5ldyBfYW1hc2sqXypfKiBjb25zdHMKICogICAgIChfYW1hc2sgbmFtaW5nIGNvbnZlbnRpb246ICBudW1iZXJzIG9mIDAwLWJ5dGVzLCBmZi1ieXRlcywgMDAtYnl0ZXMpCiAqICAgIC0gX0FjdGl2ZU1hc2sgICAgIC8vICgxMCkgLy8gYXZnL3BhZXRoL3N1YjsgcmVhZC1vbmx5OyBjb25zdHM7IG1vdnEvcGFuZAogKiAgICAgICAweDAwMDAwMDAwMDBmZmZmZmZMTCAoYnBwIDMsIGF2ZykgICAgICBfYW1hc2s1XzNfMAogKiAgICAgICAweGZmZmZmZmZmZmZmZmZmZmZMTCAoYnBwIDQsIDYsIGF2ZykgICBfYW1hc2swXzhfMAogKiAgICAgICAweDAwMDAwMDAwMDAwMGZmZmZMTCAoYnBwIDIsIGF2ZykgICAgICBfYW1hc2s2XzJfMAogKiAgICAgICAweDAwMDAwMDAwMDBmZmZmZmZMTCAoYnBwIDMsIHBhZXRoKSAgICBfYW1hc2s1XzNfMAogKiAgICAgICAweDAwMDAwMDAwZmZmZmZmZmZMTCAoYnBwIDYsIHBhZXRoKSAgICBfYW1hc2s0XzRfMAogKiAgICAgICAweDAwMDAwMDAwZmZmZmZmZmZMTCAoYnBwIDQsIHBhZXRoKSAgICBfYW1hc2s0XzRfMAogKiAgICAgICAweDAwMDAwMDAwZmZmZmZmZmZMTCAoYnBwIDgsIHBhZXRoKSAgICBfYW1hc2s0XzRfMAogKiAgICAgICAweDAwMDBmZmZmZmYwMDAwMDBMTCAoYnBwIDMsIHN1YikgICAgICBfYW1hc2syXzNfMwogKiAgICAgICAweDAwMDAwMDAwZmZmZjAwMDBMTCAoYnBwIDIsIHN1YikgICAgICBfYW1hc2s0XzJfMgogKiAgICAtIF9BY3RpdmVNYXNrRW5kICAvLyAoMSkgIC8vIHBhZXRoIG9ubHk7IHJlYWQtb25seTsgY29uc3Q7IHBhbmQKICogICAgICAgMHhmZmZmMDAwMDAwMDAwMDAwTEwgKGJwcCAzLCBwYWV0aCkgICAgX2FtYXNrMF8yXzYKICogIC0gY2hhbmdlZCBhbGwgIiNpZiBkZWZpbmVkKF9feDg2XzY0X18pIC8vIGxhdGVyIC8vICYmIGRlZmluZWQoX19QSUNfXykiCiAqICAgICBsaW5lcyB0byAiI2lmZGVmIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIiBmb3IgZWFzaWVyL3NhZmVyIHRlc3RpbmcKICoKICogMjAwNzA2MDU6CiAqICAtIG1lcmdlZCBQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCwgbm9uLVBOR194ODZfNjRfVVNFX0dPVFBDUkVMIGNvZGUgdmlhCiAqICAgICAqTUFTSyogYW5kIExPQUQvUkVTVE9SRSBtYWNyb3MKICoKICogMjAwNzA2MDc6CiAqICAtIHJlcGxhY2VkIGFsbCBjb25zdGFudCBpbnN0YW5jZXMgb2YgX1NoaWZ0QnBwLCBfU2hpZnRSZW0gd2l0aCBpbW1lZGlhdGVzCiAqICAgICAoc3RpbGwgaGF2ZSB0d28gc2hhcmVkIGNhc2VzIGluIGF2Zywgc3ViIHJvdXRpbmVzKQogKgogKiAyMDA3MDYwOToKICogIC0gcmVwbGFjZWQgcmVtYWluaW5nIGluc3RhbmNlcyBvZiBfU2hpZnRCcHAsIF9TaGlmdFJlbSB3aXRoIGltbWVkaWF0ZXMKICogICAgIChzcGxpdCBzdWIgYW5kIGF2ZyA0LzYtYnBwIGNhc2VzIGludG8gc2VwYXJhdGUgYmxvY2tzKQogKiAgLSBmaXhlZCBwYWV0aCBidWcgZHVlIHRvIGNsb2JiZXJlZCByMTEvcjEyL3IxMyByZWdzCiAqCiAqIDIwMDcwNjEwOgogKiAgLSBtYWRlIGdsb2JhbCAiX2RpZiIgdmFyaWFibGUgKGF2Zy9wYWV0aC9zdWIgcm91dGluZXMpIGxvY2FsIGFnYWluIChub3cKICogICAgICJkaWZmIi0tc2VlIDE5OTkxMTIwIGVudHJ5IGFib3ZlKSwgdXNpbmcgcmVnaXN0ZXIgY29uc3RyYWludHMKICogIC0gbm90ZSB0aGF0ICVlYnAgaW4gY2xvYmJlciBsaXN0IGRvZXNuJ3QgYWN0dWFsbHkgd29yaywgYXQgbGVhc3QgZm9yIDMyLWJpdAogKiAgICAgdmVyc2lvbiBhbmQgZ2NjIDQuMS4yOyBtdXN0IHNhdmUgYW5kIHJlc3RvcmUgbWFudWFsbHkuICAoU2VlbXMgdG8gd29yawogKiAgICAgT0sgZm9yIDY0LWJpdCB2ZXJzaW9uIGFuZCBnY2MgMy40LjMsIGJ1dCBnY2MgbWF5IG5vdCBiZSB1c2luZyBlYnAvcmJwCiAqICAgICBpbiB0aGF0IGNhc2UuKQogKiAgLSBzdGFydGVkIHJlcGxhY2luZyBkaXJlY3QgX01NWExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzCiAqCiAqIDIwMDcwNjEyOgogKiAgLSBjb250aW51ZWQgcmVwbGFjaW5nIGRpcmVjdCBfTU1YTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKICoKICogMjAwNzA2MTM6CiAqICAtIGZpbmlzaGVkIHJlcGxhY2luZyBkaXJlY3QgX01NWExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzOwogKiAgICAgc3dpdGNoZWQgdG8gbG9jYWwgdmFyaWFibGUgKGFuZCByZW5hbWVkIGJhY2sgdG8gTU1YTGVuZ3RoKQogKgogKiAyMDA3MDYxNDoKICogIC0gZml4ZWQgc3ViIGJwcCA9IDEgYnVnCiAqICAtIHN0YXJ0ZWQgcmVwbGFjaW5nIGRpcmVjdCBfRnVsbExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzCiAqCiAqIDIwMDcwNjE1OgogKiAgLSBmaXhlZCA2NC1iaXQgcGFldGggYnBwIDMgY3Jhc2ggYnVnIChtaXNwbGFjZWQgTE9BRF9HT1RfcmJwKQogKiAgLSBmaXhlZCA2NC1iaXQgcGFldGggYnBwIDEvMiBhbmQgY2xlYW51cC1ibG9jayBjcmFzaCBidWdzIChtaXNwbGFjZWQKICogICAgIFJFU1RPUkVfcjExX3IxMl9yMTMpCiAqICAtIHNsaWdodGx5IG9wdGltaXplZCBhdmcvcGFldGggY2xlYW51cCBibG9ja3MgYW5kIHBhZXRoIGJwcCAxLzIgYmxvY2sKICogICAgIChzYXZlL3Jlc3RvcmUgZWJ4IG9ubHkgaWYgbmVlZGVkKQogKiAgLSBjb250aW51ZWQgcmVwbGFjaW5nIGRpcmVjdCBfRnVsbExlbmd0aCBhY2Nlc3NlcyB3aXRoIHJlZ2lzdGVyIGNvbnN0cmFpbnRzCiAqCiAqIDIwMDcwNjE2OgogKiAgLSBmaW5pc2hlZCByZXBsYWNpbmcgZGlyZWN0IF9GdWxsTGVuZ3RoIGFjY2Vzc2VzIHdpdGggcmVnaXN0ZXIgY29uc3RyYWludHMKICogICAgICgqdWdseSogY29uZGl0aW9uYWwgY2xvYmJlci1zZXBhcmF0b3IgbWFjcm9zIGZvciBhdmcgYW5kIHBhZXRoLCBzaWdoKQogKgogKiAyMDA3MDYxODoKICogIC0gZml4ZWQgbWlzcGxhY2VkIFBOR19USFJFQURfVU5TQUZFX09LIGVuZGlmICh3YXMgbWlzc2luZyBMT0FEX0dPVF9yYnAvCiAqICAgICBSRVNUT1JFX3JicCBpbiAzMi1iaXQgdGhyZWFkLXNhZmUgY2FzZSkKICogIC0gY2hhbmdlZCBhbGwgImlmZGVmICoiIHRvICJpZiBkZWZpbmVkKCopIiBbR1JQXQogKgogKiAyMDA3MDYxOToKICogIC0gcmVhcnJhbmdlZCBtb3N0IGJpdGRlcHRoLXJlbGF0ZWQgY2FzZSBzdGF0ZW1lbnRzIHRvIHB1dCBtb3N0IGZyZXF1ZW50CiAqICAgICBjYXNlcyBhdCB0b3AgKDI0LWJpdCwgMzItYml0LCA4LWJpdCwgcmVzdCkKICoKICogMjAwNzA2MjM6CiAqICAtIGNsZWFuZWQgdXAgcG5nX2RlYnVnKCkgd2FybmluZ3MvZm9ybWF0dGluZwogKiAgLSByZW1vdmVkIFBOR19NTVhfQ09ERV9TVVBQT1JURUQgaWZkZWZzIGFuZCBhZGRlZCBvdXRlciBfX0dOVUNfXyBpZmRlZgogKiAgICAgKG1vZHVsZSBubyBsb25nZXIgdXNlZCBieSBub24teDg2L25vbi1HQ0MgYnVpbGRzIGFzIG9mIGxpYnBuZyAxLjIuMTkpCiAqICAtIHJlbW92ZWQgc2luZ2xlIGxpYnBuZy0xLjIueCBQTkdfREVCVUcgZGVwZW5kZW5jeSBvbiAxLjAueCBwbmdfc3RydWN0CiAqICAgICBtZW1iZXIgKHJvd19idWZfc2l6ZSkKICogIC0gcmVhcnJhbmdlZCBwYXNzLXJlbGF0ZWQgaWYtYmxvY2tzIGluIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIHRvIHB1dCBtb3N0CiAqICAgICBmcmVxdWVudCBjYXNlcyAoNCwgNSkgYXQgdG9wIFtHUlAgc3VnZ2VzdGlvbl0KICoKICogMjAwNzA2MjQtMjk6CiAqICAtIGZpeGVkIDY0LWJpdCBjcmFzaCBidWc6ICBwb2ludGVycyAtPiByc2kvcmRpLCBub3QgZXNpL2VkaSAoc3dpdGNoZWQgdG8KICogICAgICUwLyUxLyUyLyUzLyU0IG5vdGF0aW9uOyBlbGltaW5hdGVkIHNpemUgc3VmZml4ZXMgZnJvbSByZWxldmFudCBhZGQvCiAqICAgICBpbmMvc3ViL21vdiBpbnN0cnVjdGlvbnM7IGNoYW5nZWQgZHVtbXkgdmFycyB0byBwb2ludGVycykKICogICAgIC0gcG5nX2NvbWJpbmVfcm93KCkKICogICAgIC0gcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkKICogICAgIC0gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCkKICogICAgIC0gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKQogKiAgICAgLSBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIoKQogKiAgICAgLSBwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cCgpCiAqICAtIE5PVEU6ICB0aGlzIGZpeCBtYWtlcyB1c2Ugb2YgdGhlIGZhY3QgdGhhdCBtb2RpZnlpbmcgYSAzMi1iaXQgcmVnIChlLmcuLAogKiAgICAgJSVlYngpIGNsZWFycyB0aGUgdG9wIGhhbGYgb2YgaXRzIGNvcnJlc3BvbmRpbmcgNjQtYml0IHJlZyAoJSVyYngpLCBzbwogKiAgICAgaXQncyBzYWZlIHRvIG1peCAzMi1iaXQgb3BlcmF0aW9ucyB3aXRoIDY0LWJpdCBiYXNlL2luZGV4IGFkZHJlc3NpbmcKICogICAgIChzZWUgbmV3IFBTSS9QQVgvUEJYL1BEWC9QQlAvZXRjLiAicG9pbnRlci1yZWdpc3RlciIgbWFjcm9zKTsgYXBwbGllcwogKiAgICAgYWxzbyB0byBjbG9iYmVyIGxpc3RzCiAqCiAqIDIwMDcwNjMwOgogKiAgLSBjbGVhbmVkIHVwIGZvcm1hdHRpbmcsIG1hY3JvcywgbWlub3IgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkgOC1icHAKICogICAgIHJlZ2lzdGVyLXVzYWdlIGluZWZmaWNpZW5jeQogKiAgLSBmaXhlZCAzMi1iaXQgcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgYnVnICh3YXMgdXNpbmcgcG9pbnRlciBzaXplIGZvcgogKiAgICAgNjQtYml0IGR1bW15IHZhbHVlcykKICoKICogMjAwNzA3MDM6CiAqICAtIGFkZGVkIGNoZWNrIGZvciAobWFudWFsKSBQSUMgbWFjcm8gdG8gZml4IE9wZW5CU0QgY3Jhc2ggYnVnCgogKgogKgogKiBTVElMTCBUTyBETzoKICogIC0gZml4IGZpbmFsIHRocmVhZC11bnNhZmUgY29kZSB1c2luZyBzdGFjayB2YXJzIGFuZCBwb2ludGVyPyAocGFldGggdG9wLAogKiAgICAgZGVmYXVsdCwgYm90dG9tIG9ubHk7IGRlZmF1bHQsIGJvdHRvbSBhbHJlYWR5IDUgcmVnIGNvbnN0cmFpbnRzOyBjb3VsZAogKiAgICAgcmVwbGFjZSBicHAgd2l0aCBwb2ludGVyIGFuZCBncm91cCBicHAvcGF0ZW1wL3BidGVtcC9wY3RlbXAgaW4gYXJyYXkpCiAqICAtIGZpeCBlYnAvbm8tcmVnLWNvbnN0cmFpbnQgaW5lZmZpY2llbmN5IChhdmcvcGFldGgvc3ViIHRvcCkKICogIC0gdGVzdCBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSA2NC1iaXQgY2FzZSAocGl4ZWxfYnl0ZXMgPT0gOCkKICogIC0gd3JpdGUgTU1YIGNvZGUgZm9yIDQ4LWJpdCBjYXNlIChwaXhlbF9ieXRlcyA9PSA2KQogKiAgLSBmaWd1cmUgb3V0IHdoYXQncyB1cCB3aXRoIDI0LWJpdCBjYXNlIChwaXhlbF9ieXRlcyA9PSAzKToKICogICAgIHdoeSBzdWJ0cmFjdCA4IGZyb20gd2lkdGhfbW14IGluIHRoZSBwYXNzIDQvNSBjYXNlPyAgZHVlIHRvCiAqICAgICBvZGQgbnVtYmVyIG9mIGJ5dGVzPyAob25seSB3aWR0aF9tbXggY2FzZSkgKG5lYXIgbGluZSAyMzM1KQogKiAgLSByZXdyaXRlIGFsbCBNTVggaW50ZXJsYWNpbmcgY29kZSBzbyBpdCdzIGFsaWduZWQgd2l0aCBiZWdpbm5pbmcKICogICAgIG9mIHRoZSByb3cgYnVmZmVyLCBub3QgdGhlIGVuZCAoc2VlIDE5OTkxMDA3IGZvciBkZXRhaWxzKQogKiAgLSBhZGQgZXJyb3IgbWVzc2FnZXMgdG8gYW55IHJlbWFpbmluZyBib2d1cyBkZWZhdWx0IGNhc2VzCiAqICAtIGVuYWJsZSBwaXhlbF9kZXB0aCA9PSA4IGNhc2VzIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3coKT8gKHRlc3Qgc3BlZWQpCiAqICAtIHRyeSA9ciwgZXRjLiwgYXMgcmVnIGNvbnN0cmFpbnRzPyAgKHdvdWxkIGdjYyB1c2UgNjQtYml0IG9uZXMgb24geDg2LTY0PykKICogIC0gbmVlZCBmdWxsLCBub24tZ3JhcGhpY2FsLCBDUkMtYmFzZWQgdGVzdCBzdWl0ZS4uLiAgbWF5YmUgYXV0b2dlbmVyYXRlCiAqICAgICByYW5kb20gZGF0YSBvZiB2YXJpb3VzIGhlaWdodC93aWR0aC9kZXB0aCwgY29tcHV0ZSBDUkNzLCB3cml0ZSAoQwogKiAgICAgZnVuY3MpLCByZWFkIChhc20vTU1YKSwgcmVjb21wdXRlIENSQ3MsIGFuZCBjb21wYXJlPwogKiAgLSB3cml0ZSB0cnVlIHg4Ni02NCB2ZXJzaW9uIHVzaW5nIDEyOC1iaXQgIm1lZGlhIGluc3RydWN0aW9ucyIsICV4bW0wLTE1LAogKiAgICAgYW5kIGV4dHJhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMKICovCgojaWYgZGVmaW5lZChfX0dOVUNfXykKCiNkZWZpbmUgUE5HX0lOVEVSTkFMCiNpbmNsdWRlICJwbmcuaCIKCiNpZiBkZWZpbmVkKFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQpICYmIGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkKCi8qIGZvciBzb21lIGluZXhwbGljYWJsZSByZWFzb24sIGdjYyB4LngueCBvbiBPcGVuQlNEIChhbmQgZWxzZXdoZXJlPykgZG9lcwogKiAqbm90KiBkZWZpbmUgX19QSUNfXyB3aGVuIHRoZSAtZlBJQyBvcHRpb24gaXMgdXNlZCwgc28gd2UgaGF2ZSB0byByZWx5IG9uCiAqIG1ha2VmaWxlcyBhbmQgd2hhdG5vdCB0byBkZWZpbmUgdGhlIFBJQyBtYWNybyBleHBsaWNpdGx5ICovCiNpZiBkZWZpbmVkKFBJQykgJiYgIWRlZmluZWQoX19QSUNfXykgICAvLyAodGhpcyBjYW4vc2hvdWxkIG1vdmUgdG8gcG5nY29uZi5oKQojICBkZWZpbmUgX19QSUNfXwojZW5kaWYKCi8qIGlmIHlvdSB3YW50L25lZWQgZnVsbCB0aHJlYWQtc2FmZXR5IG9uIHg4Ni02NCBldmVuIHdoZW4gbGlua2luZyBzdGF0aWNhbGx5LAogKiBjb21tZW50IG91dCB0aGUgIiYmIGRlZmluZWQoX19QSUNfXykiIHBhcnQgaGVyZTogKi8KI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX1BJQ19fKQojICBkZWZpbmUgUE5HX3g4Nl82NF9VU0VfR09UUENSRUwgICAgICAgICAgICAvLyBHT1RQQ1JFTCA9PiBmdWxsIHRocmVhZC1zYWZldHkKIyAgZGVmaW5lIFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCAgLy8gd29ya3MgYXMgb2YgZ2NjIDMuNC4zIC4uLgojZW5kaWYKCmludCBQTkdBUEkgcG5nX21teF9zdXBwb3J0KHZvaWQpOwoKI2lmIGRlZmluZWQoUE5HX1VTRV9MT0NBTF9BUlJBWVMpCnN0YXRpYyBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3Nfc3RhcnRbN10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07CnN0YXRpYyBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3NfaW5jWzddICAgPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07CnN0YXRpYyBQTkdfQ09OU1QgaW50IEZBUkRBVEEgcG5nX3Bhc3Nfd2lkdGhbN10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07CiNlbmRpZgoKLyogZGpncHAsIFdpbjMyLCBDeWd3aW4sIGFuZCBPUzIgYWRkIHRoZWlyIG93biB1bmRlcnNjb3JlcyB0byBnbG9iYWwgdmFyaWFibGVzLAogKiBzbyBkZWZpbmUgdGhlbSB3aXRob3V0OiAqLwojaWYgZGVmaW5lZChfX0RKR1BQX18pIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgXAogICAgZGVmaW5lZChfX09TMl9fKQojICBkZWZpbmUgX21teF9zdXBwb3J0ZWQgIG1teF9zdXBwb3J0ZWQKIyAgZGVmaW5lIF9tYXNrOF8wICAgICAgICBtYXNrOF8wCiMgIGRlZmluZSBfbWFzazE2XzEgICAgICAgbWFzazE2XzEKIyAgZGVmaW5lIF9tYXNrMTZfMCAgICAgICBtYXNrMTZfMAojICBkZWZpbmUgX21hc2syNF8yICAgICAgIG1hc2syNF8yCiMgIGRlZmluZSBfbWFzazI0XzEgICAgICAgbWFzazI0XzEKIyAgZGVmaW5lIF9tYXNrMjRfMCAgICAgICBtYXNrMjRfMAojICBkZWZpbmUgX21hc2szMl8zICAgICAgIG1hc2szMl8zCiMgIGRlZmluZSBfbWFzazMyXzIgICAgICAgbWFzazMyXzIKIyAgZGVmaW5lIF9tYXNrMzJfMSAgICAgICBtYXNrMzJfMQojICBkZWZpbmUgX21hc2szMl8wICAgICAgIG1hc2szMl8wCiMgIGRlZmluZSBfbWFzazQ4XzUgICAgICAgbWFzazQ4XzUKIyAgZGVmaW5lIF9tYXNrNDhfNCAgICAgICBtYXNrNDhfNAojICBkZWZpbmUgX21hc2s0OF8zICAgICAgIG1hc2s0OF8zCiMgIGRlZmluZSBfbWFzazQ4XzIgICAgICAgbWFzazQ4XzIKIyAgZGVmaW5lIF9tYXNrNDhfMSAgICAgICBtYXNrNDhfMQojICBkZWZpbmUgX21hc2s0OF8wICAgICAgIG1hc2s0OF8wCiMgIGRlZmluZSBfYW1hc2s1XzNfMCAgICAgYW1hc2s1XzNfMAojICBkZWZpbmUgX2FtYXNrN18xXzAgICAgIGFtYXNrN18xXzAKIyAgZGVmaW5lIF9MQkNhcnJ5TWFzayAgICBMQkNhcnJ5TWFzawojICBkZWZpbmUgX0hCQ2xlYXJNYXNrICAgIEhCQ2xlYXJNYXNrCiMgIGRlZmluZSBfYW1hc2swXzhfMCAgICAgYW1hc2swXzhfMAojICBkZWZpbmUgX2FtYXNrNl8yXzAgICAgIGFtYXNrNl8yXzAKIyAgZGVmaW5lIF9hbWFzazRfNF8wICAgICBhbWFzazRfNF8wCiMgIGRlZmluZSBfYW1hc2swXzJfNiAgICAgYW1hc2swXzJfNgojICBkZWZpbmUgX2FtYXNrMl8zXzMgICAgIGFtYXNrMl8zXzMKIyAgZGVmaW5lIF9hbWFzazRfMl8yICAgICBhbWFzazRfMl8yCiMgIGlmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCiMgICAgZGVmaW5lIF9wYXRlbXAgICAgICAgcGF0ZW1wCiMgICAgZGVmaW5lIF9wYnRlbXAgICAgICAgcGJ0ZW1wCiMgICAgZGVmaW5lIF9wY3RlbXAgICAgICAgcGN0ZW1wCiMgIGVuZGlmCiNlbmRpZiAvLyBkamdwcCwgV2luMzIsIEN5Z3dpbiwgT1MyCgoKLyogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGluIHRoZSBpbmxpbmVkIE1NWCBhc3NlbWJseSBjb2RlLiAqLwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgIHVsbDsKCiNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKQpzdGF0aWMgUE5HX0NPTlNUIHN0cnVjdCB7CiAgICAvL3VsbCBfbWFza19hcnJheVsyNl07CgogICAgLy8gcG5nX2NvbWJpbmVfcm93KCkgY29uc3RhbnRzOgogICAgdWxsIF9tYXNrOF8wOwogICAgdWxsIF9tYXNrMTZfMCwgX21hc2sxNl8xOwogICAgdWxsIF9tYXNrMjRfMCwgX21hc2syNF8xLCBfbWFzazI0XzI7CiAgICB1bGwgX21hc2szMl8wLCBfbWFzazMyXzEsIF9tYXNrMzJfMiwgX21hc2szMl8zOwogICAgdWxsIF9tYXNrNDhfMCwgX21hc2s0OF8xLCBfbWFzazQ4XzIsIF9tYXNrNDhfMywgX21hc2s0OF80LCBfbWFzazQ4XzU7CgogICAgLy8gcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgY29uc3RhbnRzOgogICAgdWxsIF9hbWFzazVfM18wLCBfYW1hc2s3XzFfMDsgIC8vIHdhcyBfY29uc3Q0IGFuZCBfY29uc3Q2LCByZXNwZWN0aXZlbHkKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHMgKGFsc28gdXNlcyBfYW1hc2s1XzNfMCk6CiAgICB1bGwgX0xCQ2FycnlNYXNrLCBfSEJDbGVhck1hc2s7CiAgICB1bGwgX2FtYXNrMF84XzAsIF9hbWFzazZfMl8wOyAgLy8gd2FzIEFjdGl2ZU1hc2sgZm9yIGJwcCA0LzYgYW5kIDIgY2FzZXMKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpIGNvbnN0YW50cyAoYWxzbyB1c2VzIF9hbWFzazVfM18wKToKICAgIHVsbCBfYW1hc2s0XzRfMCwgX2FtYXNrMF8yXzY7ICAvLyB3YXMgQWN0aXZlTWFza3ssRW5kfSBmb3IgYnBwIDYvNC84IGFuZCAzCgogICAgLy8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkgY29uc3RhbnRzOgogICAgdWxsIF9hbWFzazJfM18zLCBfYW1hc2s0XzJfMjsgIC8vIHdhcyBBY3RpdmVNYXNrIGZvciBicHAgMyBhbmQgMiBjYXNlcwoKfSBfYzY0IF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IHsKCiAgICAvLyBwbmdfY29tYmluZV9yb3coKSBjb25zdGFudHM6CiAgICAweDAxMDIwNDA4MTAyMDQwODBMTCwgLy8gX21hc2s4XzAgICAgICBvZmZzZXQgMAoKICAgIDB4MTAxMDIwMjA0MDQwODA4MExMLCAvLyBfbWFzazE2XzAgICAgIG9mZnNldCA4CiAgICAweDAxMDEwMjAyMDQwNDA4MDhMTCwgLy8gX21hc2sxNl8xICAgICBvZmZzZXQgMTYKCiAgICAweDIwMjA0MDQwNDA4MDgwODBMTCwgLy8gX21hc2syNF8wICAgICBvZmZzZXQgMjQKICAgIDB4MDQwODA4MDgxMDEwMTAyMExMLCAvLyBfbWFzazI0XzEgICAgIG9mZnNldCAzMgogICAgMHgwMTAxMDEwMjAyMDIwNDA0TEwsIC8vIF9tYXNrMjRfMiAgICAgb2Zmc2V0IDQwCgogICAgMHg0MDQwNDA0MDgwODA4MDgwTEwsIC8vIF9tYXNrMzJfMCAgICAgb2Zmc2V0IDQ4CiAgICAweDEwMTAxMDEwMjAyMDIwMjBMTCwgLy8gX21hc2szMl8xICAgICBvZmZzZXQgNTYKICAgIDB4MDQwNDA0MDQwODA4MDgwOExMLCAvLyBfbWFzazMyXzIgICAgIG9mZnNldCA2NAogICAgMHgwMTAxMDEwMTAyMDIwMjAyTEwsIC8vIF9tYXNrMzJfMyAgICAgb2Zmc2V0IDcyCgogICAgMHg0MDQwODA4MDgwODA4MDgwTEwsIC8vIF9tYXNrNDhfMCAgICAgb2Zmc2V0IDgwCiAgICAweDIwMjAyMDIwNDA0MDQwNDBMTCwgLy8gX21hc2s0OF8xICAgICBvZmZzZXQgODgKICAgIDB4MTAxMDEwMTAxMDEwMjAyMExMLCAvLyBfbWFzazQ4XzIgICAgIG9mZnNldCA5NgogICAgMHgwNDA0MDgwODA4MDgwODA4TEwsIC8vIF9tYXNrNDhfMyAgICAgb2Zmc2V0IDEwNAogICAgMHgwMjAyMDIwMjA0MDQwNDA0TEwsIC8vIF9tYXNrNDhfNCAgICAgb2Zmc2V0IDExMgogICAgMHgwMTAxMDEwMTAxMDEwMjAyTEwsIC8vIF9tYXNrNDhfNSAgICAgb2Zmc2V0IDEyMAoKICAgIC8vIHBuZ19kb19yZWFkX2ludGVybGFjZSgpIGNvbnN0YW50czoKICAgIDB4MDAwMDAwMDAwMEZGRkZGRkxMLCAvLyBfYW1hc2s1XzNfMCAgIG9mZnNldCAxMjggIChicHAgMywgYXZnL3BhZXRoKSBjb25zdDQKICAgIDB4MDAwMDAwMDAwMDAwMDBGRkxMLCAvLyBfYW1hc2s3XzFfMCAgIG9mZnNldCAxMzYgICAgICAgICAgICAgICAgICAgICBjb25zdDYKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHM6CiAgICAweDAxMDEwMTAxMDEwMTAxMDFMTCwgLy8gX0xCQ2FycnlNYXNrICBvZmZzZXQgMTQ0CiAgICAweDdGN0Y3RjdGN0Y3RjdGN0ZMTCwgLy8gX0hCQ2xlYXJNYXNrICBvZmZzZXQgMTUyCiAgICAweEZGRkZGRkZGRkZGRkZGRkZMTCwgLy8gX2FtYXNrMF84XzAgICBvZmZzZXQgMTYwICAoYnBwIDQvNiwgYXZnKQogICAgMHgwMDAwMDAwMDAwMDBGRkZGTEwsIC8vIF9hbWFzazZfMl8wICAgb2Zmc2V0IDE2OCAgKGJwcCAyLCAgIGF2ZykKCiAgICAvLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9wYWV0aCgpIGNvbnN0YW50czoKICAgIDB4MDAwMDAwMDBGRkZGRkZGRkxMLCAvLyBfYW1hc2s0XzRfMCAgIG9mZnNldCAxNzYgIChicHAgNi80LzgsIHBhZXRoKQogICAgMHhGRkZGMDAwMDAwMDAwMDAwTEwsIC8vIF9hbWFzazBfMl82ICAgb2Zmc2V0IDE4NCAgKGJwcCAzLCBwYWV0aCkgICBBLk0uRW5kCgogICAgLy8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKCkgY29uc3RhbnRzOgogICAgMHgwMDAwRkZGRkZGMDAwMDAwTEwsIC8vIF9hbWFzazJfM18zICAgb2Zmc2V0IDE5MiAgKGJwcCAzLCBzdWIpCiAgICAweDAwMDAwMDAwRkZGRjAwMDBMTCwgLy8gX2FtYXNrNF8yXzIgICBvZmZzZXQgMjAwICAoYnBwIDIsIHN1YikKCn07CgojZGVmaW5lIE1BU0s4XzAgICAgICAgICIoJSVyYnApIgojZGVmaW5lIE1BU0sxNl8wICAgICAgICI4KCUlcmJwKSIKI2RlZmluZSBNQVNLMTZfMSAgICAgICAiMTYoJSVyYnApIgojZGVmaW5lIE1BU0syNF8wICAgICAgICIyNCglJXJicCkiCiNkZWZpbmUgTUFTSzI0XzEgICAgICAgIjMyKCUlcmJwKSIKI2RlZmluZSBNQVNLMjRfMiAgICAgICAiNDAoJSVyYnApIgojZGVmaW5lIE1BU0szMl8wICAgICAgICI0OCglJXJicCkiCiNkZWZpbmUgTUFTSzMyXzEgICAgICAgIjU2KCUlcmJwKSIKI2RlZmluZSBNQVNLMzJfMiAgICAgICAiNjQoJSVyYnApIgojZGVmaW5lIE1BU0szMl8zICAgICAgICI3MiglJXJicCkiCiNkZWZpbmUgTUFTSzQ4XzAgICAgICAgIjgwKCUlcmJwKSIKI2RlZmluZSBNQVNLNDhfMSAgICAgICAiODgoJSVyYnApIgojZGVmaW5lIE1BU0s0OF8yICAgICAgICI5NiglJXJicCkiCiNkZWZpbmUgTUFTSzQ4XzMgICAgICAgIjEwNCglJXJicCkiCiNkZWZpbmUgTUFTSzQ4XzQgICAgICAgIjExMiglJXJicCkiCiNkZWZpbmUgTUFTSzQ4XzUgICAgICAgIjEyMCglJXJicCkiCiNkZWZpbmUgQU1BU0s1XzNfMCAgICAgIjEyOCglJXJicCkiCiNkZWZpbmUgQU1BU0s3XzFfMCAgICAgIjEzNiglJXJicCkiCiNkZWZpbmUgTEJfQ0FSUllfTUFTSyAgIjE0NCglJXJicCkiCiNkZWZpbmUgSEJfQ0xFQVJfTUFTSyAgIjE1MiglJXJicCkiCiNkZWZpbmUgQU1BU0swXzhfMCAgICAgIjE2MCglJXJicCkiCiNkZWZpbmUgQU1BU0s2XzJfMCAgICAgIjE2OCglJXJicCkiCiNkZWZpbmUgQU1BU0s0XzRfMCAgICAgIjE3NiglJXJicCkiCiNkZWZpbmUgQU1BU0swXzJfNiAgICAgIjE4NCglJXJicCkiCiNkZWZpbmUgQU1BU0syXzNfMyAgICAgIjE5MiglJXJicCkiCiNkZWZpbmUgQU1BU0s0XzJfMiAgICAgIjIwMCglJXJicCkiCgojZWxzZSAvLyAhUE5HX3g4Nl82NF9VU0VfR09UUENSRUwKCnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrOF8wICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDIwNDA4MTAyMDQwODBMTDsKCnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMTZfMSBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMjAyMDQwNDA4MDhMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2sxNl8wIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MTAxMDIwMjA0MDQwODA4MExMOwoKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2syNF8yIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDEwMTAxMDIwMjAyMDQwNExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazI0XzEgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwNDA4MDgwODEwMTAxMDIwTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMjRfMCBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDIwMjA0MDQwNDA4MDgwODBMTDsKCnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMzJfMyBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMTAxMDIwMjAyMDJMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2szMl8yIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDQwNDA0MDQwODA4MDgwOExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazMyXzEgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgxMDEwMTAxMDIwMjAyMDIwTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrMzJfMCBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDQwNDA0MDQwODA4MDgwODBMTDsKCnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrNDhfNSBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMTAxMDEwMTAyMDJMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF80IF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDIwMjAyMDIwNDA0MDQwNExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzMgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwNDA0MDgwODA4MDgwODA4TEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9tYXNrNDhfMiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDEwMTAxMDEwMTAxMDIwMjBMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX21hc2s0OF8xIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MjAyMDIwMjA0MDQwNDA0MExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfbWFzazQ4XzAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHg0MDQwODA4MDgwODA4MDgwTEw7CgovLyBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBjb25zdGFudHM6CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazVfM18wICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgPSAweDAwMDAwMDAwMDBGRkZGRkZMTDsgIC8vIHdhcyBfY29uc3Q0CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazdfMV8wICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgPSAweDAwMDAwMDAwMDAwMDAwRkZMTDsgIC8vIHdhcyBfY29uc3Q2CgovLyBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSBjb25zdGFudHM6CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9MQkNhcnJ5TWFzayBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAxMDEwMTAxMDEwMTAxMDFMTDsKc3RhdGljIFBOR19DT05TVCB1bGwgX0hCQ2xlYXJNYXNrIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4N2Y3ZjdmN2Y3ZjdmN2Y3ZkxMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2swXzhfMCAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHhGRkZGRkZGRkZGRkZGRkZGTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazZfMl8wICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweDAwMDAwMDAwMDAwMEZGRkZMTDsKCi8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgY29uc3RhbnRzOgpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s0XzRfMCAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMEZGRkZGRkZGTEw7CnN0YXRpYyBQTkdfQ09OU1QgdWxsIF9hbWFzazBfMl82ICBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBhbGlnbmVkKDgpKSkgPSAweEZGRkYwMDAwMDAwMDAwMDBMTDsKCi8vIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpIGNvbnN0YW50czoKc3RhdGljIFBOR19DT05TVCB1bGwgX2FtYXNrMl8zXzMgIF9fYXR0cmlidXRlX18oKHVzZWQsIGFsaWduZWQoOCkpKSA9IDB4MDAwMEZGRkZGRjAwMDAwMExMOwpzdGF0aWMgUE5HX0NPTlNUIHVsbCBfYW1hc2s0XzJfMiAgX19hdHRyaWJ1dGVfXygodXNlZCwgYWxpZ25lZCg4KSkpID0gMHgwMDAwMDAwMEZGRkYwMDAwTEw7CgojZGVmaW5lIE1BU0s4XzAgICAgICAgICJfbWFzazhfMCIKI2RlZmluZSBNQVNLMTZfMCAgICAgICAiX21hc2sxNl8wIgojZGVmaW5lIE1BU0sxNl8xICAgICAgICJfbWFzazE2XzEiCiNkZWZpbmUgTUFTSzI0XzAgICAgICAgIl9tYXNrMjRfMCIKI2RlZmluZSBNQVNLMjRfMSAgICAgICAiX21hc2syNF8xIgojZGVmaW5lIE1BU0syNF8yICAgICAgICJfbWFzazI0XzIiCiNkZWZpbmUgTUFTSzMyXzAgICAgICAgIl9tYXNrMzJfMCIKI2RlZmluZSBNQVNLMzJfMSAgICAgICAiX21hc2szMl8xIgojZGVmaW5lIE1BU0szMl8yICAgICAgICJfbWFzazMyXzIiCiNkZWZpbmUgTUFTSzMyXzMgICAgICAgIl9tYXNrMzJfMyIKI2RlZmluZSBNQVNLNDhfMCAgICAgICAiX21hc2s0OF8wIgojZGVmaW5lIE1BU0s0OF8xICAgICAgICJfbWFzazQ4XzEiCiNkZWZpbmUgTUFTSzQ4XzIgICAgICAgIl9tYXNrNDhfMiIKI2RlZmluZSBNQVNLNDhfMyAgICAgICAiX21hc2s0OF8zIgojZGVmaW5lIE1BU0s0OF80ICAgICAgICJfbWFzazQ4XzQiCiNkZWZpbmUgTUFTSzQ4XzUgICAgICAgIl9tYXNrNDhfNSIKI2RlZmluZSBBTUFTSzVfM18wICAgICAiX2FtYXNrNV8zXzAiCiNkZWZpbmUgQU1BU0s3XzFfMCAgICAgIl9hbWFzazdfMV8wIgojZGVmaW5lIExCX0NBUlJZX01BU0sgICJfTEJDYXJyeU1hc2siCiNkZWZpbmUgSEJfQ0xFQVJfTUFTSyAgIl9IQkNsZWFyTWFzayIKI2RlZmluZSBBTUFTSzBfOF8wICAgICAiX2FtYXNrMF84XzAiCiNkZWZpbmUgQU1BU0s2XzJfMCAgICAgIl9hbWFzazZfMl8wIgojZGVmaW5lIEFNQVNLNF80XzAgICAgICJfYW1hc2s0XzRfMCIKI2RlZmluZSBBTUFTSzBfMl82ICAgICAiX2FtYXNrMF8yXzYiCiNkZWZpbmUgQU1BU0syXzNfMyAgICAgIl9hbWFzazJfM18zIgojZGVmaW5lIEFNQVNLNF8yXzIgICAgICJfYW1hc2s0XzJfMiIKCiNlbmRpZiAvLyA/UE5HX3g4Nl82NF9VU0VfR09UUENSRUwKCgojaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XKSB8fCBkZWZpbmVkKFBOR19IQVZFX01NWF9DT01CSU5FX1JPVykKCi8vIHRoaXMgYmxvY2sgaXMgc3BlY2lmaWMgdG8gcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKQojaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkKIyAgaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XKQojICBkZWZpbmUgcGFfVEVNUCAgICAgICAgICAgICAgICAiJSVyMTFkIgojICBkZWZpbmUgcGJfVEVNUCAgICAgICAgICAgICAgICAiJSVyMTJkIgojICBkZWZpbmUgcGNfVEVNUCAgICAgICAgICAgICAgICAiJSVyMTNkIgojICBlbmRpZgojICBpZiBkZWZpbmVkKFBOR19DTE9CQkVSX3g4Nl82NF9SRUdTX1NVUFBPUlRFRCkgIC8vIHdvcmtzIGFzIG9mIGdjYyAzLjQuMyAuLi4KIyAgICBkZWZpbmUgU0FWRV9yMTFfcjEyX3IxMwojICAgIGRlZmluZSBSRVNUT1JFX3IxMV9yMTJfcjEzCiMgICAgZGVmaW5lIF9DTE9CQkVSX3IxMV9yMTJfcjEzICwiJXIxMSIsICIlcjEyIiwgIiVyMTMiCiMgICAgZGVmaW5lIENMT0JCRVJfcjExX3IxMl9yMTMgICIlcjExIiwgIiVyMTIiLCAiJXIxMyIKIyAgZWxzZSAvLyAhUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVECiMgICAgZGVmaW5lIFNBVkVfcjExX3IxMl9yMTMgICAgICJwdXNocSAlJXIxMSAgXG5cdCIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVzaHEgJSVyMTIgIFxuXHQiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2hxICUlcjEzICBcblx0IiAgLy8gIm5vcm1hbGx5IDAtZXh0ZW5kZWQiCiMgICAgZGVmaW5lIFJFU1RPUkVfcjExX3IxMl9yMTMgICJwb3BxICAlJXIxMyAgXG5cdCIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wcSAgJSVyMTIgIFxuXHQiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHEgICUlcjExICBcblx0IgojICAgIGRlZmluZSBfQ0xPQkJFUl9yMTFfcjEyX3IxMwojICAgIGRlZmluZSBDTE9CQkVSX3IxMV9yMTJfcjEzCiMgIGVuZGlmCiMgIGRlZmluZSBMT0FEX0dPVF9yYnAgICAgICAgICAgICJwdXNocSAlJXJicCAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgIF9jNjRAR09UUENSRUwoJSVyaXApLCAlJXJicCAgXG5cdCIKIyAgZGVmaW5lIFJFU1RPUkVfcmJwICAgICAgICAgICAgInBvcHEgICUlcmJwICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKI2Vsc2UgLy8gMzItYml0IGFuZC9vciBub24tUElDCiMgIGlmIGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCiAgICAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgYW5kIHdvdWxkIGJlCiAgICAgLy8gICBsb2NhbCB2YXJpYWJsZXMgaWYgbm90IGZvciBnY2MtaW5saW5lLWFzc2VtYmx5IGFkZHJlc3NpbmcgbGltaXRhdGlvbnMKICAgICAvLyAgIChzb21lIGFwcGFyZW50bHkgcmVsYXRlZCB0byBFTEYgZm9ybWF0LCBvdGhlcnMgdG8gQ1BVIHR5cGUpLgogICAgIC8vCiAgICAgLy8gV0FSTklORzogVGhlaXIgcHJlc2VuY2UgZGVmZWF0cyB0aGUgdGhyZWFkLXNhZmV0eSBvZiBsaWJwbmcuCiAgICAgc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgIF9wYXRlbXAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKICAgICBzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgX3BidGVtcCAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwogICAgIHN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICBfcGN0ZW1wICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSk7CiMgICAgZGVmaW5lIHBhX1RFTVAgICAgICAgICAgICAgICAgIl9wYXRlbXAiCiMgICAgZGVmaW5lIHBiX1RFTVAgICAgICAgICAgICAgICAgIl9wYnRlbXAiICAvLyB0ZW1wIHZhcmlhYmxlcyBmb3IKIyAgICBkZWZpbmUgcGNfVEVNUCAgICAgICAgICAgICAgICAiX3BjdGVtcCIgIC8vICBQYWV0aCByb3V0aW5lCiMgICAgZGVmaW5lIFNBVkVfcjExX3IxMl9yMTMKIyAgICBkZWZpbmUgUkVTVE9SRV9yMTFfcjEyX3IxMwojICAgIGRlZmluZSBfQ0xPQkJFUl9yMTFfcjEyX3IxMyAgIC8vIG5vdCB1c2luZyByZWdzID0+IG5vdCBjbG9iYmVyaW5nCiMgICAgZGVmaW5lIENMT0JCRVJfcjExX3IxMl9yMTMKIyAgZW5kaWYgLy8gUE5HX1RIUkVBRF9VTlNBRkVfT0sKIyAgZGVmaW5lIExPQURfR09UX3JicAojICBkZWZpbmUgUkVTVE9SRV9yYnAKI2VuZGlmCgojaWYgZGVmaW5lZChfX3g4Nl82NF9fKQojICBkZWZpbmUgU0FWRV9lYnAKIyAgZGVmaW5lIFJFU1RPUkVfZWJwCiMgIGRlZmluZSBfQ0xPQkJFUl9lYnAgICAgICAgICAsIiVlYnAiCiMgIGRlZmluZSBDTE9CQkVSX2VicCAgICAgICAgICAiJWVicCIKIyAgZGVmaW5lIFNBVkVfRnVsbExlbmd0aCAgICAgICJtb3ZsICUlZWF4LCAlJXIxNWQgIFxuXHQiCiMgIGRlZmluZSBSRVNUT1JFX0Z1bGxMZW5ndGggICAibW92bCAlJXIxNWQsICIgICAgIC8vIG1heSBnbyBpbnRvIGVheCBvciBlY3gKIyAgaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpICAgLy8gd29ya3MgYXMgb2YgZ2NjIDMuNC4zIC4uLgojICAgIGRlZmluZSBTQVZFX3IxNQojICAgIGRlZmluZSBSRVNUT1JFX3IxNQojICAgIGRlZmluZSBfQ0xPQkJFUl9yMTUgICAgICAgLCIlcjE1IgojICBlbHNlCiMgICAgZGVmaW5lIFNBVkVfcjE1ICAgICAgICAgICAicHVzaHEgJSVyMTUgIFxuXHQiCiMgICAgZGVmaW5lIFJFU1RPUkVfcjE1ICAgICAgICAicG9wcSAgJSVyMTUgIFxuXHQiCiMgICAgZGVmaW5lIF9DTE9CQkVSX3IxNQojICBlbmRpZgojICBkZWZpbmUgUEJQICAgICAgICAgICAgICAgICAgIiUlcmJwIiAgICAgICAgICAgICAvLyByZWdzIHVzZWQgZm9yIDY0LWJpdAojICBkZWZpbmUgUEFYICAgICAgICAgICAgICAgICAgIiUlcmF4IiAgICAgICAgICAgICAvLyAgcG9pbnRlcnMgb3IgaW4KIyAgZGVmaW5lIFBCWCAgICAgICAgICAgICAgICAgICIlJXJieCIgICAgICAgICAgICAgLy8gIGNvbWJpbmF0aW9uIHdpdGgKIyAgZGVmaW5lIFBDWCAgICAgICAgICAgICAgICAgICIlJXJjeCIgICAgICAgICAgICAgLy8gIDY0LWJpdCBwb2ludGVyLXJlZ3MKIyAgZGVmaW5lIFBEWCAgICAgICAgICAgICAgICAgICIlJXJkeCIgICAgICAgICAgICAgLy8gIChiYXNlL2luZGV4IHBhaXJzLAojICBkZWZpbmUgUFNJICAgICAgICAgICAgICAgICAgIiUlcnNpIiAgICAgICAgICAgICAvLyAgYWRkL3N1Yi9tb3YgcGFpcnMpCiMgIGRlZmluZSBDTEVBUl9CT1RUT01fM19CSVRTICAiYW5kICAkMHhmZmZmZmZmZmZmZmZmZmY4LCAiCiNlbHNlCiMgIGRlZmluZSBTQVZFX2VicCAgICAgICAgICAgICAicHVzaGwgJSVlYnAgXG5cdCIgIC8vIGNsb2JiZXIgbGlzdCBkb2Vzbid0IHdvcmsKIyAgZGVmaW5lIFJFU1RPUkVfZWJwICAgICAgICAgICJwb3BsICAlJWVicCBcblx0IiAgLy8gIGZvciAlZWJwIG9uIDMyLWJpdDsgbm90CiMgIGRlZmluZSBfQ0xPQkJFUl9lYnAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBjbGVhciB3aHkgbm90CiMgIGRlZmluZSBDTE9CQkVSX2VicAojICBkZWZpbmUgU0FWRV9GdWxsTGVuZ3RoICAgICAgInB1c2hsICUlZWF4IFxuXHQiCiMgIGRlZmluZSBSRVNUT1JFX0Z1bGxMZW5ndGggICAicG9wbCAiICAgICAgICAgICAgIC8vIGVheCAoYXZnKSBvciBlY3ggKHBhZXRoKQojICBkZWZpbmUgU0FWRV9yMTUKIyAgZGVmaW5lIFJFU1RPUkVfcjE1CiMgIGRlZmluZSBfQ0xPQkJFUl9yMTUKIyAgZGVmaW5lIFBCUCAgICAgICAgICAgICAgICAgICIlJWVicCIgICAgICAgICAgICAgLy8gcmVncyB1c2VkIGZvciBvciBpbgojICBkZWZpbmUgUEFYICAgICAgICAgICAgICAgICAgIiUlZWF4IiAgICAgICAgICAgICAvLyAgY29tYmluYXRpb24gd2l0aAojICBkZWZpbmUgUEJYICAgICAgICAgICAgICAgICAgIiUlZWJ4IiAgICAgICAgICAgICAvLyAgIm5vcm1hbCwiIDMyLWJpdAojICBkZWZpbmUgUENYICAgICAgICAgICAgICAgICAgIiUlZWN4IiAgICAgICAgICAgICAvLyAgcG9pbnRlcnMKIyAgZGVmaW5lIFBEWCAgICAgICAgICAgICAgICAgICIlJWVkeCIKIyAgZGVmaW5lIFBTSSAgICAgICAgICAgICAgICAgICIlJWVzaSIKIyAgZGVmaW5lIENMRUFSX0JPVFRPTV8zX0JJVFMgICJhbmQgICQweGZmZmZmZmY4LCAiCiNlbmRpZgoKLy8gQ0xPQl9DT01NQV9lYnhfZWJwOiAgbmVlZCBjb21tYSBPTkxZIGlmIGJvdGggQ0xPQkJFUl9lYnAgYW5kIENMT0JCRVJfR09UX2VieAovLyAgICAgICAgICAgICAgICAgICAgICBoYXZlIHZhbHVlcywgaS5lLiwgb25seSBpZiBfX3g4Nl82NF9fIEFORCAhX19QSUNfXwojaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZChfX1BJQ19fKQojICBkZWZpbmUgQ0xPQl9DT01NQV9lYnhfZWJwICAgICwgLy8gY2xvYmJlcmluZyBib3RoIGVicCBhbmQgZWJ4ID0+IG5lZWQgY29tbWEKI2Vsc2UKIyAgZGVmaW5lIENMT0JfQ09NTUFfZWJ4X2VicAojZW5kaWYKCi8vIENMT0JfQ09NTUFfZWJYX3IxWDogIG5lZWQgY29tbWEgVU5MRVNTIGJvdGggQ0xPQkJFUl9lYnAgYW5kIENMT0JCRVJfR09UX2VieAovLyAgICAgICAgICAgICAgICAgICBhcmUgZW1wdHkgT1IgQ0xPQkJFUl9yMTFfcjEyX3IxMyBpcyBlbXB0eS0taS5lLiwgTk8gY29tbWEKLy8gICAgICAgICAgICAgICAgICAgaWYgKCFfX3g4Nl82NF9fIEFORCBfX1BJQ19fKSBPUiAhKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMCi8vICAgICAgICAgICAgICAgICAgIEFORCBQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpICAgKGRvdWJsZSBzaWdoLi4uKQojaWYgKCFkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19QSUNfXykpIHx8IFwKICAgICFkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSB8fCBcCiAgICAhZGVmaW5lZChQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpCiMgIGRlZmluZSBDTE9CX0NPTU1BX2ViWF9yMVgKI2Vsc2UKIyAgZGVmaW5lIENMT0JfQ09NTUFfZWJYX3IxWCAgICAsIC8vIGNsb2JiZXJpbmcgKGVicCBPUiBlYngpIEFORCByMTFfcjEyX3IxMwojZW5kaWYKCi8vIENMT0JfQ09MT05fZWJ4X2VicDogIG5lZWQgY29sb24gdW5sZXNzIENMT0JCRVJfZWJwIGFuZCBDTE9CQkVSX0dPVF9lYnggYXJlCi8vICAgICAgICAgICAgICAgICAgICAgIEJPVEggZW1wdHktLWkuZS4sIE5PIGNvbG9uIGlmICghX194ODZfNjRfXyBBTkQgX19QSUNfXykKLy8gQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWDogIGlmLCBpbiBhZGRpdGlvbiwgQ0xPQkJFUl9yMTFfcjEyX3IxMyBpcyBlbXB0eSwgdGhlbgovLyAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gY29sb24gZm9yIFBhZXRoIGJsb2NrcywgZWl0aGVyLS1pLmUuLCBOTyBjb2xvbgovLyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIShQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCBBTkQKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE5HX0NMT0JCRVJfeDg2XzY0X1JFR1NfU1VQUE9SVEVEKQojaWYgKCFkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19QSUNfXykpCiMgIGRlZmluZSBDTE9CX0NPTE9OX2VieF9lYnAKIyAgaWYgIShkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSAmJiBcCiAgICAgICAgZGVmaW5lZChQTkdfQ0xPQkJFUl94ODZfNjRfUkVHU19TVVBQT1JURUQpKQojICAgIGRlZmluZSBDTE9CX0NPTE9OX2VieF9lYnBfcjFYCiMgIGVsc2UKIyAgICBkZWZpbmUgQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWCAgOiAvLyBjbG9iYmVyaW5nIGVicCBPUiBlYnggT1IgcjExX3IxMl9yMTMKIyAgZW5kaWYKI2Vsc2UKIyAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicCAgICAgICAgOiAvLyBjbG9iYmVyaW5nIGVicCBPUiBlYngKIyAgZGVmaW5lIENMT0JfQ09MT05fZWJ4X2VicF9yMVggICAgOiAvLyBjbG9iYmVyaW5nIGVicCBPUiBlYnggT1IgcjExX3IxMl9yMTMKI2VuZGlmCgojZW5kaWYgLy8gUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVwoKI2lmIGRlZmluZWQoX19QSUNfXykgIC8vIG1hY3JvcyB0byBzYXZlLCByZXN0b3JlIGluZGV4IHRvIEdsb2JhbCBPZmZzZXQgVGFibGUKIyAgaWYgZGVmaW5lZChfX3g4Nl82NF9fKQojICAgIGRlZmluZSBTQVZFX0dPVF9lYnggICAgICJwdXNocSAlJXJieCBcblx0IgojICAgIGRlZmluZSBSRVNUT1JFX0dPVF9lYnggICJwb3BxICAlJXJieCBcblx0IgojICBlbHNlCiMgICAgZGVmaW5lIFNBVkVfR09UX2VieCAgICAgInB1c2hsICUlZWJ4IFxuXHQiCiMgICAgZGVmaW5lIFJFU1RPUkVfR09UX2VieCAgInBvcGwgICUlZWJ4IFxuXHQiCiMgIGVuZGlmCiMgIGRlZmluZSBfQ0xPQkJFUl9HT1RfZWJ4ICAgLy8gZXhwbGljaXRseSBzYXZlZCwgcmVzdG9yZWQgPT4gbm90IGNsb2JiZXJlZAojICBkZWZpbmUgQ0xPQkJFUl9HT1RfZWJ4CiNlbHNlCiMgIGRlZmluZSBTQVZFX0dPVF9lYngKIyAgZGVmaW5lIFJFU1RPUkVfR09UX2VieAojICBkZWZpbmUgX0NMT0JCRVJfR09UX2VieCAgICwiJWVieCIKIyAgZGVmaW5lIENMT0JCRVJfR09UX2VieCAgICAiJWVieCIKI2VuZGlmCgojaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfQ09NQklORV9ST1cpIHx8IGRlZmluZWQoUE5HX0hBVkVfTU1YX1JFQURfSU5URVJMQUNFKQojICBkZWZpbmUgQlBQMiAgMgojICBkZWZpbmUgQlBQMyAgMyAgLy8gYnl0ZXMgcGVyIHBpeGVsIChhLmsuYS4gcGl4ZWxfYnl0ZXMpCiMgIGRlZmluZSBCUFA0ICA0ICAvLyAoZGVmaW5lZCBvbmx5IHRvIGhlbHAgYXZvaWQgY3V0LWFuZC1wYXN0ZSBlcnJvcnMpCiMgIGRlZmluZSBCUFA2ICA2CiMgIGRlZmluZSBCUFA4ICA4CiNlbmRpZgoKCgpzdGF0aWMgaW50IF9tbXhfc3VwcG9ydGVkID0gMjsgLy8gMDogbm8gTU1YOyAxOiBNTVggc3VwcG9ydGVkOyAyOiBub3QgdGVzdGVkCgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgUCBOIEcgXyBNIE0gWCBfIFMgVSBQIFAgTyBSIFQgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8vIEdSUiBOT1RFUzogICgxKSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyAzODYgb3IgYmV0dGVyIChwdXNoZmwvcG9wZmwpCi8vICAgICAgICAgICAgICgyKSBhbGwgaW5zdHJ1Y3Rpb25zIGNvbXBpbGUgd2l0aCBnY2MgMi43LjIuMyBhbmQgbGF0ZXIKLy8gICAgICAgICAgIHggKDMpIHRoZSBmdW5jdGlvbiBpcyBtb3ZlZCBkb3duIGhlcmUgdG8gcHJldmVudCBnY2MgZnJvbQovLyAgICAgICAgICAgeCAgICAgIGlubGluaW5nIGl0IGluIG11bHRpcGxlIHBsYWNlcyBhbmQgdGhlbiBiYXJmaW5nIGJlLQovLyAgICAgICAgICAgeCAgICAgIGNhdXNlIHRoZSAiLk5PVF9TVVBQT1JURUQiIGxhYmVsIGlzIG11bHRpcGx5IGRlZmluZWQKLy8gICAgICAgICAgICAgICAgICBbbmVlZCB0byByZXRlc3Qgd2l0aCBnY2MgMi43LjIuM10KCi8vIEdSUiAyMDA3MDUyNDogIFRoaXMgZGVjbGFyYXRpb24gYXBwYXJlbnRseSBpcyBjb21wYXRpYmxlIHdpdGggYnV0IHN1cGVyc2VkZXMKLy8gICB0aGUgb25lIGluIHBuZy5oOyBpbiBhbnkgY2FzZSwgdGhlIGdlbmVyYXRlZCBvYmplY3QgZmlsZSBpcyBzbGlnaHRseQovLyAgIHNtYWxsZXIuICBJdCBpcyB1bm5lY2Vzc2FyeSB3aXRoIGdjYyA0LjEuMiwgYnV0IGdjYyAyLnggYXBwYXJlbnRseQovLyAgIHJlcGxpY2F0ZWQgdGhlICIuTk9UX1NVUFBPUlRFRCIgbGFiZWwgaW4gZWFjaCBsb2NhdGlvbiB0aGUgZnVuY3Rpb24gd2FzCi8vICAgaW5saW5lZCwgbGVhZGluZyB0byBjb21waWxhdGlvbiBlcnJvcnMgZHVlIHRvIHRoZSAibXVsdGlwbHkgZGVmaW5lZCIKLy8gICBsYWJlbC4gIE9sZCB3b3JrYXJvdW5kIHdhcyB0byBsZWF2ZSB0aGUgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGlzCi8vICAgZmlsZTsgbmV3IG9uZSAoc3RpbGwgdGVzdGluZykgaXMgdG8gdXNlIGEgZ2NjLXNwZWNpZmljIGZ1bmN0aW9uIGF0dHJpYnV0ZQovLyAgIHRvIHByZXZlbnQgbG9jYWwgaW5saW5pbmcuCmludCBQTkdBUEkKcG5nX21teF9zdXBwb3J0KHZvaWQpIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSk7CgppbnQgUE5HQVBJCnBuZ19tbXhfc3VwcG9ydCh2b2lkKQp7CiNpZiBkZWZpbmVkKFBOR19NTVhfQ09ERV9TVVBQT1JURUQpICAvLyBzdXBlcmZsdW91cywgYnV0IHdoYXQgdGhlIGhlY2sKICAgIGludCByZXN1bHQ7CiAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiAgICAgICAgInB1c2hxICUlcmJ4ICAgICAgICAgIFxuXHQiICAvLyByYnggZ2V0cyBjbG9iYmVyZWQgYnkgQ1BVSUQgaW5zdHJ1Y3Rpb24KICAgICAgICAicHVzaHEgJSVyY3ggICAgICAgICAgXG5cdCIgIC8vIHNvIGRvZXMgcmN4Li4uCiAgICAgICAgInB1c2hxICUlcmR4ICAgICAgICAgIFxuXHQiICAvLyAuLi5hbmQgcmR4IChidXQgcmN4ICYgcmR4IHNhZmUgb24gTGludXgpCiAgICAgICAgInB1c2hmcSAgICAgICAgICAgICAgIFxuXHQiICAvLyBzYXZlIEVmbGFnIHRvIHN0YWNrCiAgICAgICAgInBvcHEgJSVyYXggICAgICAgICAgIFxuXHQiICAvLyBnZXQgRWZsYWcgZnJvbSBzdGFjayBpbnRvIHJheAogICAgICAgICJtb3ZxICUlcmF4LCAlJXJjeCAgICBcblx0IiAgLy8gbWFrZSBhbm90aGVyIGNvcHkgb2YgRWZsYWcgaW4gcmN4CiAgICAgICAgInhvcmwgJDB4MjAwMDAwLCAlJWVheCBcblx0IiAvLyB0b2dnbGUgSUQgYml0IGluIEVmbGFnIChpLmUuLCBiaXQgMjEpCiAgICAgICAgInB1c2hxICUlcmF4ICAgICAgICAgIFxuXHQiICAvLyBzYXZlIG1vZGlmaWVkIEVmbGFnIGJhY2sgdG8gc3RhY2sKICAgICAgICAicG9wZnEgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgbW9kaWZpZWQgdmFsdWUgdG8gRWZsYWcgcmVnCiAgICAgICAgInB1c2hmcSAgICAgICAgICAgICAgIFxuXHQiICAvLyBzYXZlIEVmbGFnIHRvIHN0YWNrCiAgICAgICAgInBvcHEgJSVyYXggICAgICAgICAgIFxuXHQiICAvLyBnZXQgRWZsYWcgZnJvbSBzdGFjawogICAgICAgICJwdXNocSAlJXJjeCAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBvcmlnaW5hbCBFZmxhZyB0byBzdGFjawogICAgICAgICJwb3BmcSAgICAgICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBvcmlnaW5hbCBFZmxhZwojZWxzZQogICAgICAgICJwdXNobCAlJWVieCAgICAgICAgICBcblx0IiAgLy8gZWJ4IGdldHMgY2xvYmJlcmVkIGJ5IENQVUlEIGluc3RydWN0aW9uCiAgICAgICAgInB1c2hsICUlZWN4ICAgICAgICAgIFxuXHQiICAvLyBzbyBkb2VzIGVjeC4uLgogICAgICAgICJwdXNobCAlJWVkeCAgICAgICAgICBcblx0IiAgLy8gLi4uYW5kIGVkeCAoYnV0IGVjeCAmIGVkeCBzYWZlIG9uIExpbnV4KQogICAgICAgICJwdXNoZmwgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjawogICAgICAgICJwb3BsICUlZWF4ICAgICAgICAgICBcblx0IiAgLy8gZ2V0IEVmbGFnIGZyb20gc3RhY2sgaW50byBlYXgKICAgICAgICAibW92bCAlJWVheCwgJSVlY3ggICAgXG5cdCIgIC8vIG1ha2UgYW5vdGhlciBjb3B5IG9mIEVmbGFnIGluIGVjeAogICAgICAgICJ4b3JsICQweDIwMDAwMCwgJSVlYXggXG5cdCIgLy8gdG9nZ2xlIElEIGJpdCBpbiBFZmxhZyAoaS5lLiwgYml0IDIxKQogICAgICAgICJwdXNobCAlJWVheCAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBtb2RpZmllZCBFZmxhZyBiYWNrIHRvIHN0YWNrCiAgICAgICAgInBvcGZsICAgICAgICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIG1vZGlmaWVkIHZhbHVlIHRvIEVmbGFnIHJlZwogICAgICAgICJwdXNoZmwgICAgICAgICAgICAgICBcblx0IiAgLy8gc2F2ZSBFZmxhZyB0byBzdGFjawogICAgICAgICJwb3BsICUlZWF4ICAgICAgICAgICBcblx0IiAgLy8gZ2V0IEVmbGFnIGZyb20gc3RhY2sKICAgICAgICAicHVzaGwgJSVlY3ggICAgICAgICAgXG5cdCIgIC8vIHNhdmUgb3JpZ2luYWwgRWZsYWcgdG8gc3RhY2sKICAgICAgICAicG9wZmwgICAgICAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgb3JpZ2luYWwgRWZsYWcKI2VuZGlmCiAgICAgICAgInhvcmwgJSVlY3gsICUlZWF4ICAgIFxuXHQiICAvLyBjb21wYXJlIG5ldyBFZmxhZyB3aXRoIG9yaWdpbmFsIEVmbGFnCiAgICAgICAgImp6IDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBpZiBzYW1lLCBDUFVJRCBpbnN0ci4gaXMgbm90IHN1cHBvcnRlZAoKICAgICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgXG5cdCIgIC8vIHNldCBlYXggdG8gemVybwovLyAgICAgICIuYnl0ZSAgMHgwZiwgMHhhMiAgICBcblx0IiAgLy8gQ1BVSUQgaW5zdHJ1Y3Rpb24gKHR3by1ieXRlIG9wY29kZSkKICAgICAgICAiY3B1aWQgICAgICAgICAgICAgICAgXG5cdCIgIC8vIGdldCB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uIGluZm8KICAgICAgICAiY21wbCAkMSwgJSVlYXggICAgICAgXG5cdCIgIC8vIG1ha2Ugc3VyZSBlYXggcmV0dXJuIG5vbi16ZXJvIHZhbHVlCiAgICAgICAgImpsIDBmICAgICAgICAgICAgICAgIFxuXHQiICAvLyBpZiBlYXggaXMgemVybywgTU1YIGlzIG5vdCBzdXBwb3J0ZWQKCiAgICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgIFxuXHQiICAvLyBzZXQgZWF4IHRvIHplcm8gYW5kLi4uCiAgICAgICAgImluY2wgJSVlYXggICAgICAgICAgIFxuXHQiICAvLyAuLi5pbmNyZW1lbnQgZWF4IHRvIDEuICBUaGlzIHBhaXIgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhc3RlciB0aGFuIHRoZSBpbnN0cnVjdGlvbiAibW92IGVheCwgMSIKICAgICAgICAiY3B1aWQgICAgICAgICAgICAgICAgXG5cdCIgIC8vIGdldCB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uIGluZm8gYWdhaW4KICAgICAgICAiYW5kbCAkMHg4MDAwMDAsICUlZWR4IFxuXHQiIC8vIG1hc2sgb3V0IGFsbCBiaXRzIGJ1dCBNTVggYml0ICgyMykKICAgICAgICAiY21wbCAkMCwgJSVlZHggICAgICAgXG5cdCIgIC8vIDAgPSBNTVggbm90IHN1cHBvcnRlZAogICAgICAgICJqeiAwZiAgICAgICAgICAgICAgICBcblx0IiAgLy8gbm9uLXplcm8gPSB5ZXMsIE1NWCBJUyBzdXBwb3J0ZWQKCiAgICAgICAgIm1vdmwgJDEsICUlZWF4ICAgICAgIFxuXHQiICAvLyBzZXQgcmV0dXJuIHZhbHVlIHRvIDEKICAgICAgICAiam1wICAxZiAgICAgICAgICAgICAgXG5cdCIgIC8vIERPTkU6ICBoYXZlIE1NWCBzdXBwb3J0CgogICAgIjA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gLk5PVF9TVVBQT1JURUQ6IHRhcmdldCBsYWJlbCBmb3IganVtcCBpbnN0cnVjdGlvbnMKICAgICAgICAibW92bCAkMCwgJSVlYXggICAgICAgXG5cdCIgIC8vIHNldCByZXR1cm4gdmFsdWUgdG8gMAogICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAgLy8gLlJFVFVSTjogdGFyZ2V0IGxhYmVsIGZvciBqdW1wIGluc3RydWN0aW9ucwojaWYgZGVmaW5lZChfX3g4Nl82NF9fKQogICAgICAgICJwb3BxICUlcmR4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSByZHgKICAgICAgICAicG9wcSAlJXJjeCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgcmN4CiAgICAgICAgInBvcHEgJSVyYnggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIHJieAojZWxzZQogICAgICAgICJwb3BsICUlZWR4ICAgICAgICAgICBcblx0IiAgLy8gcmVzdG9yZSBlZHgKICAgICAgICAicG9wbCAlJWVjeCAgICAgICAgICAgXG5cdCIgIC8vIHJlc3RvcmUgZWN4CiAgICAgICAgInBvcGwgJSVlYnggICAgICAgICAgIFxuXHQiICAvLyByZXN0b3JlIGVieAojZW5kaWYKCi8vICAgICAgInJldCAgICAgICAgICAgICAgICAgIFxuXHQiICAvLyBET05FOiAgbm8gTU1YIHN1cHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChmYWxsIHRocm91Z2ggdG8gc3RhbmRhcmQgQyAicmV0IikKCiAgICAgICAgOiAiPWEiIChyZXN1bHQpICAgICAgICAgICAgICAvLyBvdXRwdXQgbGlzdAoKICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueSB2YXJpYWJsZXMgdXNlZCBvbiBpbnB1dCAobm9uZSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBjbG9iYmVyIGxpc3QKLy8gICAgICAsICIlZWJ4IiwgIiVlY3giLCAiJWVkeCIgICAgIC8vIEdSUjogIHdlIGhhbmRsZSB0aGVzZSBtYW51YWxseQovLyAgICAgICwgIm1lbW9yeSIgICAvLyBpZiB3cml0ZSB0byBhIHZhcmlhYmxlIGdjYyB0aG91Z2h0IHdhcyBpbiBhIHJlZwovLyAgICAgICwgImNjIiAgICAgICAvLyAiY29uZGl0aW9uIGNvZGVzIiAoZmxhZyBiaXRzKQogICAgKTsKICAgIF9tbXhfc3VwcG9ydGVkID0gcmVzdWx0OwojZWxzZQogICAgX21teF9zdXBwb3J0ZWQgPSAwOwojZW5kaWYgLyogUE5HX01NWF9DT0RFX1NVUFBPUlRFRCAqLwoKICAgIHJldHVybiBfbW14X3N1cHBvcnRlZDsKfQoKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgUCBOIEcgXyBDIE8gTSBCIEkgTiBFIF8gUiBPIFcgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKI2lmIGRlZmluZWQoUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XKQoKLyogQ29tYmluZXMgdGhlIHJvdyByZWNlbnRseSByZWFkIGluIHdpdGggdGhlIHByZXZpb3VzIHJvdy4KICAgVGhpcyByb3V0aW5lIHRha2VzIGNhcmUgb2YgYWxwaGEgYW5kIHRyYW5zcGFyZW5jeSBpZiByZXF1ZXN0ZWQuCiAgIFRoaXMgcm91dGluZSBhbHNvIGhhbmRsZXMgdGhlIHR3byBtZXRob2RzIG9mIHByb2dyZXNzaXZlIGRpc3BsYXkKICAgb2YgaW50ZXJsYWNlZCBpbWFnZXMsIGRlcGVuZGluZyBvbiB0aGUgbWFzayB2YWx1ZS4KICAgVGhlIG1hc2sgdmFsdWUgZGVzY3JpYmVzIHdoaWNoIHBpeGVscyBhcmUgdG8gYmUgY29tYmluZWQgd2l0aAogICB0aGUgcm93LiAgVGhlIHBhdHRlcm4gYWx3YXlzIHJlcGVhdHMgZXZlcnkgOCBwaXhlbHMsIHNvIGp1c3QgOAogICBiaXRzIGFyZSBuZWVkZWQuICBBIG9uZSBpbmRpY2F0ZXMgdGhlIHBpeGVsIGlzIHRvIGJlIGNvbWJpbmVkOyBhCiAgIHplcm8gaW5kaWNhdGVzIHRoZSBwaXhlbCBpcyB0byBiZSBza2lwcGVkLiAgVGhpcyBpcyBpbiBhZGRpdGlvbgogICB0byBhbnkgYWxwaGEgb3IgdHJhbnNwYXJlbmN5IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGl4ZWwuCiAgIElmIHlvdSB3YW50IGFsbCBwaXhlbHMgdG8gYmUgY29tYmluZWQsIHBhc3MgMHhmZiAoMjU1KSBpbiBtYXNrLiAqLwoKLyogVXNlIHRoaXMgcm91dGluZSBmb3IgdGhlIHg4NiBwbGF0Zm9ybSAtIGl0IHVzZXMgYSBmYXN0ZXIgTU1YIHJvdXRpbmUKICAgaWYgdGhlIG1hY2hpbmUgc3VwcG9ydHMgTU1YLiAqLwoKdm9pZCAvKiBQUklWQVRFICovCnBuZ19jb21iaW5lX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgcm93LCBpbnQgbWFzaykKewogICBpbnQgZHVtbXlfdmFsdWVfYTsgICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcgZXJyb3IKICAgaW50IGR1bW15X3ZhbHVlX2M7CiAgIGludCBkdW1teV92YWx1ZV9kOwogICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfUzsKICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX0Q7CgogICBwbmdfZGVidWcoMSwgImluIHBuZ19jb21iaW5lX3JvdyAocG5nZ2NjcmQuYylcbiIpOwoKICAgaWYgKF9tbXhfc3VwcG9ydGVkID09IDIpIHsKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgIC8qIHRoaXMgc2hvdWxkIGhhdmUgaGFwcGVuZWQgaW4gcG5nX2luaXRfbW14X2ZsYWdzKCkgYWxyZWFkeSAqLwogICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgImFzbV9mbGFncyBtYXkgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCIpOwojZW5kaWYKICAgICAgIHBuZ19tbXhfc3VwcG9ydCgpOwogICB9CgogICBpZiAobWFzayA9PSAweGZmKQogICB7CiAgICAgIHBuZ19kZWJ1ZygyLCJtYXNrID09IDB4ZmY6ICBkb2luZyBzaW5nbGUgcG5nX21lbWNweSgpXG4iKTsKICAgICAgcG5nX21lbWNweShyb3csIHBuZ19wdHItPnJvd19idWYgKyAxLAogICAgICAgKHBuZ19zaXplX3QpUE5HX1JPV0JZVEVTKHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoLHBuZ19wdHItPndpZHRoKSk7CiAgIH0KICAgZWxzZSAgIC8qIChwbmdfY29tYmluZV9yb3coKSBpcyBuZXZlciBjYWxsZWQgd2l0aCBtYXNrID09IDApICovCiAgIHsKICAgICAgc3dpdGNoIChwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCkKICAgICAgewogICAgICAgICBjYXNlIDI0OiAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcmNwdHI7CiAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7CgojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICBpZiAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQojZWxzZQogICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKICAgICAgICAgICAgICAgaW50IGRpZmY7CgogICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OwogICAgICAgICAgICAgICBsZW4gID0gcG5nX3B0ci0+d2lkdGggJiB+NzsgICAgICAgICAgLy8gcmVkdWNlIHRvIG11bHRpcGxlIG9mIDgKICAgICAgICAgICAgICAgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAgIC8vIGFtb3VudCBsb3N0CgogICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtYXNrID0+IHVubWFzawogICAgICAgICAgICAgICAgICAibW92ZCAgICAgICUlZWR4LCAlJW1tNyAgICAgXG5cdCIgLy8gbG9hZCBiaXQgcGF0dGVybgogICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gdW5tYXNrID0+IG1hc2sgZm9yIGxhdGVyCiAgICAgICAgICAgICAgICAgICJwc3ViYiAgICAgJSVtbTYsICUlbW02ICAgICBcblx0IiAvLyB6ZXJvIG1tNgogICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTcsICUlbW03ICAgICBcblx0IiAvLyBmaWxsIHJlZyB3aXRoIDggbWFza3MKCiAgICAgICAgICAgICAgICAgIExPQURfR09UX3JicAogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzI0XzAgIiwgJSVtbTAgXG5cdCIgLy8gX21hc2syNF8wIC0+IG1tMAogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzI0XzEgIiwgJSVtbTEgXG5cdCIgLy8gX21hc2syNF8xIC0+IG1tMQogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzI0XzIgIiwgJSVtbTIgXG5cdCIgLy8gX21hc2syNF8yIC0+IG1tMgogICAgICAgICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0xICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMiAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTIgICAgIFxuXHQiCgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGxlbiwgJSVlY3ggICAgICAgXG5cdCIgLy8gbG9hZCBsZW5ndGggb2YgbGluZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICU0ICAgICAgIFxuXHQiIC8vIGxvYWQgZGVzdAoKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgbWFpbmxvb3AyNGVuZCAgICBcblx0IgoKICAgICAgICAgICAgICAgICJtYWlubG9vcDI0OiAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUzKSwgJSVtbTQgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0wLCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMCwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCU0KSwgJSVtbTcgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTQsICglNCkgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCUzKSwgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTEsICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0xLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCU0KSwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNSwgOCglNCkgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCUzKSwgJSVtbTYgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMiwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTIsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDE2KCU0KSwgJSVtbTcgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNywgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTQsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCAxNiglNCkgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDI0LCAlMyAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgMjQgYnl0ZXMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDI0LCAlNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAoKICAgICAgICAgICAgICAgICAgImphICAgICAgICBtYWlubG9vcDI0ICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgIm1haW5sb29wMjRlbmQ6ICAgICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkaWZmLCAlJWVjeCAgICAgIFxuXHQiIC8vIChkaWZmIGlzIGluIGVheCkKICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAianogICAgICAgIGVuZDI0ICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJDI0LCAlJWVkeCAgICAgICBcblx0IiAvLyBtYWtlIGxvdyBieXRlLCBoaWdoIGJ5dGUKCiAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDI0OiAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic2FsbCAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBoaWdoIGJpdCB0byBDRgogICAgICAgICAgICAgICAgICAiam5jICAgICAgIHNraXAyNCAgICAgICAgICAgXG5cdCIgLy8gaWYgQ0YgPSAwCiAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgKCUzKSwgJSVheCAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92dyAgICAgICUlYXgsICglNCkgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInhvcmwgICAgICAlJWVheCwgJSVlYXggICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZiICAgICAgMiglMyksICUlYWwgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92YiAgICAgICUlYWwsIDIoJTQpICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAic2tpcDI0OiAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQzLCAlMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMywgJTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJkZWNsICAgICAgJSVlY3ggICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiam56ICAgICAgIHNlY29uZGxvb3AyNCAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAiZW5kMjQ6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwKICAgICAgICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgOiAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4ICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spLCAgICAgICAgLy8gZWR4CiAgICAgICAgICAgICAgICAgICAgIjIiIChsZW4pLCAgICAgICAgIC8vIGVjeAovLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKICAgICAgICAgICAgICAgICAgICAiMyIgKHNyY3B0ciksICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICI0IiAoZHN0cHRyKSAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSAvKiBub3QgX21teF9zdXBwb3J0ZWQgLSB1c2UgbW9kaWZpZWQgQyByb3V0aW5lICovCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgaW5pdGlhbF92YWwgPSBCUFAzICogcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gQlBQMyAqIHBuZ19wYXNzX2luY1twbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX2luY1tdID0gezgsIDgsIDQsIDQsIDIsIDIsIDF9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgcmVwX2J5dGVzID0gQlBQMyAqIHBuZ19wYXNzX3dpZHRoW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfd2lkdGhbXSA9IHs4LCA0LCA0LCAyLCAyLCAxLCAxfTsgKi8KICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuID0gcG5nX3B0ci0+d2lkdGggJn43OyAgLyogcmVkdWNlIHRvIG11bHQuIG9mIDggKi8KICAgICAgICAgICAgICAgaW50IGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgLyogYW1vdW50IGxvc3QgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgcG5nX3VpbnRfMzIgZmluYWxfdmFsID0gQlBQMyAqIGxlbjsgICAvKiBHUlIgYnVnZml4ICovCgogICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMSArIGluaXRpYWxfdmFsOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3cgKyBpbml0aWFsX3ZhbDsKCiAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmIChkaWZmKSAgLyogbnVtYmVyIG9mIGxlZnRvdmVyIHBpeGVsczogIDMgZm9yIHBuZ3Rlc3QgKi8KICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmaW5hbF92YWwgKz0gZGlmZipCUFAzOwogICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcF9ieXRlcyA+IChpbnQpKGZpbmFsX3ZhbC1pKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmVwX2J5dGVzID0gKGludCkoZmluYWxfdmFsLWkpOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCByZXBfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gc3RyaWRlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAvKiBlbmQgb2YgZWxzZSAoX21teF9zdXBwb3J0ZWQpICovCgogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgMjQgYnBwICovCgogICAgICAgICAvLyBmb3JtZXJseSBjbGFpbWVkIHRvIGJlIG1vc3QgY29tbW9uIGNhc2UgKGNvbWJpbmluZyAzMi1iaXQgUkdCQSksCiAgICAgICAgIC8vIGJ1dCBhbG1vc3QgY2VydGFpbmx5IGxlc3MgY29tbW9uIHRoYW4gMjQtYml0IFJHQiBjYXNlCiAgICAgICAgIGNhc2UgMzI6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCiNlbHNlCiAgICAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwogICAgICAgICAgICAgICBpbnQgZGlmZjsKCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7CiAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAogICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7ICAgLy8gYW1vdW50IGxvc3QKCiAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgPT4gdW5tYXNrCiAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKICAgICAgICAgICAgICAgICAgInBzdWJiICAgICAlJW1tNiwgJSVtbTYgICAgIFxuXHQiIC8vIHplcm8gbW02CiAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tNywgJSVtbTcgICAgIFxuXHQiIC8vIGZpbGwgcmVnIHdpdGggOCBtYXNrcwoKICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMzJfMCAiLCAlJW1tMCBcblx0IiAvLyBfbWFzazMyXzAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0szMl8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrMzJfMQogICAgICAgICAgICAgICAgICAibW92cSAgICIgTUFTSzMyXzIgIiwgJSVtbTIgXG5cdCIgLy8gX21hc2szMl8yCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMzJfMyAiLCAlJW1tMyBcblx0IiAvLyBfbWFzazMyXzMKICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTIgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0zICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0xICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTMgICAgIFxuXHQiCgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGxlbiwgJSVlY3ggICAgICAgXG5cdCIgLy8gbG9hZCBsZW5ndGggb2YgbGluZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICU0ICAgICAgIFxuXHQiIC8vIGxvYWQgZGVzdAoKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGxjcgogICAgICAgICAgICAgICAgICAianogICAgICAgIG1haW5sb29wMzJlbmQgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3AzMjogICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICglMyksICUlbW00ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICglNCksICUlbW03ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNywgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTYsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAoJTQpICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglMyksICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0xLCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMSwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgOCglNCksICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNywgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTUsIDgoJTQpICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglMyksICUlbW02ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTIsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0yLCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAxNiglNCksICUlbW03ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTcsICUlbW00ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW00LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgMTYoJTQpICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDI0KCUzKSwgJSVtbTcgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTMsICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDI0KCU0KSwgJSVtbTQgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAlJW1tNCwgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTUsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW03LCAyNCglNCkgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDMyLCAlMyAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgMzIgYnl0ZXMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDMyLCAlNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic3VibCAgICAgICQ4LCAlJWVjeCAgICAgICAgXG5cdCIgLy8gZGVjIGJ5IDggcGl4ZWxzIHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAiamEgICAgICAgIG1haW5sb29wMzIgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3AzMmVuZDogICAgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGRpZmYsICUlZWN4ICAgICAgXG5cdCIgLy8gKGRpZmYgaXMgaW4gZWF4KQogICAgICAgICAgICAgICAgICAibW92bCAgICAgICUlZWF4LCAlJWVjeCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgZW5kMzIgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIG1hc2ssICUlZWR4ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAkMjQsICUlZWR4ICAgICAgIFxuXHQiIC8vIGxvdyBieXRlID0+IGhpZ2ggYnl0ZQoKICAgICAgICAgICAgICAgICJzZWNvbmRsb29wMzI6ICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBtb3ZlIGhpZ2ggYml0IHRvIENGCiAgICAgICAgICAgICAgICAgICJqbmMgICAgICAgc2tpcDMyICAgICAgICAgICBcblx0IiAvLyBpZiBDRiA9IDAKICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAoJTMpLCAlJWVheCAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgJSVlYXgsICglNCkgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJza2lwMzI6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDQsICUzICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ0LCAlNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImRlY2wgICAgICAlJWVjeCAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqbnogICAgICAgc2Vjb25kbG9vcDMyICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJlbmQzMjogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICA6ICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpLAogICAgICAgICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICA6ICIwIiAoZGlmZiksICAgICAgICAvLyBlYXggICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICIxIiAobWFzayksICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAgICAgICAiMiIgKGxlbiksICAgICAgICAgLy8gZWN4Ci8vIHdhcyAodW5tYXNrKSAgICAgImIiICAgIFJFU0VSVkVEICAgIC8vIGVieCAgICAgICAvLyBHbG9iYWwgT2Zmc2V0IFRhYmxlIGlkeAogICAgICAgICAgICAgICAgICAgICIzIiAoc3JjcHRyKSwgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgIjQiIChkc3RwdHIpICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIC8qIG5vdCBfbW14X3N1cHBvcnRlZCAtIHVzZSBtb2RpZmllZCBDIHJvdXRpbmUgKi8KICAgICAgICAgICAgewogICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOwogICAgICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDQgKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFA0ICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBCUFA0ICogcG5nX3Bhc3Nfd2lkdGhbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLwogICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwogICAgICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLwogICAgICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBCUFA0ICogbGVuOyAgIC8qIEdSUiBidWdmaXggKi8KCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwoKICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDQ7CiAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQogICAgICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9ICAgICAgIC8qIGVuZCAzMiBicHAgKi8KCiAgICAgICAgIGNhc2UgODogICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCiNlbHNlCiAgICAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwogICAgICAgICAgICAgICBpbnQgZGlmZjsKCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7CiAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAogICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7ICAgLy8gYW1vdW50IGxvc3QKCiAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgPT4gdW5tYXNrCiAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKICAgICAgICAgICAgICAgICAgInBzdWJiICAgICAlJW1tNiwgJSVtbTYgICAgIFxuXHQiIC8vIHplcm8gbW02CiAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tNywgJSVtbTcgICAgIFxuXHQiIC8vIGZpbGwgcmVnIHdpdGggOCBtYXNrcwoKICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLOF8wICIsICUlbW0wICBcblx0IiAvLyBfbWFzazhfMCAtPiBtbTAKICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgICBcblx0IiAvLyBub256ZXJvIGlmIGtlZXAgYnl0ZQogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMCAgICAgXG5cdCIgLy8gemVyb3MtPjFzLCB2IHZlcnNhCgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGxlbiwgJSVlY3ggICAgICAgXG5cdCIgLy8gbG9hZCBsZW5ndGggb2YgbGluZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICU0ICAgICAgIFxuXHQiIC8vIGxvYWQgZGVzdAoKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGxlbiA9PSAwID8KICAgICAgICAgICAgICAgICAgImplICAgICAgICBtYWlubG9vcDhlbmQgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgIm1haW5sb29wODogICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAoJTMpLCAlJW1tNCAgICAgIFxuXHQiIC8vICpzcmNwdHIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICglNCksICUlbW02ICAgICAgXG5cdCIgLy8gKmRzdHB0cgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNCwgKCU0KSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDgsICUzICAgICAgICAgICBcblx0IiAvLyBpbmMgYnkgOCBieXRlcyBwcm9jZXNzZWQKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkOCwgJTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzdWJsICAgICAgJDgsICUlZWN4ICAgICAgICBcblx0IiAvLyBkZWMgYnkgOCBwaXhlbHMgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICJqYSAgICAgICAgbWFpbmxvb3A4ICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJtYWlubG9vcDhlbmQ6ICAgICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZGlmZiwgJSVlY3ggICAgICBcblx0IiAvLyAoZGlmZiBpcyBpbiBlYXgpCiAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgJSVlYXgsICUlZWN4ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBlbmQ4ICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbWFzaywgJSVlZHggICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbWFrZSBsb3cgYnl0ZSwgaGlnaCBieXRlCgogICAgICAgICAgICAgICAgInNlY29uZGxvb3A4OiAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKICAgICAgICAgICAgICAgICAgImpuYyAgICAgICBza2lwOCAgICAgICAgICAgIFxuXHQiIC8vIGlmIENGID0gMAogICAgICAgICAgICAgICAgICAibW92YiAgICAgICglMyksICUlYWwgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdmIgICAgICAlJWFsLCAoJTQpICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgInNraXA4OiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImluYyAgICAgICAlMyAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJpbmMgICAgICAgJTQgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiZGVjbCAgICAgICUlZWN4ICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wOCAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgImVuZDg6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksCiAgICAgICAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgIDogIjAiIChkaWZmKSwgICAgICAgIC8vIGVheCAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgIjEiIChtYXNrKSwgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICAgICAgICIyIiAobGVuKSwgICAgICAgICAvLyBlY3gKLy8gd2FzICh1bm1hc2spICAgICAiYiIgICAgUkVTRVJWRUQgICAgLy8gZWJ4ICAgICAgIC8vIEdsb2JhbCBPZmZzZXQgVGFibGUgaWR4CiAgICAgICAgICAgICAgICAgICAgIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAiNCIgKGRzdHB0cikgICAgICAgLy8gZWRpL3JkaQoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTQiLCAiJW1tNiIsICIlbW03IiAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgLyogbm90IF9tbXhfc3VwcG9ydGVkIC0gdXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gcG5nX3Bhc3Nfc3RhcnRbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19zdGFydFtdID0gezAsIDQsIDAsIDIsIDAsIDEsIDB9OyAqLwogICAgICAgICAgICAgICByZWdpc3RlciBpbnQgc3RyaWRlID0gcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCiAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IGxlbjsgIC8qIEdSUiBidWdmaXggKi8KCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwoKICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmIC8qICpCUFAxICovIDsKICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9IC8qIGVuZCBvZiBlbHNlIChfbW14X3N1cHBvcnRlZCkgKi8KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9ICAgICAgIC8qIGVuZCA4IGJwcCAqLwoKICAgICAgICAgY2FzZSAxOiAgICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3A7CiAgICAgICAgICAgIHBuZ19ieXRlcCBkcDsKICAgICAgICAgICAgaW50IHNfaW5jLCBzX3N0YXJ0LCBzX2VuZDsKICAgICAgICAgICAgaW50IG07CiAgICAgICAgICAgIGludCBzaGlmdDsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKCiAgICAgICAgICAgIHNwID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgIGRwID0gcm93OwogICAgICAgICAgICBtID0gMHg4MDsKI2lmIGRlZmluZWQoUE5HX1JFQURfUEFDS1NXQVBfU1VQUE9SVEVEKQogICAgICAgICAgICBpZiAocG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zICYgUE5HX1BBQ0tTV0FQKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwogICAgICAgICAgICAgICBzX2VuZCA9IDc7CiAgICAgICAgICAgICAgIHNfaW5jID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSA3OwogICAgICAgICAgICAgICBzX2VuZCA9IDA7CiAgICAgICAgICAgICAgIHNfaW5jID0gLTE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHNoaWZ0ID0gc19zdGFydDsKCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbmdfcHRyLT53aWR0aDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlmIChtICYgbWFzaykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpbnQgdmFsdWU7CgogICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqc3AgPj4gc2hpZnQpICYgMHgxOwogICAgICAgICAgICAgICAgICAqZHAgJj0gKHBuZ19ieXRlKSgoMHg3ZjdmID4+ICg3IC0gc2hpZnQpKSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7CiAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgIHNwKys7CiAgICAgICAgICAgICAgICAgIGRwKys7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBzaGlmdCArPSBzX2luYzsKCiAgICAgICAgICAgICAgIGlmIChtID09IDEpCiAgICAgICAgICAgICAgICAgIG0gPSAweDgwOwogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIG0gPj49IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAgLyogZW5kIDEgYnBwICovCgogICAgICAgICBjYXNlIDI6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcDsKICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwogICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwogICAgICAgICAgICBpbnQgbTsKICAgICAgICAgICAgaW50IHNoaWZ0OwogICAgICAgICAgICBwbmdfdWludF8zMiBpOwogICAgICAgICAgICBpbnQgdmFsdWU7CgogICAgICAgICAgICBzcCA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICBkcCA9IHJvdzsKICAgICAgICAgICAgbSA9IDB4ODA7CiNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKICAgICAgICAgICAgaWYgKHBuZ19wdHItPnRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKICAgICAgICAgICAgICAgc19lbmQgPSA2OwogICAgICAgICAgICAgICBzX2luYyA9IDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBzX3N0YXJ0ID0gNjsKICAgICAgICAgICAgICAgc19lbmQgPSAwOwogICAgICAgICAgICAgICBzX2luYyA9IC0yOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiAobSAmIG1hc2spCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoKnNwID4+IHNoaWZ0KSAmIDB4MzsKICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4M2YzZiA+PiAoNiAtIHNoaWZ0KSkgJiAweGZmKTsKICAgICAgICAgICAgICAgICAgKmRwIHw9IChwbmdfYnl0ZSkodmFsdWUgPDwgc2hpZnQpOwogICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICBpZiAoc2hpZnQgPT0gc19lbmQpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc2hpZnQgPSBzX3N0YXJ0OwogICAgICAgICAgICAgICAgICBzcCsrOwogICAgICAgICAgICAgICAgICBkcCsrOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgICAgIGlmIChtID09IDEpCiAgICAgICAgICAgICAgICAgIG0gPSAweDgwOwogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIG0gPj49IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAgLyogZW5kIDIgYnBwICovCgogICAgICAgICBjYXNlIDQ6ICAgICAgICAvKiBwbmdfcHRyLT5yb3dfaW5mby5waXhlbF9kZXB0aCAqLwogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcDsKICAgICAgICAgICAgcG5nX2J5dGVwIGRwOwogICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwogICAgICAgICAgICBpbnQgbTsKICAgICAgICAgICAgaW50IHNoaWZ0OwogICAgICAgICAgICBwbmdfdWludF8zMiBpOwogICAgICAgICAgICBpbnQgdmFsdWU7CgogICAgICAgICAgICBzcCA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICBkcCA9IHJvdzsKICAgICAgICAgICAgbSA9IDB4ODA7CiNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKICAgICAgICAgICAgaWYgKHBuZ19wdHItPnRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKICAgICAgICAgICAgICAgc19lbmQgPSA0OwogICAgICAgICAgICAgICBzX2luYyA9IDQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBzX3N0YXJ0ID0gNDsKICAgICAgICAgICAgICAgc19lbmQgPSAwOwogICAgICAgICAgICAgICBzX2luYyA9IC00OwogICAgICAgICAgICB9CgogICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG5nX3B0ci0+d2lkdGg7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiAobSAmIG1hc2spCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoKnNwID4+IHNoaWZ0KSAmIDB4ZjsKICAgICAgICAgICAgICAgICAgKmRwICY9IChwbmdfYnl0ZSkoKDB4ZjBmID4+ICg0IC0gc2hpZnQpKSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2YWx1ZSA8PCBzaGlmdCk7CiAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgIGlmIChzaGlmdCA9PSBzX2VuZCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgIHNwKys7CiAgICAgICAgICAgICAgICAgIGRwKys7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBzaGlmdCArPSBzX2luYzsKICAgICAgICAgICAgICAgaWYgKG0gPT0gMSkKICAgICAgICAgICAgICAgICAgbSA9IDB4ODA7CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgbSA+Pj0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAvKiBlbmQgNCBicHAgKi8KCiAgICAgICAgIGNhc2UgMTY6ICAgICAgIC8qIHBuZ19wdHItPnJvd19pbmZvLnBpeGVsX2RlcHRoICovCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNyY3B0cjsKICAgICAgICAgICAgcG5nX2J5dGVwIGRzdHB0cjsKCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCiNlbHNlCiAgICAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwogICAgICAgICAgICAgICBpbnQgZGlmZjsKCiAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICAgICBkc3RwdHIgPSByb3c7CiAgICAgICAgICAgICAgIGxlbiAgPSBwbmdfcHRyLT53aWR0aCAmIH43OyAgICAgICAgICAvLyByZWR1Y2UgdG8gbXVsdGlwbGUgb2YgOAogICAgICAgICAgICAgICBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7ICAgLy8gYW1vdW50IGxvc3QKCiAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgPT4gdW5tYXNrCiAgICAgICAgICAgICAgICAgICJtb3ZkICAgICAgJSVlZHgsICUlbW03ICAgICBcblx0IiAvLyBsb2FkIGJpdCBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICJub3QgICAgICAgJSVlZHggICAgICAgICAgICBcblx0IiAvLyB1bm1hc2sgPT4gbWFzayBmb3IgbGF0ZXIKICAgICAgICAgICAgICAgICAgInBzdWJiICAgICAlJW1tNiwgJSVtbTYgICAgIFxuXHQiIC8vIHplcm8gbW02CiAgICAgICAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW03LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tNywgJSVtbTcgICAgIFxuXHQiIC8vIGZpbGwgcmVnIHdpdGggOCBtYXNrcwoKICAgICAgICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMTZfMCAiLCAlJW1tMCBcblx0IiAvLyBfbWFzazE2XzAgLT4gbW0wCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgIiBNQVNLMTZfMSAiLCAlJW1tMSBcblx0IiAvLyBfbWFzazE2XzEgLT4gbW0xCiAgICAgICAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTEgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTEgICAgIFxuXHQiCgovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIGxlbiwgJSVlY3ggICAgICAgXG5cdCIgLy8gbG9hZCBsZW5ndGggb2YgbGluZQovLyBwcmVsb2FkICAgICAgICAibW92bCAgICAgIHNyY3B0ciwgJTMgICAgICAgXG5cdCIgLy8gbG9hZCBzb3VyY2UKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkc3RwdHIsICU0ICAgICAgIFxuXHQiIC8vIGxvYWQgZGVzdAoKICAgICAgICAgICAgICAgICAgImNtcGwgICAgICAkMCwgJSVlY3ggICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJqeiAgICAgICAgbWFpbmxvb3AxNmVuZCAgICBcblx0IgoKICAgICAgICAgICAgICAgICJtYWlubG9vcDE2OiAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCUzKSwgJSVtbTQgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0wLCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMCwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgKCU0KSwgJSVtbTcgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTQsICglNCkgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCUzKSwgJSVtbTUgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTEsICUlbW01ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0xLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCU0KSwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgJSVtbTYsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNSwgOCglNCkgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQxNiwgJTMgICAgICAgICAgXG5cdCIgLy8gaW5jIGJ5IDE2IGJ5dGVzIHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQxNiwgJTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInN1YmwgICAgICAkOCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGRlYyBieSA4IHBpeGVscyBwcm9jZXNzZWQKICAgICAgICAgICAgICAgICAgImphICAgICAgICBtYWlubG9vcDE2ICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgIm1haW5sb29wMTZlbmQ6ICAgICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBkaWZmLCAlJWVjeCAgICAgIFxuXHQiIC8vIChkaWZmIGlzIGluIGVheCkKICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgJSVlY3ggICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAianogICAgICAgIGVuZDE2ICAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBtYXNrLCAlJWVkeCAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJzYWxsICAgICAgJDI0LCAlJWVkeCAgICAgICBcblx0IiAvLyBtYWtlIGxvdyBieXRlLCBoaWdoIGJ5dGUKCiAgICAgICAgICAgICAgICAic2Vjb25kbG9vcDE2OiAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic2FsbCAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBoaWdoIGJpdCB0byBDRgogICAgICAgICAgICAgICAgICAiam5jICAgICAgIHNraXAxNiAgICAgICAgICAgXG5cdCIgLy8gaWYgQ0YgPSAwCiAgICAgICAgICAgICAgICAgICJtb3Z3ICAgICAgKCUzKSwgJSVheCAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92dyAgICAgICUlYXgsICglNCkgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAic2tpcDE2OiAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQyLCAlMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkMiwgJTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJkZWNsICAgICAgJSVlY3ggICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiam56ICAgICAgIHNlY29uZGxvb3AxNiAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAiZW5kMTY6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgOiAiPWEiIChkdW1teV92YWx1ZV9hKSwgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwKICAgICAgICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgOiAiMCIgKGRpZmYpLCAgICAgICAgLy8gZWF4ICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAiMSIgKG1hc2spLCAgICAgICAgLy8gZWR4CiAgICAgICAgICAgICAgICAgICAgIjIiIChsZW4pLCAgICAgICAgIC8vIGVjeAovLyB3YXMgKHVubWFzaykgICAgICJiIiAgICBSRVNFUlZFRCAgICAvLyBlYnggICAgICAgLy8gR2xvYmFsIE9mZnNldCBUYWJsZSBpZHgKICAgICAgICAgICAgICAgICAgICAiMyIgKHNyY3B0ciksICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICI0IiAoZHN0cHRyKSAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW00IiAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICAgICAgLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgLyogbm90IF9tbXhfc3VwcG9ydGVkIC0gdXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gQlBQMiAqIHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDIgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDIgKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCiAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDIgKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7CgogICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQMjsKICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKF9tbXhfc3VwcG9ydGVkKSAqLwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAgLyogZW5kIDE2IGJwcCAqLwoKICAgICAgICAgY2FzZSA0ODogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwoKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgICAgaWYgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKI2Vsc2UKICAgICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgICAgewogICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47CiAgICAgICAgICAgICAgIGludCBkaWZmOwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDE7CiAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKICAgICAgICAgICAgICAgbGVuICA9IHBuZ19wdHItPndpZHRoICYgfjc7ICAgICAgICAgIC8vIHJlZHVjZSB0byBtdWx0aXBsZSBvZiA4CiAgICAgICAgICAgICAgIGRpZmYgPSAoaW50KSAocG5nX3B0ci0+d2lkdGggJiA3KTsgICAvLyBhbW91bnQgbG9zdAoKICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAibm90ICAgICAgICUlZWR4ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayA9PiB1bm1hc2sKICAgICAgICAgICAgICAgICAgIm1vdmQgICAgICAlJWVkeCwgJSVtbTcgICAgIFxuXHQiIC8vIGxvYWQgYml0IHBhdHRlcm4KICAgICAgICAgICAgICAgICAgIm5vdCAgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIHVubWFzayA9PiBtYXNrIGZvciBsYXRlcgogICAgICAgICAgICAgICAgICAicHN1YmIgICAgICUlbW02LCAlJW1tNiAgICAgXG5cdCIgLy8gemVybyBtbTYKICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTcsICUlbW03ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW03LCAlJW1tNyAgICAgXG5cdCIgLy8gZmlsbCByZWcgd2l0aCA4IG1hc2tzCgogICAgICAgICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF8wICIsICUlbW0wIFxuXHQiIC8vIF9tYXNrNDhfMCAtPiBtbTAKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF8xICIsICUlbW0xIFxuXHQiIC8vIF9tYXNrNDhfMSAtPiBtbTEKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF8yICIsICUlbW0yIFxuXHQiIC8vIF9tYXNrNDhfMiAtPiBtbTIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF8zICIsICUlbW0zIFxuXHQiIC8vIF9tYXNrNDhfMyAtPiBtbTMKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF80ICIsICUlbW00IFxuXHQiIC8vIF9tYXNrNDhfNCAtPiBtbTQKICAgICAgICAgICAgICAgICAgIm1vdnEgICAiIE1BU0s0OF81ICIsICUlbW01IFxuXHQiIC8vIF9tYXNrNDhfNSAtPiBtbTUKICAgICAgICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0wICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tMSAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTIgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTcsICUlbW0zICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW03LCAlJW1tNCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tNywgJSVtbTUgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMCAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTEgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW0yICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGNtcGVxYiAgICUlbW02LCAlJW1tMyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBjbXBlcWIgICAlJW1tNiwgJSVtbTQgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwY21wZXFiICAgJSVtbTYsICUlbW01ICAgICBcblx0IgoKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBsZW4sICUlZWN4ICAgICAgIFxuXHQiIC8vIGxvYWQgbGVuZ3RoIG9mIGxpbmUKLy8gcHJlbG9hZCAgICAgICAgIm1vdmwgICAgICBzcmNwdHIsICUzICAgICAgIFxuXHQiIC8vIGxvYWQgc291cmNlCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZHN0cHRyLCAlNCAgICAgICBcblx0IiAvLyBsb2FkIGRlc3QKCiAgICAgICAgICAgICAgICAgICJjbXBsICAgICAgJDAsICUlZWN4ICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAianogICAgICAgIG1haW5sb29wNDhlbmQgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAibWFpbmxvb3A0ODogICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICglMyksICUlbW03ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMCwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTAsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgICglNCksICUlbW02ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTcsICglNCkgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICA4KCUzKSwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTEsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW0xLCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICA4KCU0KSwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTcsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCA4KCU0KSAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgMTYoJTMpLCAlJW1tNiAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW0yLCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tMiwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgMTYoJTQpLCAlJW1tNyAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW03LCAlJW1tNiAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNiwgMTYoJTQpICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAibW92cSAgICAgIDI0KCUzKSwgJSVtbTcgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmQgICAgICAlJW1tMywgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTMsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZG4gICAgIDI0KCU0KSwgJSVtbTYgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBvciAgICAgICAlJW1tNiwgJSVtbTcgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgJSVtbTcsIDI0KCU0KSAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAzMiglMyksICUlbW02ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kICAgICAgJSVtbTQsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW00LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInBhbmRuICAgICAzMiglNCksICUlbW03ICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwb3IgICAgICAgJSVtbTcsICUlbW02ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAibW92cSAgICAgICUlbW02LCAzMiglNCkgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICJtb3ZxICAgICAgNDAoJTMpLCAlJW1tNyAgICBcblx0IgogICAgICAgICAgICAgICAgICAicGFuZCAgICAgICUlbW01LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNSwgJSVtbTYgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJwYW5kbiAgICAgNDAoJTQpLCAlJW1tNiAgICBcblx0IgogICAgICAgICAgICAgICAgICAicG9yICAgICAgICUlbW02LCAlJW1tNyAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdnEgICAgICAlJW1tNywgNDAoJTQpICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ0OCwgJTMgICAgICAgICAgXG5cdCIgLy8gaW5jIGJ5IDQ4IGJ5dGVzIHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAiYWRkICAgICAgICQ0OCwgJTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInN1YmwgICAgICAkOCwgJSVlY3ggICAgICAgIFxuXHQiIC8vIGRlYyBieSA4IHBpeGVscyBwcm9jZXNzZWQKCiAgICAgICAgICAgICAgICAgICJqYSAgICAgICAgbWFpbmxvb3A0OCAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICJtYWlubG9vcDQ4ZW5kOiAgICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgZGlmZiwgJSVlY3ggICAgICBcblx0IiAvLyAoZGlmZiBpcyBpbiBlYXgpCiAgICAgICAgICAgICAgICAgICJtb3ZsICAgICAgJSVlYXgsICUlZWN4ICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiY21wbCAgICAgICQwLCAlJWVjeCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImp6ICAgICAgICBlbmQ0OCAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICAgICAgICJtb3ZsICAgICAgbWFzaywgJSVlZHggICAgICBcblx0IgogICAgICAgICAgICAgICAgICAic2FsbCAgICAgICQyNCwgJSVlZHggICAgICAgXG5cdCIgLy8gbWFrZSBsb3cgYnl0ZSwgaGlnaCBieXRlCgogICAgICAgICAgICAgICAgInNlY29uZGxvb3A0ODogICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgInNhbGwgICAgICAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgaGlnaCBiaXQgdG8gQ0YKICAgICAgICAgICAgICAgICAgImpuYyAgICAgICBza2lwNDggICAgICAgICAgIFxuXHQiIC8vIGlmIENGID0gMAogICAgICAgICAgICAgICAgICAibW92bCAgICAgICglMyksICUlZWF4ICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIm1vdmwgICAgICAlJWVheCwgKCU0KSAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgInNraXA0ODogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImFkZCAgICAgICAkNCwgJTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICJhZGQgICAgICAgJDQsICU0ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAiZGVjbCAgICAgICUlZWN4ICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgImpueiAgICAgICBzZWNvbmRsb29wNDggICAgIFxuXHQiCgogICAgICAgICAgICAgICAgImVuZDQ4OiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgIDogIj1hIiAoZHVtbXlfdmFsdWVfYSksICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksCiAgICAgICAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgIDogIjAiIChkaWZmKSwgICAgICAgIC8vIGVheCAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgIjEiIChtYXNrKSwgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICAgICAgICIyIiAobGVuKSwgICAgICAgICAvLyBlY3gKLy8gd2FzICh1bm1hc2spICAgICAiYiIgICAgUkVTRVJWRUQgICAgLy8gZWJ4ICAgICAgIC8vIEdsb2JhbCBPZmZzZXQgVGFibGUgaWR4CiAgICAgICAgICAgICAgICAgICAgIjMiIChzcmNwdHIpLCAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAiNCIgKGRzdHB0cikgICAgICAgLy8gZWRpL3JkaQoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgLyogbm90IF9tbXhfc3VwcG9ydGVkIC0gdXNlIG1vZGlmaWVkIEMgcm91dGluZSAqLwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGluaXRpYWxfdmFsID0gQlBQNiAqIHBuZ19wYXNzX3N0YXJ0W3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3Nfc3RhcnRbXSA9IHswLCA0LCAwLCAyLCAwLCAxLCAwfTsgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHN0cmlkZSA9IEJQUDYgKiBwbmdfcGFzc19pbmNbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsgKi8KICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHJlcF9ieXRlcyA9IEJQUDYgKiBwbmdfcGFzc193aWR0aFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3dpZHRoW10gPSB7OCwgNCwgNCwgMiwgMiwgMSwgMX07ICovCiAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbiA9IHBuZ19wdHItPndpZHRoICZ+NzsgIC8qIHJlZHVjZSB0byBtdWx0LiBvZiA4ICovCiAgICAgICAgICAgICAgIGludCBkaWZmID0gKGludCkgKHBuZ19wdHItPndpZHRoICYgNyk7IC8qIGFtb3VudCBsb3N0ICovCiAgICAgICAgICAgICAgIHJlZ2lzdGVyIHBuZ191aW50XzMyIGZpbmFsX3ZhbCA9IEJQUDYgKiBsZW47ICAgLyogR1JSIGJ1Z2ZpeCAqLwoKICAgICAgICAgICAgICAgc3JjcHRyID0gcG5nX3B0ci0+cm93X2J1ZiArIDEgKyBpbml0aWFsX3ZhbDsKICAgICAgICAgICAgICAgZHN0cHRyID0gcm93ICsgaW5pdGlhbF92YWw7CgogICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBzdHJpZGUpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoZGlmZikgIC8qIG51bWJlciBvZiBsZWZ0b3ZlciBwaXhlbHM6ICAzIGZvciBwbmd0ZXN0ICovCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZmluYWxfdmFsICs9IGRpZmYqQlBQNjsKICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBfYnl0ZXMgPiAoaW50KShmaW5hbF92YWwtaSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcF9ieXRlcyA9IChpbnQpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcmVwX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IHN0cmlkZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gLyogZW5kIG9mIGVsc2UgKF9tbXhfc3VwcG9ydGVkKSAqLwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAgLyogZW5kIDQ4IGJwcCAqLwoKICAgICAgICAgY2FzZSA2NDogICAgICAgLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggKi8KICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3JjcHRyOwogICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwogICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBpOwogICAgICAgICAgICBwbmdfdWludF8zMiBpbml0aWFsX3ZhbCA9IEJQUDggKiBwbmdfcGFzc19zdGFydFtwbmdfcHRyLT5wYXNzXTsKICAgICAgICAgICAgICAvKiBwbmcuYzogIHBuZ19wYXNzX3N0YXJ0W10gPSB7MCwgNCwgMCwgMiwgMCwgMSwgMH07ICovCiAgICAgICAgICAgIHJlZ2lzdGVyIGludCBzdHJpZGUgPSBCUFA4ICogcG5nX3Bhc3NfaW5jW3BuZ19wdHItPnBhc3NdOwogICAgICAgICAgICAgIC8qIHBuZy5jOiAgcG5nX3Bhc3NfaW5jW10gPSB7OCwgOCwgNCwgNCwgMiwgMiwgMX07ICovCiAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXBfYnl0ZXMgPSBCUFA4ICogcG5nX3Bhc3Nfd2lkdGhbcG5nX3B0ci0+cGFzc107CiAgICAgICAgICAgICAgLyogcG5nLmM6ICBwbmdfcGFzc193aWR0aFtdID0gezgsIDQsIDQsIDIsIDIsIDEsIDF9OyAqLwogICAgICAgICAgICBwbmdfdWludF8zMiBsZW4gPSBwbmdfcHRyLT53aWR0aCAmfjc7ICAvKiByZWR1Y2UgdG8gbXVsdC4gb2YgOCAqLwogICAgICAgICAgICBpbnQgZGlmZiA9IChpbnQpIChwbmdfcHRyLT53aWR0aCAmIDcpOyAvKiBhbW91bnQgbG9zdCAqLwogICAgICAgICAgICByZWdpc3RlciBwbmdfdWludF8zMiBmaW5hbF92YWwgPSBCUFA4ICogbGVuOyAgIC8qIEdSUiBidWdmaXggKi8KCiAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxICsgaW5pdGlhbF92YWw7CiAgICAgICAgICAgIGRzdHB0ciA9IHJvdyArIGluaXRpYWxfdmFsOwoKICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gc3RyaWRlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGRpZmYpICAvKiBudW1iZXIgb2YgbGVmdG92ZXIgcGl4ZWxzOiAgMyBmb3IgcG5ndGVzdCAqLwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGZpbmFsX3ZhbCArPSBkaWZmKkJQUDg7CiAgICAgICAgICAgICAgIGZvciAoOyBpIDwgZmluYWxfdmFsOyBpICs9IHN0cmlkZSkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAocmVwX2J5dGVzID4gKGludCkoZmluYWxfdmFsLWkpKQogICAgICAgICAgICAgICAgICAgICByZXBfYnl0ZXMgPSAoaW50KShmaW5hbF92YWwtaSk7CiAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHJlcF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBzdHJpZGU7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAgLyogZW5kIDY0IGJwcCAqLwoKICAgICAgICAgZGVmYXVsdDogLyogcG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGggIT0gMSwyLDQsOCwxNiwyNCwzMiw0OCw2NCAqLwogICAgICAgICB7CiAgICAgICAgICAgIC8vIEVSUk9SOiAgU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICAgICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKICAgICAgICAgICAgICAicG5nX2NvbWJpbmVfcm93KCkgcGl4ZWxfZGVwdGgpXG4iKTsKI2VuZGlmCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgIH0gLyogZW5kIHN3aXRjaCAocG5nX3B0ci0+cm93X2luZm8ucGl4ZWxfZGVwdGgpICovCgogICB9IC8qIGVuZCBpZiAobm9uLXRyaXZpYWwgbWFzaykgKi8KCn0gLyogZW5kIHBuZ19jb21iaW5lX3JvdygpICovCgojZW5kaWYgLyogUE5HX0hBVkVfTU1YX0NPTUJJTkVfUk9XICovCgoKCgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgIFAgTiBHIF8gRCBPIF8gUiBFIEEgRCBfIEkgTiBUIEUgUiBMIEEgQyBFICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCiNpZiBkZWZpbmVkKFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCkKI2lmIGRlZmluZWQoUE5HX0hBVkVfTU1YX1JFQURfSU5URVJMQUNFKQoKLyogcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgaXMgY2FsbGVkIGFmdGVyIGFueSAxNi1iaXQgdG8gOC1iaXQgY29udmVyc2lvbgogKiBoYXMgdGFrZW4gcGxhY2UuICBbR1JSOiB3aGF0IG90aGVyIHN0ZXBzIGNvbWUgYmVmb3JlIGFuZC9vciBhZnRlcj9dCiAqLwoKdm9pZCAvKiBQUklWQVRFICovCnBuZ19kb19yZWFkX2ludGVybGFjZShwbmdfc3RydWN0cCBwbmdfcHRyKQp7CiAgIHBuZ19yb3dfaW5mb3Agcm93X2luZm8gPSAmKHBuZ19wdHItPnJvd19pbmZvKTsKICAgcG5nX2J5dGVwIHJvdyA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICBpbnQgcGFzcyA9IHBuZ19wdHItPnBhc3M7CiNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKICAgcG5nX3VpbnRfMzIgdHJhbnNmb3JtYXRpb25zID0gcG5nX3B0ci0+dHJhbnNmb3JtYXRpb25zOwojZW5kaWYKCiAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2RvX3JlYWRfaW50ZXJsYWNlIChwbmdnY2NyZC5jKVxuIik7CgogICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgewojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7CiNlbmRpZgogICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgIH0KCiAgIGlmIChyb3cgIT0gTlVMTCAmJiByb3dfaW5mbyAhPSBOVUxMKQogICB7CiAgICAgIHBuZ191aW50XzMyIGZpbmFsX3dpZHRoOwoKICAgICAgZmluYWxfd2lkdGggPSByb3dfaW5mby0+d2lkdGggKiBwbmdfcGFzc19pbmNbcGFzc107CgogICAgICBzd2l0Y2ggKHJvd19pbmZvLT5waXhlbF9kZXB0aCkKICAgICAgewogICAgICAgICBjYXNlIDE6CiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX2J5dGVwIHNwLCBkcDsKICAgICAgICAgICAgaW50IHNzaGlmdCwgZHNoaWZ0OwogICAgICAgICAgICBpbnQgc19zdGFydCwgc19lbmQsIHNfaW5jOwogICAgICAgICAgICBwbmdfYnl0ZSB2OwogICAgICAgICAgICBwbmdfdWludF8zMiBpOwogICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgIHNwID0gcm93ICsgKHBuZ19zaXplX3QpKChyb3dfaW5mby0+d2lkdGggLSAxKSA+PiAzKTsKICAgICAgICAgICAgZHAgPSByb3cgKyAocG5nX3NpemVfdCkoKGZpbmFsX3dpZHRoIC0gMSkgPj4gMyk7CiNpZiBkZWZpbmVkKFBOR19SRUFEX1BBQ0tTV0FQX1NVUFBPUlRFRCkKICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9ucyAmIFBOR19QQUNLU1dBUCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBzc2hpZnQgPSAoaW50KSgocm93X2luZm8tPndpZHRoICsgNykgJiA3KTsKICAgICAgICAgICAgICAgZHNoaWZ0ID0gKGludCkoKGZpbmFsX3dpZHRoICsgNykgJiA3KTsKICAgICAgICAgICAgICAgc19zdGFydCA9IDc7CiAgICAgICAgICAgICAgIHNfZW5kID0gMDsKICAgICAgICAgICAgICAgc19pbmMgPSAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHNzaGlmdCA9IDcgLSAoaW50KSgocm93X2luZm8tPndpZHRoICsgNykgJiA3KTsKICAgICAgICAgICAgICAgZHNoaWZ0ID0gNyAtIChpbnQpKChmaW5hbF93aWR0aCArIDcpICYgNyk7CiAgICAgICAgICAgICAgIHNfc3RhcnQgPSAwOwogICAgICAgICAgICAgICBzX2VuZCA9IDc7CiAgICAgICAgICAgICAgIHNfaW5jID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChpID0gcm93X2luZm8tPndpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdiA9IChwbmdfYnl0ZSkoKCpzcCA+PiBzc2hpZnQpICYgMHgxKTsKICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweDdmN2YgPj4gKDcgLSBkc2hpZnQpKSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2IDw8IGRzaGlmdCk7CiAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ID0gc19zdGFydDsKICAgICAgICAgICAgICAgICAgICAgZHAtLTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoc3NoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHNzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgIHNwLS07CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBzc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KCiAgICAgICAgIGNhc2UgMjoKICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3AsIGRwOwogICAgICAgICAgICBpbnQgc3NoaWZ0LCBkc2hpZnQ7CiAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CgogICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X2luZm8tPndpZHRoIC0gMSkgPj4gMik7CiAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDIpOwojaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc3NoaWZ0ID0gKHBuZ19zaXplX3QpKCgocm93X2luZm8tPndpZHRoICsgMykgJiAzKSA8PCAxKTsKICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgoZmluYWxfd2lkdGggKyAzKSAmIDMpIDw8IDEpOwogICAgICAgICAgICAgICBzX3N0YXJ0ID0gNjsKICAgICAgICAgICAgICAgc19lbmQgPSAwOwogICAgICAgICAgICAgICBzX2luYyA9IC0yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc3NoaWZ0ID0gKHBuZ19zaXplX3QpKCgzIC0gKChyb3dfaW5mby0+d2lkdGggKyAzKSAmIDMpKSA8PCAxKTsKICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgzIC0gKChmaW5hbF93aWR0aCArIDMpICYgMykpIDw8IDEpOwogICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKICAgICAgICAgICAgICAgc19lbmQgPSA2OwogICAgICAgICAgICAgICBzX2luYyA9IDI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9IHJvd19pbmZvLT53aWR0aDsgaTsgaS0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHBuZ19ieXRlIHY7CiAgICAgICAgICAgICAgIGludCBqOwoKICAgICAgICAgICAgICAgdiA9IChwbmdfYnl0ZSkoKCpzcCA+PiBzc2hpZnQpICYgMHgzKTsKICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweDNmM2YgPj4gKDYgLSBkc2hpZnQpKSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgICAqZHAgfD0gKHBuZ19ieXRlKSh2IDw8IGRzaGlmdCk7CiAgICAgICAgICAgICAgICAgIGlmIChkc2hpZnQgPT0gc19lbmQpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ID0gc19zdGFydDsKICAgICAgICAgICAgICAgICAgICAgZHAtLTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGRzaGlmdCArPSBzX2luYzsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoc3NoaWZ0ID09IHNfZW5kKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHNzaGlmdCA9IHNfc3RhcnQ7CiAgICAgICAgICAgICAgICAgIHNwLS07CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBzc2hpZnQgKz0gc19pbmM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KCiAgICAgICAgIGNhc2UgNDoKICAgICAgICAgewogICAgICAgICAgICBwbmdfYnl0ZXAgc3AsIGRwOwogICAgICAgICAgICBpbnQgc3NoaWZ0LCBkc2hpZnQ7CiAgICAgICAgICAgIGludCBzX3N0YXJ0LCBzX2VuZCwgc19pbmM7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CgogICAgICAgICAgICBzcCA9IHJvdyArIChwbmdfc2l6ZV90KSgocm93X2luZm8tPndpZHRoIC0gMSkgPj4gMSk7CiAgICAgICAgICAgIGRwID0gcm93ICsgKHBuZ19zaXplX3QpKChmaW5hbF93aWR0aCAtIDEpID4+IDEpOwojaWYgZGVmaW5lZChQTkdfUkVBRF9QQUNLU1dBUF9TVVBQT1JURUQpCiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbnMgJiBQTkdfUEFDS1NXQVApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc3NoaWZ0ID0gKHBuZ19zaXplX3QpKCgocm93X2luZm8tPndpZHRoICsgMSkgJiAxKSA8PCAyKTsKICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgoZmluYWxfd2lkdGggKyAxKSAmIDEpIDw8IDIpOwogICAgICAgICAgICAgICBzX3N0YXJ0ID0gNDsKICAgICAgICAgICAgICAgc19lbmQgPSAwOwogICAgICAgICAgICAgICBzX2luYyA9IC00OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKI2VuZGlmCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgc3NoaWZ0ID0gKHBuZ19zaXplX3QpKCgxIC0gKChyb3dfaW5mby0+d2lkdGggKyAxKSAmIDEpKSA8PCAyKTsKICAgICAgICAgICAgICAgZHNoaWZ0ID0gKHBuZ19zaXplX3QpKCgxIC0gKChmaW5hbF93aWR0aCArIDEpICYgMSkpIDw8IDIpOwogICAgICAgICAgICAgICBzX3N0YXJ0ID0gMDsKICAgICAgICAgICAgICAgc19lbmQgPSA0OwogICAgICAgICAgICAgICBzX2luYyA9IDQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9IHJvd19pbmZvLT53aWR0aDsgaTsgaS0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHBuZ19ieXRlIHY7CiAgICAgICAgICAgICAgIGludCBqOwoKICAgICAgICAgICAgICAgdiA9IChwbmdfYnl0ZSkoKCpzcCA+PiBzc2hpZnQpICYgMHhmKTsKICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpkcCAmPSAocG5nX2J5dGUpKCgweGYwZiA+PiAoNCAtIGRzaGlmdCkpICYgMHhmZik7CiAgICAgICAgICAgICAgICAgICpkcCB8PSAocG5nX2J5dGUpKHYgPDwgZHNoaWZ0KTsKICAgICAgICAgICAgICAgICAgaWYgKGRzaGlmdCA9PSBzX2VuZCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBkc2hpZnQgPSBzX3N0YXJ0OwogICAgICAgICAgICAgICAgICAgICBkcC0tOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZHNoaWZ0ICs9IHNfaW5jOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmIChzc2hpZnQgPT0gc19lbmQpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3NoaWZ0ID0gc19zdGFydDsKICAgICAgICAgICAgICAgICAgc3AtLTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHNzaGlmdCArPSBzX2luYzsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgfQoKICAgICAgIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKICAgICAgICAgZGVmYXVsdDogLyogOC1iaXQgb3IgbGFyZ2VyICh0aGlzIGlzIHdoZXJlIHRoZSByb3V0aW5lIGlzIG1vZGlmaWVkKSAqLwogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19ieXRlcCBzcHRyLCBkcDsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgcG5nX3NpemVfdCBwaXhlbF9ieXRlczsKICAgICAgICAgICAgaW50IHdpZHRoID0gKGludClyb3dfaW5mby0+d2lkdGg7CgogICAgICAgICAgICBwaXhlbF9ieXRlcyA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj4gMyk7CgogICAgICAgICAgICAvKiBwb2ludCBzcHRyIGF0IHRoZSBsYXN0IHBpeGVsIGluIHRoZSBwcmUtZXhwYW5kZWQgcm93OiAqLwogICAgICAgICAgICBzcHRyID0gcm93ICsgKHdpZHRoIC0gMSkgKiBwaXhlbF9ieXRlczsKCiAgICAgICAgICAgIC8qIHBvaW50IGRwIGF0IHRoZSBsYXN0IHBpeGVsIHBvc2l0aW9uIGluIHRoZSBleHBhbmRlZCByb3c6ICovCiAgICAgICAgICAgIGRwID0gcm93ICsgKGZpbmFsX3dpZHRoIC0gMSkgKiBwaXhlbF9ieXRlczsKCiAgICAgICAgICAgIC8qIE5ldyBjb2RlIGJ5IE5pcmF2IENoaGF0cmFwYXRpIC0gSW50ZWwgQ29ycG9yYXRpb24gKi8KCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgIGlmIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFKQojZWxzZQogICAgICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCiNlbmRpZgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGludCBkdW1teV92YWx1ZV9jOyAgICAgICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgc3BpbGxlZCcKICAgICAgICAgICAgICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX1M7CiAgICAgICAgICAgICAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9EOwogICAgICAgICAgICAgICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfYTsKICAgICAgICAgICAgICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX2Q7CgogICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIGlmIChwaXhlbF9ieXRlcyA9PSBCUFAzKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpIC0gODsgICAvLyBHUlI6ICBodWg/CiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXggPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhfbW14ID0gMDsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gOCBvciA5IHBpeCwgMjQgb3IgMjcgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBwbmdfcGFzc19pbmNbXSA9IHs4LCA4LCA0LCA0LCAyLCAyLCAxfTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3B0ciBwb2ludHMgYXQgbGFzdCBwaXhlbCBpbiBwcmUtZXhwYW5kZWQgcm93CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRwIHBvaW50cyBhdCBsYXN0IHBpeGVsIHBvc2l0aW9uIGluIGV4cGFuZGVkIHJvdwogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzLCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOSwgJTIgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gKyAxKSpwaXhlbF9ieXRlcwoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wM19wYXNzNDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIHggeCA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgXG5cdCIgLy8geCB4IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0wICAgICAgICBcblx0IiAvLyA0IDMgMiAxIDAgeiB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhbmQgKCUzKSwgJSVtbTEgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDI0LCAlJW1tMiAgICAgICAgXG5cdCIgLy8geiB6IHogeCB4IDUgNCAzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTEsICUlbW0wICAgICAgICBcblx0IiAvLyA0IDMgMiAxIDAgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW0zICAgICAgIFxuXHQiIC8vIHogeiB6IHggeCA1IDQgMwogICAgICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDgsICUlbW0yICAgICAgICAgXG5cdCIgLy8geiB6IHggeCA1IDQgMyB6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tMyAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IHggeCA1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYW5kICglNCksICUlbW0zICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogeiB6IDUKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMywgJSVtbTIgICAgICAgIFxuXHQiIC8vIHogeiB4IHggNSA0IDMgNQogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNiwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgJSVtbTIsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxMiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDNfcGFzczQgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9ZCIgKGR1bW15X3ZhbHVlX2QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgICAgICAvLyBlZGkvcmRpCiNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSAgICAgLy8gZm9ybWVybHkgX2NvbnN0NCBhbmQgX2NvbnN0NjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYzY0Ll9hbWFzazVfM18wKSwgLy8gKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiAoJl9jNjQuX2FtYXNrN18xXzApICAvLyAoMHgwMDAwMDAwMDAwMDAwMEZGTEwpCiNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiICgmX2FtYXNrNV8zXzApLCAgLy8gZWF4ICgweDAwMDAwMDAwMDBGRkZGRkZMTCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgKCZfYW1hc2s3XzFfMCkgICAvLyBlZHggKDB4MDAwMDAwMDAwMDAwMDBGRkxMKQojZW5kaWYKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAsICIlbW0yIiwgIiVtbTMiCiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teCpCUFAzOwogICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqMipCUFAzOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwoKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFAzKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFAzOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQMzsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOSwgJTIgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChwbmdfcGFzc19pbmNbcGFzc10gLSAxKSpwaXhlbF9ieXRlcwoKICAgICAgICAgICAgICAgICAgICAgIi5sb29wM19wYXNzMjogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IHggMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgInBhbmQgKCUzKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0wICAgICAgICBcblx0IiAvLyB6IHogeiAyIDEgMCB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgIFxuXHQiIC8vIHogeiB6IDIgMSAwIHogegogICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMiAxIDAgeiB6IHogeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICJwc3JscSAkOCwgJSVtbTEgICAgICAgICBcblx0IiAvLyB6IHogeiB6IHogeiAyIDEKICAgICAgICAgICAgICAgICAgICAgICAgInBvciAlJW1tMiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDIgMSAwIDIgMSAwIHogegogICAgICAgICAgICAgICAgICAgICAgICAicG9yICUlbW0xLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgMiAxCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA0KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IDIgMSAwIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzLCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDEyLCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJkZWNsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wM19wYXNzMiAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aCksICAgICAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApLCAgICAgICAgICAgIC8vIGVkaS9yZGkKI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpICAgICAgICAgICAvLyBmb3JtZXJseSBfY29uc3Q0OgogICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9jNjQuX2FtYXNrNV8zXzApICAvLyAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCiNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiICgmX2FtYXNrNV8zXzApICAgLy8gZWF4ICgweDAwMDAwMDAwMDBGRkZGRkZMTCkKI2VuZGlmCgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vICYmICgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyMSwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHBuZ19wYXNzX2luY1twYXNzXSAtIDEpKnBpeGVsX2J5dGVzCgogICAgICAgICAgICAgICAgICAgICAiLmxvb3AzX3Bhc3MwOiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHggeCB4IHggeCAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAicGFuZCAoJTMpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geiB6IHogeiB6IDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyB6IHogeiB6IHogMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiB6IDIgMSAwIHogegogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgXG5cdCIgLy8geiB6IHogMiAxIDAgeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCB6IHogeiB6IHoKICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQ4LCAlJW1tMSAgICAgICAgIFxuXHQiIC8vIHogeiB6IHogeiB6IDIgMQogICAgICAgICAgICAgICAgICAgICAgICAicG9yICUlbW0yLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMiAxIDAgMiAxIDAgeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICJwb3IgJSVtbTEsICUlbW0wICAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCAyIDEKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0zICAgICAgIFxuXHQiIC8vIDIgMSAwIDIgMSAwIDIgMQogICAgICAgICAgICAgICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gMCAyIDEgMCAyIDEgeiB6CiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tNCAgICAgICBcblx0IiAvLyAyIDEgMCAyIDEgMCAyIDEKICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMCwgJSVtbTMgIFxuXHQiIC8vIDAgMiAxIDAgMiAxIDAgMgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tNCwgMTYoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInBzcmxxICQzMiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHogeiB6IHogMCAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMywgOCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tNCwgJSVtbTAgIFxuXHQiIC8vIDEgMCAyIDEgMCAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMywgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyNCwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiZGVjbCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDNfcGFzczAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGgpLCAgICAgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSwgICAgICAgICAgICAvLyBlZGkvcmRpCiNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSAgICAgICAgICAgLy8gZm9ybWVybHkgX2NvbnN0NDoKICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgKCZfYzY0Ll9hbWFzazVfM18wKSAgLy8gKDB4MDAwMDAwMDAwMEZGRkZGRkxMKQojZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICIzIiAoJl9hbWFzazVfM18wKSAgIC8vIGVheCAoMHgwMDAwMDAwMDAwRkZGRkZGTEwpCiNlbmRpZgoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICwgIiVtbTMiLCAiJW1tNCIKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gMyAqLwoKICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBlbHNlIGlmIChwaXhlbF9ieXRlcyA9PSBCUFA0KQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICgoKHBhc3MgPT0gNCkgfHwgKHBhc3MgPT0gNSkpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpIDsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDQgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTIsICUyICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDRfcGFzczQ6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xkcSAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMiAxIDAgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGRxICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA2IDUgNCA3IDYgNSA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxNiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDRfcGFzczQgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KkJQUDQgLSBCUFA0KTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjIqQlBQNCAtIEJQUDQpOyAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQNDsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKHBhc3MgPT0gMikgfHwgKHBhc3MgPT0gMykpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsNCBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDQsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyOCwgJTIgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wNF9wYXNzMjogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDEgMCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTEsICUlbW0xICBcblx0IiAvLyA3IDYgNSA0IDcgNiA1IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgMTYoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDI0KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMzIsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3MyICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gKHdpZHRoX21teCo0IC0gNCk7IC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gKHdpZHRoX21teCoxNiAtIDQpOyAgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICAgICBzcHRyIC09IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2lkdGgpICAvLyAmJiAoKHBhc3MgPT0gMCkgfHwgKHBhc3MgPT0gMSkpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMSkgPDwgMSk7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCw0IGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDYwLCAlMiAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3A0X3Bhc3MwOiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIDcgNiA1IDQgMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMSAwIDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDcgNiA1IDQgNyA2IDUgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAxNiglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMjQoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDMyKCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA0MCglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgNDgoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA1NiglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNjQsICUyICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YmwgJDIsICUlZWN4ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJqbnogLmxvb3A0X3Bhc3MwICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1NUyAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gRE9ORQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKHdpZHRoX21teCksICAgICAvLyBlY3ggIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgKHNwdHIpLCAgICAgICAgICAvLyBlc2kvcnNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiIChkcCkgICAgICAgICAgICAgLy8gZWRpL3JkaQoKI2lmIGRlZmluZWQoUE5HX0NMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqNCAtIDQpOyAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqMzIgLSA0KTsgIC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSA0OwogICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDQgKi8KCiAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gMSkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAzKSA8PCAzKTsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMC0zIHBpeGVscyA9PiAwLTMgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ3LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTUsICUyICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDFfcGFzczQ6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMyAyIDIgMSAxIDAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraGJ3ICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gNyA3IDYgNiA1IDUgNCA0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCA4KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxNiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkOCwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczQgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OwogICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqMjsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoX21teCA9ICgod2lkdGggPj4gMikgPDwgMik7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAtMyBwaXhlbHMgPT4gMC0zIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMywgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDE1LCAlMiAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3AxX3Bhc3MyOiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICBcblx0IiAvLyAzIDMgMiAyIDEgMSAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDEgMSAxIDEgMCAwIDAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNraHdkICUlbW0xLCAlJW1tMSAgXG5cdCIgLy8gMyAzIDMgMyAyIDIgMiAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQxNiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkNCwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDFfcGFzczIgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gd2lkdGhfbW14OwogICAgICAgICAgICAgICAgICAgICBkcCAtPSB3aWR0aF9tbXgqNDsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gJiYgKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDIpIDw8IDIpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLTMgcGl4ZWxzID0+IDAtMyBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzMSwgJTIgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMV9wYXNzMDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAzIDIgMiAxIDEgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICBcblx0IiAvLyAzIDMgMiAyIDEgMSAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDEgMSAxIDEgMCAwIDAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTMgICAgICAgXG5cdCIgLy8gMSAxIDEgMSAwIDAgMCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAwIDAgMCAwIDAgMCAwIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMywgJSVtbTMgIFxuXHQiIC8vIDEgMSAxIDEgMSAxIDEgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2h3ZCAlJW1tMiwgJSVtbTIgIFxuXHQiIC8vIDMgMyAzIDMgMiAyIDIgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMywgOCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgIFxuXHQiIC8vIDMgMyAzIDMgMiAyIDIgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0yLCAlJW1tMiAgXG5cdCIgLy8gMiAyIDIgMiAyIDIgMiAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTQsICUlbW00ICBcblx0IiAvLyAzIDMgMyAzIDMgMyAzIDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTIsIDE2KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tNCwgMjQoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMyLCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQ0LCAlJWVjeCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wMV9wYXNzMCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAsICIlbW0zIiwgIiVtbTQiCiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IHdpZHRoX21teDsKICAgICAgICAgICAgICAgICAgICAgZHAgLT0gd2lkdGhfbW14Kjg7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CgogICAgICAgICAgICAgICAgICAgICAgIC8qIEkgc2ltcGxpZmllZCB0aGlzIHBhcnQgaW4gdmVyc2lvbiAxLjAuNGUKICAgICAgICAgICAgICAgICAgICAgICAgKiBoZXJlIGFuZCBpbiBzZXZlcmFsIG90aGVyIGluc3RhbmNlcyB3aGVyZQogICAgICAgICAgICAgICAgICAgICAgICAqIHBpeGVsX2J5dGVzID09IDEgIC0tIEdSLVAKICAgICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAqIE9yaWdpbmFsIGNvZGU6CiAgICAgICAgICAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgKiBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgICAqIHBuZ19tZW1jcHkodiwgc3B0ciwgcGl4ZWxfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAqIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgKiB7CiAgICAgICAgICAgICAgICAgICAgICAgICogICAgcG5nX21lbWNweShkcCwgdiwgcGl4ZWxfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAqICAgIGRwIC09IHBpeGVsX2J5dGVzOwogICAgICAgICAgICAgICAgICAgICAgICAqIH0KICAgICAgICAgICAgICAgICAgICAgICAgKiBzcHRyIC09IHBpeGVsX2J5dGVzOwogICAgICAgICAgICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICogUmVwbGFjZW1lbnQgY29kZSBpcyBpbiB0aGUgbmV4dCB0aHJlZSBsaW5lczoKICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAqZHAtLSA9ICpzcHRyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC0tc3B0cjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0gLyogZW5kIG9mIHBpeGVsX2J5dGVzID09IDEgKi8KCiAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQMikKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKChwYXNzID09IDQpIHx8IChwYXNzID09IDUpKSAmJiB3aWR0aCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhfbW14ID0gKCh3aWR0aCA+PiAxKSA8PCAxKSA7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoIC09IHdpZHRoX21teDsgICAgICAgIC8vIDAsMSBwaXhlbHMgPT4gMCwyIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aF9tbXgpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMiwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDYsICUyICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAgICAgICAgICAgICAiLmxvb3AyX3Bhc3M0OiAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmQgKCUxKSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIHggeCB4IHggMyAyIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbHdkICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDgsICUyICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wMl9wYXNzNCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KkJQUDIgLSBCUFAyKTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjIqQlBQMiAtIEJQUDIpOyAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQMjsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCBCUFAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKHBhc3MgPT0gMikgfHwgKHBhc3MgPT0gMykpICYmIHdpZHRoKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpIDsKICAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gd2lkdGhfbW14OyAgICAgICAgLy8gMCwxIHBpeGVscyA9PiAwLDIgYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoX21teCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQyLCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkMTQsICUyICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICAgICAgICAgICAgICIubG9vcDJfcGFzczI6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ZCAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8geCB4IHggeCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsd2QgJSVtbTAsICUlbW0wICBcblx0IiAvLyAzIDIgMyAyIDEgMCAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgIFxuXHQiIC8vIDMgMiAzIDIgMSAwIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAicHVucGNrbGRxICUlbW0wLCAlJW1tMCAgXG5cdCIgLy8gMSAwIDEgMCAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2toZHEgJSVtbTEsICUlbW0xICBcblx0IiAvLyAzIDIgMyAyIDMgMiAzIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ0LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMSwgOCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDE2LCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJsICQyLCAlJWVjeCAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wMl9wYXNzMiAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aF9tbXgpLCAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICBzcHRyIC09ICh3aWR0aF9tbXgqMiAtIDIpOyAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGRwIC09ICh3aWR0aF9tbXgqOCAtIDIpOyAgIC8vIHNpZ24gZml4ZWQKICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfYnl0ZSB2WzhdOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdpZHRoKSAgLy8gJiYgKChwYXNzID09IDApIHx8IChwYXNzID09IDEpKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aF9tbXggPSAoKHdpZHRoID4+IDEpIDw8IDEpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aF9tbXg7ICAgICAgICAvLyAwLDEgcGl4ZWxzID0+IDAsMiBieXRlcwogICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhfbW14KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDIsICUxICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzMCwgJTIgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgICAgICAgICAgICAgIi5sb29wMl9wYXNzMDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZkICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyB4IHggeCB4IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2x3ZCAlJW1tMCwgJSVtbTAgIFxuXHQiIC8vIDMgMiAzIDIgMSAwIDEgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgXG5cdCIgLy8gMyAyIDMgMiAxIDAgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdW5wY2tsZHEgJSVtbTAsICUlbW0wICBcblx0IiAvLyAxIDAgMSAwIDEgMCAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1bnBja2hkcSAlJW1tMSwgJSVtbTEgIFxuXHQiIC8vIDMgMiAzIDIgMyAyIDMgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgKCUyKSAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDgoJTIpICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0xLCAxNiglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNCwgJTEgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDI0KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQzMiwgJTIgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3VibCAkMiwgJSVlY3ggICAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImpueiAubG9vcDJfcGFzczAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBET05FCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpCgogICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAod2lkdGhfbW14KSwgICAgIC8vIGVjeCAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiAoc3B0ciksICAgICAgICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgKGRwKSAgICAgICAgICAgICAvLyBlZGkvcmRpCgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSAod2lkdGhfbW14KjIgLSAyKTsgLy8gc2lnbiBmaXhlZAogICAgICAgICAgICAgICAgICAgICBkcCAtPSAod2lkdGhfbW14KjE2IC0gMik7ICAvLyBzaWduIGZpeGVkCiAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweSh2LCBzcHRyLCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSAyICovCgogICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDgpCiAgICAgICAgICAgICAgIHsKLy8gR1JSIFRFU1Q6ICBzaG91bGQgd29yaywgYnV0IG5lZWRzIHRlc3RpbmcgKHNwZWNpYWwgNjQtYml0IHZlcnNpb24gb2YgcnBuZzI/KQogICAgICAgICAgICAgICAgICAvLyBHUlIgTk9URTogIG5vIG5lZWQgdG8gY29tYmluZSBwYXNzZXMgaGVyZSEKICAgICAgICAgICAgICAgICAgaWYgKCgocGFzcyA9PSA0KSB8fCAocGFzcyA9PSA1KSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gc291cmNlIGlzIDgtYnl0ZSBSUkdHQkJBQQogICAgICAgICAgICAgICAgICAgICAvLyBkZXN0IGlzIDE2LWJ5dGUgUlJHR0JCQUEgUlJHR0JCQUEKICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkOCwgJTIgICAgICAgICAgICAgXG5cdCIgLy8gc3RhcnQgb2YgbGFzdCBibG9jawoKICAgICAgICAgICAgICAgICAgICAgIi5sb29wOF9wYXNzNDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDE2LCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJkZWNsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wOF9wYXNzNCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aCksICAgICAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICAgICAgICAgICAgICA6ICIlbW0wIiAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiNlbmRpZgogICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgocGFzcyA9PSAyKSB8fCAocGFzcyA9PSAzKSkgJiYgd2lkdGgpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gc291cmNlIGlzIDgtYnl0ZSBSUkdHQkJBQQogICAgICAgICAgICAgICAgICAgICAvLyBkZXN0IGlzIDMyLWJ5dGUgUlJHR0JCQUEgUlJHR0JCQUEgUlJHR0JCQUEgUlJHR0JCQUEKICAgICAgICAgICAgICAgICAgICAgLy8gKHJlY2FsbCB0aGF0IGV4cGFuc2lvbiBpcyBfaW4gcGxhY2VfOiAgc3B0ciBhbmQgZHAKICAgICAgICAgICAgICAgICAgICAgLy8gIGJvdGggcG9pbnQgYXQgbG9jYXRpb25zIHdpdGhpbiBzYW1lIHJvdyBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDI0LCAlMiAgICAgICAgICAgIFxuXHQiIC8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKCiAgICAgICAgICAgICAgICAgICAgICIubG9vcDhfcGFzczI6ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAoJTEpLCAlJW1tMCAgICAgICAgXG5cdCIgLy8gNyA2IDUgNCAzIDIgMSAwCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAoJTIpICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgOCglMikgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDE2KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMjQoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDMyLCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJkZWNsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wOF9wYXNzMiAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aCksICAgICAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aWR0aCkgIC8vICYmICgocGFzcyA9PSAwKSB8fCAocGFzcyA9PSAxKSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBzb3VyY2UgaXMgOC1ieXRlIFJSR0dCQkFBCiAgICAgICAgICAgICAgICAgICAgIC8vIGRlc3QgaXMgNjQtYnl0ZSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQSBSUkdHQkJBQSAuLi4KICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAgICAgICAgICAgICAic3ViICAkNTYsICUyICAgICAgICAgICAgXG5cdCIgLy8gc3RhcnQgb2YgbGFzdCBibG9jawoKICAgICAgICAgICAgICAgICAgICAgIi5sb29wOF9wYXNzMDogICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICglMSksICUlbW0wICAgICAgICBcblx0IiAvLyA3IDYgNSA0IDMgMiAxIDAKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsICglMikgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCA4KCUyKSAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgMTYoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDI0KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZxICUlbW0wLCAzMiglMikgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgNDAoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdnEgJSVtbTAsIDQ4KCUyKSAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJzdWIgICQ4LCAlMSAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92cSAlJW1tMCwgNTYoJTIpICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgInN1YiAgJDY0LCAlMiAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgICJkZWNsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiam56IC5sb29wOF9wYXNzMCAgICAgICAgXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIERPTkUKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkKCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiICh3aWR0aCksICAgICAgICAgLy8gZWN4ICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIChzcHRyKSwgICAgICAgICAgLy8gZXNpL3JzaQogICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAoZHApICAgICAgICAgICAgIC8vIGVkaS9yZGkKCiNpZiBkZWZpbmVkKFBOR19DTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiJW1tMCIgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IC8qIGVuZCBvZiBwaXhlbF9ieXRlcyA9PSA4ICovCgogICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IEJQUDYpICAgLy8gd2h5IG5vIE1NWCBmb3IgdGhpcyBjYXNlPwogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHdpZHRoOyBpOyBpLS0pCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGUgdls4XTsKICAgICAgICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodiwgc3B0ciwgQlBQNik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbmdfcGFzc19pbmNbcGFzc107IGorKykKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCB2LCBCUFA2KTsKICAgICAgICAgICAgICAgICAgICAgICAgZHAgLT0gQlBQNjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzcHRyIC09IEJQUDY7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfSAvKiBlbmQgb2YgcGl4ZWxfYnl0ZXMgPT0gNiAqLwoKICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLy8gRVJST1I6ICBTSE9VTEQgTkVWRVIgQkUgUkVBQ0hFRAojaWYgZGVmaW5lZChQTkdfREVCVUcpCiAgICAgICAgICAgICAgICAgIHBuZ19kZWJ1ZygxLCAiSW50ZXJuYWwgbGlicG5nIGxvZ2ljIGVycm9yIChHQ0MgIgogICAgICAgICAgICAgICAgICAgICJwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBfbW14X3N1cHBvcnRlZClcbiIpOwojZW5kaWYKICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSAvLyBlbmQgb2YgX21teF9zdXBwb3J0ZWQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgZWxzZSAvKiBNTVggbm90IHN1cHBvcnRlZDogIHVzZSBtb2RpZmllZCBDIGNvZGUgLSB0YWtlcyBhZHZhbnRhZ2UKICAgICAgICAgICAgICAgICAgKiAgIG9mIGlubGluaW5nIG9mIHBuZ19tZW1jcHkgZm9yIGEgY29uc3RhbnQgKi8KICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQMykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDMpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQMyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDM7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFAzOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQNCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDQpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgIHsKI2lmIGRlZmluZWQoUE5HX0RFQlVHKSAmJiBkZWZpbmVkKFBOR18xXzBfWCkgIC8vIHJvd19idWZfc2l6ZSBnb25lIGluIDEuMi54CiAgICAgICAgICAgICAgICAgICAgaWYgKGRwIDwgcm93IHx8IGRwKzMgPiByb3crcG5nX3B0ci0+cm93X2J1Zl9zaXplKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImRwIG91dCBvZiBib3VuZHM6IHJvdz0lMTBwLCBkcD0lMTBwLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicnA9JTEwcFxuIiwgcm93LCBkcCwgcm93K3BuZ19wdHItPnJvd19idWZfc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJyb3dfYnVmX3NpemU9JWx1XG4iLCBwbmdfcHRyLT5yb3dfYnVmX3NpemUpOwogICAgICAgICAgICAgICAgICAgIH0KI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHYsIEJQUDQpOwogICAgICAgICAgICAgICAgICAgICAgICBkcCAtPSBCUFA0OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHNwdHIgLT0gQlBQNDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsX2J5dGVzID09IDEpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gd2lkdGg7IGk7IGktLSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgajsKICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBuZ19wYXNzX2luY1twYXNzXTsgaisrKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICpkcC0tID0gKnNwdHI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgLS1zcHRyOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQMikKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDIpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFAyOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQNikKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDYpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQNik7CiAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDY7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFA2OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZSBpZiAocGl4ZWxfYnl0ZXMgPT0gQlBQOCkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IgKGkgPSB3aWR0aDsgaTsgaS0tKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlIHZbOF07CiAgICAgICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHYsIHNwdHIsIEJQUDgpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG5nX3Bhc3NfaW5jW3Bhc3NdOyBqKyspCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgdiwgQlBQOCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRwIC09IEJQUDg7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3B0ciAtPSBCUFA4OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC8vIEVSUk9SOiAgU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICAgICAgICAgICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKICAgICAgICAgICAgICAgICAgICAicG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgIV9tbXhfc3VwcG9ydGVkKVxuIik7CiNlbmRpZgogICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9IC8qIGVuZCBpZiAoTU1YIG5vdCBzdXBwb3J0ZWQpICovCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9IC8qIGVuZCBkZWZhdWx0ICg4LWJpdCBvciBsYXJnZXIpICovCiAgICAgIH0gLyogZW5kIHN3aXRjaCAocm93X2luZm8tPnBpeGVsX2RlcHRoKSAqLwoKICAgICAgcm93X2luZm8tPndpZHRoID0gZmluYWxfd2lkdGg7CgogICAgICByb3dfaW5mby0+cm93Ynl0ZXMgPSBQTkdfUk9XQllURVMocm93X2luZm8tPnBpeGVsX2RlcHRoLGZpbmFsX3dpZHRoKTsKICAgfQoKfSAvKiBlbmQgcG5nX2RvX3JlYWRfaW50ZXJsYWNlKCkgKi8KCiNlbmRpZiAvKiBQTkdfSEFWRV9NTVhfUkVBRF9JTlRFUkxBQ0UgKi8KI2VuZGlmIC8qIFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCAqLwoKCgojaWYgZGVmaW5lZChQTkdfSEFWRV9NTVhfUkVBRF9GSUxURVJfUk9XKQojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9BVkdfU1VQUE9SVEVECgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gICAgICAgICAgIFAgTiBHIF8gUiBFIEEgRCBfIEYgSSBMIFQgRSBSIF8gUiBPIFcgXyBNIE0gWCBfIEEgViBHICAgICAgICAgICAvLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KCi8vIE9wdGltaXplZCBjb2RlIGZvciBQTkcgQXZlcmFnZSBmaWx0ZXIgZGVjb2RlcgoKc3RhdGljIHZvaWQgLyogUFJJVkFURSAqLwpwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcocG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwIHJvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwcmV2X3JvdykKewogICBwbmdfdWludF8zMiBGdWxsTGVuZ3RoLCBNTVhMZW5ndGg7CiAgIGludCBicHA7CiAgIGludCBkdW1teV92YWx1ZV9hOwogICBpbnQgZHVtbXlfdmFsdWVfYzsgICAvLyBmaXggJ2ZvcmJpZGRlbiByZWdpc3RlciAyIChjeCkgd2FzIHNwaWxsZWQnIGVycm9yCiAgIGludCBkdW1teV92YWx1ZV9kOwogICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfUzsKICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX0Q7CiAgIGludCBkaWZmOyAvLyAgICAgX19hdHRyaWJ1dGVfXygodXNlZCkpOwoKICAgYnBwID0gKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDM7ICAvLyBjYWxjIG51bWJlciBvZiBieXRlcyBwZXIgcGl4ZWwKICAgRnVsbExlbmd0aCA9IHJvd19pbmZvLT5yb3dieXRlczsgICAgICAgICAvLyBudW1iZXIgb2YgYnl0ZXMgdG8gZmlsdGVyCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgIFNBVkVfR09UX2VieAogICAgICBTQVZFX3IxNQogICAgICBTQVZFX2VicAogICAgICAvLyBpbml0aWFsaXplIGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAovL3ByZSAibW92bCByb3csICUyICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGk6ICBwdHIgdG8gQXZnKHgpCiAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gZWJ4OiAgeAovL3ByZSAibW92bCBwcmV2X3JvdywgJTEgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2k6ICBwdHIgdG8gUHJpb3IoeCkKICAgICAgIm1vdiAgJTIsICIgUERYICIgICAgICAgICAgICBcblx0IiAvLyBjb3B5IG9mIHJvdyBwdHIuLi4KLy9wcmUgInN1YmwgYnBwLCAiIFBEWCAiICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKICAgICAgInN1YiAgIiBQQ1ggIiwiIFBEWCAiICAgICAgICBcblx0IiAvLyBlZHgvcmR4OiAgcHRyIHRvIFJhdyh4LWJwcCkKLy9wcmUgIm1vdmwgRnVsbExlbmd0aCwgJSVlYXggICAgICBcblx0IiAvLyBicmluZyBpbiB2aWEgZWF4Li4uCiAgICAgIFNBVkVfRnVsbExlbmd0aCAgICAgICAgICAgICAgICAgICAgLy8gLi4uYnV0IHN0b3JlIGZvciBsYXRlciB1c2UKICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgoKICAgICAgLy8gQ29tcHV0ZSB0aGUgUmF3IHZhbHVlIGZvciB0aGUgZmlyc3QgYnBwIGJ5dGVzCiAgICAgIC8vICAgIFJhdyh4KSA9IEF2Zyh4KSArIChQcmlvcih4KS8yKQogICAiYXZnX3JscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZiICglMSwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIgLy8gbG9hZCBhbCB3aXRoIFByaW9yKHgpCiAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgInNocmIgJSVhbCAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgYnkgMgogICAgICAiYWRkYiAtMSglMiwiIFBCWCAiLCksICUlYWwgIFxuXHQiIC8vIGFkZCBBdmcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4Ci8vcHJlICJjbXBsIGJwcCwgJSVlYnggICAgICAgICAgICAgXG5cdCIgLy8gKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCiAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgJSVhbCwgLTEoJTIsIiBQQlggIiwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CiAgICAgICJqYiBhdmdfcmxwICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFncwoKICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50ICgzMi1iaXQgbWFzayBfd291bGRfIGJlIGdvb2QgZW5vdWdoCiAgICAgIC8vIFtjb21wdXRpbmcgZGVsdGFdLCBidXQgMzItYml0IG9wcyBhcmUgemVyby1leHRlbmRlZCBvbiA2NC1iaXQsIGFyZ2gpCiAgICAgIC8vIChpZiBzd2FwcGVkIGVkeCBhbmQgZWJwLCBjb3VsZCBkbyA4LWJpdCBvciAxNi1iaXQgbWFzay4uLkZJWE1FPykKICAgICAgIm1vdiAgJTIsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyB0YWtlIHN0YXJ0IG9mIHJvdwogICAgICAiYWRkICAiIFBCWCAiLCIgUEJQICIgICAgICAgIFxuXHQiIC8vIGFkZCBicHAKICAgICAgImFkZCAgJDB4ZiwgIiBQQlAgIiAgICAgICAgICBcblx0IiAvLyBhZGQgNys4IHRvIGluY3IgcGFzdCBhbGlnbm1lbnQgYmRyeQovLyAgICAiYW5kbCAkMHhmZmZmZmZmOCwgJSVlYnAgICAgIFxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5ICgzMi1iaXQhKQogICAgICBDTEVBUl9CT1RUT01fM19CSVRTICBQQlAgICAgIlxuXHQiIC8vIG1hc2sgdG8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICJzdWIgICUyLCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3Qgcm93IHB0ciBhZ2FpbiA9PiBlYnAgPQogICAgICAianogYXZnX2dvICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0YXJnZXQgdmFsdWUgb2YgZWJ4IGF0IGFsaWdubWVudAoKICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICBcblx0IgoKICAgICAgLy8gZml4IGFsaWdubWVudAogICAgICAvLyBDb21wdXRlIHRoZSBSYXcgdmFsdWUgZm9yIHRoZSBieXRlcyB1cCB0byB0aGUgYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgIC8vICAgIFJhdyh4KSA9IEF2Zyh4KSArICgoUmF3KHgtYnBwKSArIFByaW9yKHgpKS8yKQogICAiYXZnX2xwMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgKCUxLCIgUEJYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIGNsIHdpdGggUHJpb3IoeCkKICAgICAgIm1vdmIgKCIgUERYICIsIiBQQlggIiwpLCAlJWFsIFxuXHQiIC8vIGxvYWQgYWwgd2l0aCBSYXcoeC1icHApCiAgICAgICJhZGR3ICUlY3gsICUlYXggICAgICAgICAgICAgXG5cdCIKICAgICAgImluY2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAic2hydyAlJWF4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCiAgICAgICJhZGRiIC0xKCUyLCIgUEJYICIsKSwgJSVhbCAgXG5cdCIgLy8gYWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYngKICAgICAgImNtcGwgJSVlYnAsICUlZWJ4ICAgICAgICAgICBcblx0IiAvLyBjaGVjayBpZiBhdCBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgIm1vdmIgJSVhbCwgLTEoJTIsIiBQQlggIiwpICBcblx0IiAvLyB3cml0ZSBSYXcoeCk7IC0xIHRvIG9mZnNldCBpbmMgZWJ4CiAgICAgICJqYiBhdmdfbHAxICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmVwZWF0IHVudGlsIGF0IGFsaWdubWVudCBib3VuZGFyeQoKICAgImF2Z19nbzogICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICBSRVNUT1JFX0Z1bGxMZW5ndGggIiUlZWF4ICAgIFxuXHQiIC8vIEZ1bGxMZW5ndGggLT4gZWF4CiAgICAgICJtb3ZsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gY29weSAtPiBlY3gKICAgICAgInN1YmwgJSVlYngsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBhbGlnbm1lbnQgZml4CiAgICAgICJhbmRsICQweDAwMDAwMDA3LCAlJWVheCAgICAgXG5cdCIgLy8gY2FsYyBieXRlcyBvdmVyIG11bHQgb2YgOAogICAgICAic3VibCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHN1YiBvdmVyLWJ5dGVzIGZyb20gb3JpZ2luYWwgbGVuZ3RoCi8vb3V0ICJtb3ZsICUlZWN4LCBNTVhMZW5ndGggICAgICAgXG5cdCIKICAgICAgIm1vdmwgJSVlYnAsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBkaWZmLCBidXQgbm8gcmVnIGNvbnN0cmFpbnQoPykKICAgICAgUkVTVE9SRV9lYnAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgKGNvdWxkIHN3YXAgZWJwIGFuZCBlZHggZnVuY3Rpb25zKQogICAgICBSRVNUT1JFX3IxNQogICAgICBSRVNUT1JFX0dPVF9lYngKCiAgICAgIDogIj1jIiAoTU1YTGVuZ3RoKSwgICAgICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MKICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAiPWEiIChkaWZmKQoKICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gZWN4ICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kKICAgICAgICAiMiIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQogICAgICAgICIzIiAoRnVsbExlbmd0aCkgICAvLyBlYXgKCiAgICAgIDogIiVlZHgiICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgX0NMT0JCRVJfcjE1CiAgICAgICAgX0NMT0JCRVJfZWJwCiAgICAgICAgX0NMT0JCRVJfR09UX2VieAogICApOwoKICAgLy8gbm93IGRvIHRoZSBtYXRoIGZvciB0aGUgcmVzdCBvZiB0aGUgcm93CiAgIHN3aXRjaCAoYnBwKQogICB7CiAgICAgIGNhc2UgMzoKICAgICAgewovLyAgICAgICBfU2hpZnRCcHAgPSAyNDsgICAgLy8gPT0gMyAqIDgKLy8gICAgICAgX1NoaWZ0UmVtID0gNDA7ICAgIC8vID09IDY0IC0gMjQKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICJtb3ZxICIgQU1BU0s1XzNfMCAiLCAlJW1tNyAgICBcblx0IiAvLyBfYW1hc2s1XzNfMCAtPiBtbTcKLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgICAgICAgIm1vdnEgIiBMQl9DQVJSWV9NQVNLICIsICUlbW01IFxuXHQiIC8vIFtpbnRlcmxlYXZlIGZvciBwYXJhbGxlbC4/XQovLyBwcmVsb2FkICAibW92bCAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCiAgICAgICAgICAgICJtb3ZxICIgSEJfQ0xFQVJfTUFTSyAiLCAlJW1tNCBcblx0IiAvLyBfSEJDbGVhck1hc2sgLT4gbW00Ci8vIHByZWxvYWQgICJtb3ZsICBwcmV2X3JvdywgJTAgICAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQogICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxICAtOCglMSwiIFBDWCAiLCksICUlbW0yIFxuXHQiLy8gbG9hZCBwcmV2aW91cyBhbGlnbmVkIDggYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoY29ycmVjdCBwb3MuIGluIGxvb3AgYmVsb3cpCiAgICAgICAgICJhdmdfM2xwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICAoJTEsIiBQQ1ggIiwpLCAlJW1tMCAgIFxuXHQiIC8vIGxvYWQgbW0wIHdpdGggQXZnKHgpCiAgICAgICAgICAgICJtb3ZxICAlJW1tNSwgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3JscSAkNDAsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGNvcnJlY3QgcG9zaXRpb24gUmF3KHgtYnBwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhCiAgICAgICAgICAgICJtb3ZxICAoJTAsIiBQQ1ggIiwpLCAlJW1tMSAgIFxuXHQiIC8vIGxvYWQgbW0xIHdpdGggUHJpb3IoeCkKICAgICAgICAgICAgIm1vdnEgICUlbW03LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgICUlbW0xLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2cm93IGJ5dGUKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBBdmcgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggYnl0ZQogICAgICAgICAgICAvLyBhZGQgMXN0IGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggTEJDYXJyeQogICAgICAgICAgICAibW92cSAgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoIGxzYidzIHdlcmUgPT0gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAodmFsaWQgb25seSBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIFJhdyh4LWJwcCkvMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICJwYW5kICAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTYgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIDMtNQogICAgICAgICAgICAibW92cSAgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJtb3ZxICAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGggbHNiJ3Mgd2VyZSA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh2YWxpZCBvbmx5IGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gUmF3KHgtYnBwKS8yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCgogICAgICAgICAgICAvLyBhZGQgM3JkIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTYgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgbW02IG1hc2sgdG8gY292ZXIgbGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0d28gYnl0ZXMKICAgICAgICAgICAgIm1vdnEgICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIG5lZWQgYmUgc2hpZnRlZCBvbmx5IG9uY2UgaGVyZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGNvcnJlY3QgeC1icHAgb2Zmc2V0LgogICAgICAgICAgICAibW92cSAgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIFJhdyh4LWJwcCkvMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICJwYW5kICAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAiYWRkbCAgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQogICAgICAgICAgICAvLyBub3cgcmVhZHkgdG8gd3JpdGUgYmFjayB0byBtZW1vcnkKICAgICAgICAgICAgIm1vdnEgICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKICAgICAgICAgICAgLy8gbW92ZSB1cGRhdGVkIFJhdyh4KSB0byB1c2UgYXMgUmF3KHgtYnBwKSBmb3IgbmV4dCBsb29wCiAgICAgICAgICAgICJjbXBsICAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXcoeCkgdG8gbW0yCiAgICAgICAgICAgICJqYiBhdmdfM2xwICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDMgYnBwCgogICAgICBjYXNlIDQ6ICAgLy8gZm9ybWVybHkgc2hhcmVkIHdpdGggNiBicHAgY2FzZSB2aWEgX1NoaWZ0QnBwIGFuZCBfU2hpZnRSZW0sCiAgICAgIHsgICAgICAgICAvLyBidXQgbG9vcCB1c2VzIGFsbCA4IE1NWCByZWdzLCBhbmQgcHNybHEvcHNsbHEgcmVxdWlyZSA2NC1iaXQKICAgICAgICAgICAgICAgIC8vIG1lbSAoUElDLy5zbyBwcm9ibGVtcyksIE1NWCByZWcgKG5vbmUgbGVmdCksIG9yIGltbWVkaWF0ZQovLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDMyIChwc2xscSkKLy8gICAgICAgX1NoaWZ0UmVtID0gNjQgLSBfU2hpZnRCcHA7ICAvLyAzMiAocHNybHEpCgogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgIExPQURfR09UX3JicAogICAgICAgICAgICAibW92cSAiIEhCX0NMRUFSX01BU0sgIiwgJSVtbTQgXG5cdCIgLy8gX0hCQ2xlYXJNYXNrIC0+IG1tNAogICAgICAgICAgICAibW92cSAiIExCX0NBUlJZX01BU0sgIiwgJSVtbTUgXG5cdCIgLy8gX0xCQ2FycnlNYXNrIC0+IG1tNQogICAgICAgICAgICAvLyByZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAovLyBwcmVsb2FkICAibW92bCAgZGlmZiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICAgICAgICJtb3ZxICIgQU1BU0swXzhfMCAiLCAlJW1tNyAgICBcblx0IiAvLyBfYW1hc2swXzhfMCAtPiBtbTcKICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgIC8vIC4uLiBhbmQgY2xlYXIgYWxsIGJ5dGVzIGV4Y2VwdCBmb3IgMXN0IGFjdGl2ZSBncm91cAovLyBwcmVsb2FkICAibW92bCAgcm93LCAlMSAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQogICAgICAgICAgICAicHNybHEgJDMyLCAlJW1tNyAgICAgICAgICAgIFxuXHQiIC8vIHdhcyBfU2hpZnRSZW0KLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlMCAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQogICAgICAgICAgICAibW92cSAgJSVtbTcsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc2xscSAkMzIsICUlbW02ICAgICAgICAgICAgXG5cdCIgLy8gbWFzayBmb3IgMm5kIGFjdGl2ZSBncm91cAoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTIgXG5cdCIgLy8gbG9hZCBwcmV2aW91cyBhbGlnbmVkIDggYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHdlIGNvcnJlY3QgcG9zLiBpbiBsb29wIGJlbG93KQogICAgICAgICAiYXZnXzRscDogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICglMSwiIFBDWCAiLCksICUlbW0wICAgXG5cdCIKICAgICAgICAgICAgInBzcmxxICQzMiwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0xICAgXG5cdCIKICAgICAgICAgICAgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBhdmVyYWdlCiAgICAgICAgICAgICJtb3ZxICUlbW01LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTEsICUlbW0zICAgICAgICAgICBcblx0IiAvLyBnZXQgbHNiIGZvciBlYWNoIHByZXZfcm93IGJ5dGUKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcHJldl9yb3cgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0xICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZyBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIGJ5dGUKICAgICAgICAgICAgLy8gYWRkIDFzdCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5CiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IHVzZSBtbTEgZm9yIGdldHRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMQkNhcnJ5cwogICAgICAgICAgICAicGFuZCAlJW1tMiwgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIGdldCBMQkNhcnJ5cyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgYm90aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0byBBdmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBBY3RpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAicHNsbHEgJDMyLCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdmcgZm9yIGVhY2ggQWN0aXZlIGJ5dGUKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgLy8gbm93IHJlYWR5IHRvIHdyaXRlIGJhY2sgdG8gbWVtb3J5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIKICAgICAgICAgICAgLy8gcHJlcCBSYXcoeC1icHApIGZvciBuZXh0IGxvb3AKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAiamIgYXZnXzRscCAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDQgYnBwCgogICAgICBjYXNlIDE6CiAgICAgIHsKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICAvLyByZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogeCA9IG9mZnNldCB0byBhbGlnbi4gYmRyeQovLyBwcmVsb2FkICAibW92bCByb3csICUxICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGk6ICBBdmcoeCkKLy8gcHJlbG9hZCAgIm1vdmwgRnVsbExlbmd0aCwgJSVlYXggICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHRlc3QgaWYgb2Zmc2V0IGF0IGVuZCBvZiBhcnJheQogICAgICAgICAgICAiam5iIGF2Z18xZW5kICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICBTQVZFX2VicAoKICAgICAgICAgICAgLy8gZG8gQXZnIGRlY29kZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi8vIHByZWxvYWQgICJtb3ZsIHByZXZfcm93LCAlMCAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaTogIFByaW9yKHgpCiAgICAgICAgICAgICJtb3YgICUxLCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gY29weSBvZiByb3cgcG9pbnRlci4uLgogICAgICAgICAgICAiZGVjICAiIFBCUCAiICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVicC9yYnA6ICBSYXcoeC1icHApCiAgICAgICAgICAgICJ4b3JsICUlZWR4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gemVybyBlZHggYmVmb3JlIHVzaW5nIGRsICYgZHgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgaW4gbG9vcCBiZWxvdwogICAgICAgICAgICBTQVZFX0dPVF9lYngKCiAgICAgICAgICJhdmdfMWxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gUmF3KHgpID0gQXZnKHgpICsgKChSYXcoeC1icHApICsgUHJpb3IoeCkpLzIpCiAgICAgICAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdmIgKCUwLCIgUENYICIsKSwgJSVkbCAgICBcblx0IiAvLyBsb2FkIGRsIHdpdGggUHJpb3IoeCkKICAgICAgICAgICAgIm1vdmIgKCIgUEJQICIsIiBQQ1ggIiwpLCAlJWJsIFxuXHQiIC8vIGxvYWQgYmwgd2l0aCBSYXcoeC1icHApCiAgICAgICAgICAgICJhZGR3ICUlZHgsICUlYnggICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImluY2wgJSVlY3ggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAic2hydyAlJWJ4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCiAgICAgICAgICAgICJhZGRiIC0xKCUxLCIgUENYICIsKSwgJSVibCAgXG5cdCIgLy8gYWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5jIGVjeAogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIGNoZWNrIGlmIGF0IGVuZCBvZiBhcnJheQogICAgICAgICAgICAibW92YiAlJWJsLCAtMSglMSwiIFBDWCAiLCkgIFxuXHQiIC8vIHdyaXRlIGJhY2sgUmF3KHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFnczsgLTEgdG8gb2Zmc2V0IGluYyBlY3gKICAgICAgICAgICAgImpiIGF2Z18xbHAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgUkVTVE9SRV9HT1RfZWJ4CiAgICAgICAgICAgIFJFU1RPUkVfZWJwCgogICAgICAgICAiYXZnXzFlbmQ6ICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChGdWxsTGVuZ3RoKSAgIC8vIGVheAoKICAgICAgICAgICAgOiAiJWVkeCIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgICBfQ0xPQkJFUl9HT1RfZWJ4CiAgICAgICAgICAgICAgX0NMT0JCRVJfZWJwCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgcmV0dXJuOyAgLy8gZW5kIDEgYnBwCgogICAgICBjYXNlIDI6CiAgICAgIHsKLy8gICAgICAgX1NoaWZ0QnBwID0gMTY7ICAgLy8gPT0gMiAqIDgKLy8gICAgICAgX1NoaWZ0UmVtID0gNDg7ICAgLy8gPT0gNjQgLSBfU2hpZnRCcHAKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgIC8vIGxvYWQgKGZvcm1lcikgX0FjdGl2ZU1hc2sKICAgICAgICAgICAgIm1vdnEgIiBBTUFTSzZfMl8wICIsICUlbW03ICAgIFxuXHQiIC8vIF9hbWFzazZfMl8wIC0+IG1tNwogICAgICAgICAgICAvLyByZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAovLyBwcmVsb2FkICAibW92bCAgZGlmZiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICAgICAgICJtb3ZxICIgTEJfQ0FSUllfTUFTSyAiLCAlJW1tNSBcblx0IiAvLyBfTEJDYXJyeU1hc2sgLT4gbW01Ci8vIHByZWxvYWQgICJtb3ZsICByb3csICUxICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGk6ICBBdmcoeCkKICAgICAgICAgICAgIm1vdnEgIiBIQl9DTEVBUl9NQVNLICIsICUlbW00IFxuXHQiIC8vIF9IQkNsZWFyTWFzayAtPiBtbTQKLy8gcHJlbG9hZCAgIm1vdmwgIHByZXZfcm93LCAlMCAgICAgICAgICAgIFxuXHQiIC8vIGVzaTogIFByaW9yKHgpCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMiBcblx0IiAvLyBsb2FkIHByZXZpb3VzIGFsaWduZWQgOCBieXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAod2UgY29ycmVjdCBwb3MuIGluIGxvb3AgYmVsb3cpCiAgICAgICAgICJhdmdfMmxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUxLCIgUENYICIsKSwgJSVtbTAgICBcblx0IgogICAgICAgICAgICAicHNybHEgJDQ4LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTEgICBcblx0IiAvLyAgKEdSUiBCVUdGSVg6ICB3YXMgcHNsbHEpCiAgICAgICAgICAgIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gYXZlcmFnZQogICAgICAgICAgICAibW92cSAlJW1tNSwgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW0xLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2X3JvdyBieXRlCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMSAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZyBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIGJ5dGUKCiAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvIEF2ZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIEFjdGl2ZSBieXRlCgogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyAyICYgMwogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCgogICAgICAgICAgICAvLyBhZGQgM3JkIGFjdGl2ZSBncm91cCAoUmF3KHgtYnBwKS8yKSB0byBhdmVyYWdlIHdpdGggX0xCQ2FycnkKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTYgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCB0aGUgbW02IG1hc2sgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyA0ICYgNQogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0yCiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGggbHNiJ3Mgd2VyZSA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKG9ubHkgdmFsaWQgZm9yIGFjdGl2ZSBncm91cCkKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gYWRkIExCQ2FycnlzIHRvIChSYXcoeC1icHApLzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxlYXZlIG9ubHkgQWN0aXZlIEdyb3VwIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlcyB0byBhZGQgdG8gQXZnCiAgICAgICAgICAgICJwYWRkYiAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChSYXcvMikgKyBMQkNhcnJ5cyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2ZyBmb3IgZWFjaCBBY3RpdmUgYnl0ZQoKICAgICAgICAgICAgLy8gYWRkIDR0aCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5CiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW02ICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgdGhlIG1tNiBtYXNrIHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgNiAmIDcKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMgogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMiAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsc2IncyB3ZXJlID09IDEgKG9ubHkgdmFsaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgIC8vIG5vdyByZWFkeSB0byB3cml0ZSBiYWNrIHRvIG1lbW9yeQogICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiCiAgICAgICAgICAgIC8vIHByZXAgUmF3KHgtYnBwKSBmb3IgbmV4dCBsb29wCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKICAgICAgICAgICAgImpiIGF2Z18ybHAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKCiAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgIC8vIGVjeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAvLyBlYXgKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCAyIGJwcAoKICAgICAgY2FzZSA2OiAgIC8vIGZvcm1lcmx5IHNoYXJlZCB3aXRoIDQgYnBwIGNhc2UgKHNlZSBjb21tZW50cyB0aGVyZSkKICAgICAgewovLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDQ4IChwc2xscSkKLy8gICAgICAgX1NoaWZ0UmVtID0gNjQgLSBfU2hpZnRCcHA7ICAvLyAxNiAocHNybHEpCgogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgIExPQURfR09UX3JicAogICAgICAgICAgICAibW92cSAiIEhCX0NMRUFSX01BU0sgIiwgJSVtbTQgXG5cdCIgLy8gX0hCQ2xlYXJNYXNrIC0+IG1tNAogICAgICAgICAgICAibW92cSAiIExCX0NBUlJZX01BU0sgIiwgJSVtbTUgXG5cdCIgLy8gX0xCQ2FycnlNYXNrIC0+IG1tNQogICAgICAgICAgICAvLyByZS1pbml0IGFkZHJlc3MgcG9pbnRlcnMgYW5kIG9mZnNldAovLyBwcmVsb2FkICAibW92bCAgZGlmZiwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gZWN4OiAgeCA9IG9mZnNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50IGJvdW5kYXJ5CiAgICAgICAgICAgICJtb3ZxICIgQU1BU0swXzhfMCAiLCAlJW1tNyAgICBcblx0IiAvLyBfYW1hc2swXzhfMCAtPiBtbTcKICAgICAgICAgICAgUkVTVE9SRV9yYnAKCiAgICAgICAgICAgIC8vIC4uLiBhbmQgY2xlYXIgYWxsIGJ5dGVzIGV4Y2VwdCBmb3IgMXN0IGFjdGl2ZSBncm91cAovLyBwcmVsb2FkICAibW92bCAgcm93LCAlMSAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQogICAgICAgICAgICAicHNybHEgJDE2LCAlJW1tNyAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsICBwcmV2X3JvdywgJTAgICAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKICAgICAgICAgICAgIm1vdnEgICUlbW03LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHNsbHEgJDQ4LCAlJW1tNiAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgZm9yIDJuZCBhY3RpdmUgZ3JvdXAKCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglMSwiIFBDWCAiLCksICUlbW0yIFxuXHQiIC8vIGxvYWQgcHJldmlvdXMgYWxpZ25lZCA4IGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh3ZSBjb3JyZWN0IHBvcy4gaW4gbG9vcCBiZWxvdykKICAgICAgICAgImF2Z182bHA6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJTEsIiBQQ1ggIiwpLCAlJW1tMCAgIFxuXHQiCiAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0yICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMSAgIFxuXHQiCiAgICAgICAgICAgIC8vIGFkZCAoUHJldl9yb3cvMikgdG8gYXZlcmFnZQogICAgICAgICAgICAibW92cSAlJW1tNSwgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW0xLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gZ2V0IGxzYiBmb3IgZWFjaCBwcmV2X3JvdyBieXRlCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHByZXZfcm93IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMSAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3IG9mIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieXRlCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIgLy8gYWRkIChQcmV2X3Jvdy8yKSB0byBBdmcgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCBieXRlCiAgICAgICAgICAgIC8vIGFkZCAxc3QgYWN0aXZlIGdyb3VwIChSYXcoeC1icHApLzIpIHRvIGF2ZXJhZ2Ugd2l0aCBfTEJDYXJyeQogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyB1c2UgbW0xIGZvciBnZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTEJDYXJyeXMKICAgICAgICAgICAgInBhbmQgJSVtbTIsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBnZXQgTEJDYXJyeXMgZm9yIGVhY2ggYnl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIGJvdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbHNiJ3Mgd2VyZSA9PSAxIChvbmx5IHZhbGlkIGZvciBhY3RpdmUgZ3JvdXApCiAgICAgICAgICAgICJwc3JscSAkMSwgJSVtbTIgICAgICAgICAgICAgXG5cdCIgLy8gZGl2aWRlIHJhdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICAlJW1tNCwgJSVtbTIgICAgICAgICAgXG5cdCIgLy8gY2xlYXIgaW52YWxpZCBiaXQgNyBvZiBlYWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZQogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGFkZCBMQkNhcnJ5cyB0byAoUmF3KHgtYnBwKS8yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0yICAgICAgICAgICBcblx0IiAvLyBsZWF2ZSBvbmx5IEFjdGl2ZSBHcm91cCAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZXMgdG8gYWRkIHRvIEF2ZwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpICsgTEJDYXJyeXMgdG8gQXZnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggQWN0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAgKFJhdyh4LWJwcCkvMikgdG8gYXZlcmFnZSB3aXRoIF9MQkNhcnJ5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKICAgICAgICAgICAgInBzbGxxICQ0OCwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgJSVtbTMsICUlbW0xICAgICAgICAgICBcblx0IiAvLyBub3cgdXNlIG1tMSBmb3IgZ2V0dGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExCQ2FycnlzCiAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBib3RoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxzYidzIHdlcmUgPT0gMSAob25seSB2YWxpZCBmb3IgYWN0aXZlIGdyb3VwKQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0yICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSByYXcgYnl0ZXMgYnkgMgogICAgICAgICAgICAicGFuZCAgJSVtbTQsICUlbW0yICAgICAgICAgIFxuXHQiIC8vIGNsZWFyIGludmFsaWQgYml0IDcgb2YgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gKFJhdyh4LWJwcCkvMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBieXRlCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbGVhdmUgb25seSBBY3RpdmUgR3JvdXAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5dGVzIHRvIGFkZCB0byBBdmcKICAgICAgICAgICAgInBhZGRiICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFJhdy8yKSArIExCQ2FycnlzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZnIGZvciBlYWNoIEFjdGl2ZSBieXRlCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgIC8vIG5vdyByZWFkeSB0byB3cml0ZSBiYWNrIHRvIG1lbW9yeQogICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiCiAgICAgICAgICAgIC8vIHByZXAgUmF3KHgtYnBwKSBmb3IgbmV4dCBsb29wCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTIKICAgICAgICAgICAgImpiIGF2Z182bHAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKCiAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAgIC8vIGVjeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAvLyBlYXgKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA2IGJwcAoKICAgICAgY2FzZSA4OgogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgICAgICAgLy8gcmUtaW5pdCBhZGRyZXNzIHBvaW50ZXJzIGFuZCBvZmZzZXQKLy8gcHJlbG9hZCAgIm1vdmwgIGRpZmYsICUlZWN4ICAgICAgICAgICAgIFxuXHQiIC8vIGVjeDogIHggPSBvZmZzZXQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsaWdubWVudCBib3VuZGFyeQogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgIm1vdnEgIiBMQl9DQVJSWV9NQVNLICIsICUlbW01IFxuXHQiIC8vIFtpbnRlcmxlYXZlIGZvciBwYXJhbGxlbC4/XQovLyBwcmVsb2FkICAibW92bCAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpOiAgQXZnKHgpCiAgICAgICAgICAgICJtb3ZxICIgSEJfQ0xFQVJfTUFTSyAiLCAlJW1tNCBcblx0IiAvLyBfSEJDbGVhck1hc2sgLT4gbW00Ci8vIHByZWxvYWQgICJtb3ZsICBwcmV2X3JvdywgJTAgICAgICAgICAgICBcblx0IiAvLyBlc2k6ICBQcmlvcih4KQogICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTIgXG5cdCIgLy8gbG9hZCBwcmV2aW91cyBhbGlnbmVkIDggYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoTk8gTkVFRCB0byBjb3JyZWN0IHBvcy4gaW4gbG9vcCBiZWxvdykKCiAgICAgICAgICJhdmdfOGxwOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUxLCIgUENYICIsKSwgJSVtbTAgICBcblx0IgogICAgICAgICAgICAibW92cSAlJW1tNSwgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0xICAgXG5cdCIKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tMSwgJSVtbTMgICAgICAgICAgIFxuXHQiIC8vIGdldCBsc2IgZm9yIGVhY2ggcHJldl9yb3cgYnl0ZQogICAgICAgICAgICAicHNybHEgJDEsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBwcmV2X3JvdyBieXRlcyBieSAyCiAgICAgICAgICAgICJwYW5kICUlbW0yLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gZ2V0IExCQ2FycnlzIGZvciBlYWNoIGJ5dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgd2hlcmUgYm90aCBsc2IncyB3ZXJlID09IDEKICAgICAgICAgICAgInBzcmxxICQxLCAlJW1tMiAgICAgICAgICAgICBcblx0IiAvLyBkaXZpZGUgcmF3IGJ5dGVzIGJ5IDIKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMSAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3LCBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0zLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgTEJDYXJyeXMgdG8gQXZnLCBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhbmQgICUlbW00LCAlJW1tMiAgICAgICAgICBcblx0IiAvLyBjbGVhciBpbnZhbGlkIGJpdCA3LCBlYWNoIGJ5dGUKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IiAvLyBhZGQgKFByZXZfcm93LzIpIHRvIEF2ZywgZWFjaAogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiIC8vIGFkZCAoUmF3LzIpIHRvIEF2ZyBmb3IgZWFjaAogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gcmV1c2UgYXMgUmF3KHgtYnBwKQogICAgICAgICAgICAiamIgYXZnXzhscCAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaSAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiAgICAgICAgICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTMiLCAiJW1tNCIsICIlbW01IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA4IGJwcAoKICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgLy8gYnBwICE9IDEsMiwzLDQsNiw4OiAgZG9lc24ndCBleGlzdAogICAgICB7CiAgICAgICAgIC8vIEVSUk9SOiAgU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKICAgICAgICAgICAicG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCkpXG4iKTsKI2VuZGlmCiAgICAgIH0KICAgICAgYnJlYWs7CgogICB9IC8vIGVuZCBzd2l0Y2ggKGJwcCkKCiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgLy8gTU1YIGFjY2VsZXJhdGlvbiBjb21wbGV0ZTsgbm93IGRvIGNsZWFuLXVwCiAgICAgIC8vIGNoZWNrIGlmIGFueSByZW1haW5pbmcgYnl0ZXMgbGVmdCB0byBkZWNvZGUKLy9wcmUgIm1vdmwgRnVsbExlbmd0aCwgJSVlZHggICAgICBcblx0IgovL3ByZSAibW92bCBNTVhMZW5ndGgsICUlZWF4ICAgICAgIFxuXHQiIC8vIGVheDogIHggPT0gb2Zmc2V0IGJ5dGVzIGFmdGVyIE1NWAovL3ByZSAibW92bCByb3csICUyICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaTogIEF2Zyh4KQogICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIHRlc3QgaWYgb2Zmc2V0IGF0IGVuZCBvZiBhcnJheQogICAgICAiam5iIGF2Z19lbmQgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICBTQVZFX2VicAoKICAgICAgLy8gZG8gQXZnIGRlY29kZSBmb3IgcmVtYWluaW5nIGJ5dGVzCi8vcHJlICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpOiAgUHJpb3IoeCkKICAgICAgIm1vdiAgJTIsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyBjb3B5IG9mIHJvdyBwb2ludGVyLi4uCi8vcHJlICJzdWJsIGJwcCwgIiBQQlAgIiAgICAgICAgICAgXG5cdCIgLy8gKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCiAgICAgICJzdWIgICIgUENYICIsIiBQQlAgIiAgICAgICAgXG5cdCIgLy8gZWJwOiAgUmF3KHgtYnBwKQogICAgICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHplcm8gZWN4IGJlZm9yZSB1c2luZyBjbCAmIGN4IGJlbG93CgogICAgICBTQVZFX0dPVF9lYngKCiAgICJhdmdfbHAyOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gUmF3KHgpID0gQXZnKHgpICsgKChSYXcoeC1icHApICsgUHJpb3IoeCkpLzIpCiAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgKCUxLCIgUEFYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIGNsIHdpdGggUHJpb3IoeCkKICAgICAgIm1vdmIgKCIgUEJQICIsIiBQQVggIiwpLCAlJWJsIFxuXHQiIC8vIGxvYWQgYmwgd2l0aCBSYXcoeC1icHApCiAgICAgICJhZGR3ICUlY3gsICUlYnggICAgICAgICAgICAgXG5cdCIKICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAic2hydyAlJWJ4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGRpdmlkZSBieSAyCiAgICAgICJhZGRiIC0xKCUyLCIgUEFYICIsKSwgJSVibCAgXG5cdCIgLy8gYWRkIEF2Zyh4KTsgLTEgdG8gb2Zmc2V0IGluYyBlYXgKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IiAvLyBjaGVjayBpZiBhdCBlbmQgb2YgYXJyYXkKICAgICAgIm1vdmIgJSVibCwgLTEoJTIsIiBQQVggIiwpICBcblx0IiAvLyB3cml0ZSBiYWNrIFJhdyh4KSBbbW92IGRvZXMgbm90CiAgICAgICJqYiBhdmdfbHAyICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIGFmZmVjdCBmbGFnczsgLTEgdG8gb2Zmc2V0IGluYyBlYXhdCgogICAgICBSRVNUT1JFX0dPVF9lYngKICAgICAgUkVTVE9SRV9lYnAKCiAgICJhdmdfZW5kOiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBlbmQgTU1YOyBwcmVwIGZvciBwb3NzLiBGUCBpbnN0cnMuCgogICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKQoKICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gZWN4ICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kKICAgICAgICAiMiIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQogICAgICAgICIzIiAoTU1YTGVuZ3RoKSwgICAvLyBlYXgKICAgICAgICAiNCIgKEZ1bGxMZW5ndGgpICAgLy8gZWR4CgogICAgICBDTE9CX0NPTE9OX2VieF9lYnAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgIENMT0JCRVJfR09UX2VieAogICAgICAgIENMT0JfQ09NTUFfZWJ4X2VicAogICAgICAgIENMT0JCRVJfZWJwCiAgICk7Cgp9IC8qIGVuZCBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcoKSAqLwojZW5kaWYgLyogUE5HX01NWF9SRUFEX0ZJTFRFUl9BVkdfU1VQUE9SVEVEICovCgoKCiNpZiBkZWZpbmVkKFBOR194ODZfNjRfVVNFX0dPVFBDUkVMKSB8fCBkZWZpbmVkKFBOR19USFJFQURfVU5TQUZFX09LKQoKI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfQVZHX1NVUFBPUlRFRAovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBQIEEgRSBUIEggICAgICAgICAvLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KCi8vIE9wdGltaXplZCBjb2RlIGZvciBQTkcgUGFldGggZmlsdGVyIGRlY29kZXIKCnN0YXRpYyB2b2lkIC8qIFBSSVZBVEUgKi8KcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgocG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwIHJvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGVwIHByZXZfcm93KQp7CiAgIHBuZ191aW50XzMyIEZ1bGxMZW5ndGgsIE1NWExlbmd0aDsKICAgaW50IGJwcDsKICAgaW50IGR1bW15X3ZhbHVlX2E7CiAgIGludCBkdW1teV92YWx1ZV9jOyAgIC8vIGZpeCAnZm9yYmlkZGVuIHJlZ2lzdGVyIDIgKGN4KSB3YXMgc3BpbGxlZCcgZXJyb3IKICAgaW50IGR1bW15X3ZhbHVlX2Q7CiAgIHBuZ19jaGFycCBkdW1teV92YWx1ZV9TOwogICBwbmdfY2hhcnAgZHVtbXlfdmFsdWVfRDsKICAgaW50IGRpZmY7IC8vICAgICBfX2F0dHJpYnV0ZV9fKCh1c2VkKSk7CgogICBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsgIC8vIGNhbGMgbnVtYmVyIG9mIGJ5dGVzIHBlciBwaXhlbAogICBGdWxsTGVuZ3RoID0gcm93X2luZm8tPnJvd2J5dGVzOyAgICAgICAgIC8vIG51bWJlciBvZiBieXRlcyB0byBmaWx0ZXIKCiAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKICAgICAgU0FWRV9HT1RfZWJ4CiAgICAgIFNBVkVfcjE1CiAgICAgIFNBVkVfZWJwCi8vcHJlICJtb3ZsIHJvdywgJTIgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQogICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIGVieDogIHggb2Zmc2V0Ci8vcHJlICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQogICAgICAieG9ybCAlJWVkeCwgJSVlZHggICAgICAgICAgIFxuXHQiIC8vIGVkeDogIHgtYnBwIG9mZnNldAovL3ByZSAibW92bCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgIFxuXHQiIC8vIGJyaW5nIGluIHZpYSBlYXguLi4KICAgICAgU0FWRV9GdWxsTGVuZ3RoICAgICAgICAgICAgICAgICAgICAvLyAuLi5idXQgc3RvcmUgZm9yIGxhdGVyIHVzZQogICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCgogICAgICAvLyBDb21wdXRlIHRoZSBSYXcgdmFsdWUgZm9yIHRoZSBmaXJzdCBicHAgYnl0ZXMKICAgICAgLy8gTm90ZTogdGhlIGZvcm11bGEgd29ya3Mgb3V0IHRvIGJlIGFsd2F5cwogICAgICAvLyAgIFBhZXRoKHgpID0gUmF3KHgpICsgUHJpb3IoeCkgICAgICB3aGVyZSB4IDwgYnBwCiAgICJwYWV0aF9ybHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgKCUyLCIgUEJYICIsKSwgJSVhbCAgICBcblx0IgogICAgICAiYWRkYiAoJTEsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiCiAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKLy9wcmUgImNtcGwgYnBwLCAlJWVieCAgICAgICAgICAgICBcblx0IiAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAibW92YiAlJWFsLCAtMSglMiwiIFBCWCAiLCkgIFxuXHQiCiAgICAgICJqYiBwYWV0aF9ybHAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgIC8vIGdldCAjIG9mIGJ5dGVzIHRvIGFsaWdubWVudCAobm90ZTogIGNvbXB1dGluZyBfZGVsdGFfIG9mIHR3byBwb2ludGVycywKICAgICAgLy8gc28gaGVyZWFmdGVyICUlZWJwIGlzIHN1ZmZpY2llbnQgZXZlbiBvbiA2NC1iaXQpCiAgICAgICJtb3YgICUyLCAiIFBCUCAiICAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKICAgICAgImFkZCAgIiBQQlggIiwiIFBCUCAiICAgICAgICBcblx0IiAvLyBhZGQgYnBwCiAgICAgICJhZGQgICQweGYsICIgUEJQICIgICAgICAgICAgXG5cdCIgLy8gYWRkIDcrOCB0byBpbmNyIHBhc3QgYWxpZ25tZW50IGJkcnkKLy8gICAgImFuZGwgJDB4ZmZmZmZmZjgsICUlZWJwICAgICBcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeSAoMzItYml0ISkKICAgICAgQ0xFQVJfQk9UVE9NXzNfQklUUyAgUEJQICAgICJcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeQogICAgICAic3ViICAlMiwgIiBQQlAgIiAgICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IHJvdyBwdHIgYWdhaW4gPT4gZWJwID0KICAgICAgImp6IHBhZXRoX2dvICAgICAgICAgICAgICAgICBcblx0IiAvLyAgdGFyZ2V0IHZhbHVlIG9mIGVieCBhdCBhbGlnbm1lbnQKCiAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKCiAgICAgIFNBVkVfcjExX3IxMl9yMTMKCiAgICAgIC8vIGZpeCBhbGlnbm1lbnQKICAgInBhZXRoX2xwMTogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgIm1vdmIgKCUxLCIgUEJYICIsKSwgJSVhbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gYWwKICAgICAgIm1vdmIgKCUxLCIgUERYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICJzdWJsICUlZWN4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCiAgICAgICJtb3ZsICUlZWF4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gU2F2ZSBwYXYgZm9yIGxhdGVyIHVzZQogICAgICAieG9ybCAlJWVheCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgIm1vdmIgKCUyLCIgUERYICIsKSwgJSVhbCAgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBhbAogICAgICAic3VibCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQogICAgICAibW92bCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLSBjID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgImFkZGwgIiBwYV9URU1QICIsICUlZWF4ICAgICBcblx0IiAvLyBwY3YgPSBwYXYgKyBwYnYKICAgICAgLy8gcGMgPSBhYnMocGN2KQogICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWF4ICAgIFxuXHQiCiAgICAgICJqeiBwYWV0aF9wY2EgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm5lZ2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgInBhZXRoX3BjYTogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVheCwgIiBwY19URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQogICAgICAvLyBwYiA9IGFicyhwYnYpCiAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlY3ggICAgXG5cdCIKICAgICAgImp6IHBhZXRoX3BiYSAgICAgICAgICAgICAgICBcblx0IgogICAgICAibmVnbCAlJWVjeCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAicGFldGhfcGJhOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZsICUlZWN4LCAiIHBiX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYiBmb3IgbGF0ZXIgdXNlCiAgICAgIC8vIHBhID0gYWJzKHBhdikKICAgICAgIm1vdmwgIiBwYV9URU1QICIsICUlZWF4ICAgICBcblx0IgogICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWF4ICAgIFxuXHQiCiAgICAgICJqeiBwYWV0aF9wYWEgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm5lZ2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgInBhZXRoX3BhYTogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92bCAlJWVheCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQogICAgICAvLyB0ZXN0IGlmIHBhIDw9IHBiCiAgICAgICJjbXBsICUlZWN4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgImpuYSBwYWV0aF9hYmIgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYSA+IHBiOyBub3cgdGVzdCBpZiBwYiA8PSBwYwogICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlY3ggICAgIFxuXHQiCiAgICAgICJqbmEgcGFldGhfYmJjICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGIgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKICAgICAgIm1vdmIgKCUxLCIgUERYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICJqbXAgcGFldGhfcGFldGggICAgICAgICAgICAgXG5cdCIKCiAgICJwYWV0aF9iYmM6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGIgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeCkKICAgICAgIm1vdmIgKCUxLCIgUEJYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gY2wKICAgICAgImptcCBwYWV0aF9wYWV0aCAgICAgICAgICAgICBcblx0IgoKICAgInBhZXRoX2FiYjogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYSA8PSBwYjsgbm93IHRlc3QgaWYgcGEgPD0gcGMKICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWF4ICAgICBcblx0IgogICAgICAiam5hIHBhZXRoX2FiYyAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCiAgICAgICJtb3ZiICglMSwiIFBEWCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAiam1wIHBhZXRoX3BhZXRoICAgICAgICAgICAgIFxuXHQiCgogICAicGFldGhfYWJjOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhIDw9IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFJhdyh4LWJwcCkKICAgICAgIm1vdmIgKCUyLCIgUERYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFJhdyh4LWJwcCkgaW50byBjbAoKICAgInBhZXRoX3BhZXRoOiAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiaW5jbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJpbmNsICUlZWR4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gUmF3KHgpID0gKFBhZXRoKHgpICsgUGFldGhfUHJlZGljdG9yKCBhLCBiLCBjICkpIG1vZCAyNTYKICAgICAgImFkZGIgJSVjbCwgLTEoJTIsIiBQQlggIiwpICBcblx0IgogICAgICAiY21wbCAlJWVicCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICJqYiBwYWV0aF9scDEgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgIFJFU1RPUkVfcjExX3IxMl9yMTMKCiAgICJwYWV0aF9nbzogICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgUkVTVE9SRV9GdWxsTGVuZ3RoICIlJWVjeCAgICBcblx0IiAvLyBGdWxsTGVuZ3RoIC0+IGVjeAogICAgICAibW92bCAlJWVjeCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICJzdWJsICUlZWJ4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgYWxpZ25tZW50IGZpeAogICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlYXggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKICAgICAgInN1YmwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBkcm9wIG92ZXIgYnl0ZXMgZnJvbSBvcmlnaW5hbCBsZW5ndGgKLy9vdXQgIm1vdmwgJSVlY3gsIE1NWExlbmd0aCAgICAgICBcblx0IgogICAgICAibW92bCAlJWVicCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIGVicCA9IGRpZmYsIGJ1dCBubyByZWcgY29uc3RyYWludCg/KQogICAgICBSRVNUT1JFX2VicCAgICAgICAgICAgICAgICAgICAgICAgIC8vICAoY291bGQgc3dhcCBlYnAgYW5kIGVkeCBmdW5jdGlvbnMpCiAgICAgIFJFU1RPUkVfcjE1CiAgICAgIFJFU1RPUkVfR09UX2VieAoKICAgICAgOiAiPWMiIChNTVhMZW5ndGgpLCAgICAgICAgICAgICAgICAvLyBvdXRwdXQgcmVncwogICAgICAgICI9UyIgKGR1bW15X3ZhbHVlX1MpLAogICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICI9YSIgKGRpZmYpCgogICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAvLyBlY3ggICAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAiMSIgKHByZXZfcm93KSwgICAgLy8gZXNpL3JzaQogICAgICAgICIyIiAocm93KSwgICAgICAgICAvLyBlZGkvcmRpCiAgICAgICAgIjMiIChGdWxsTGVuZ3RoKSAgIC8vIGVheAoKICAgICAgOiAiJWVkeCIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICBfQ0xPQkJFUl9yMTFfcjEyX3IxMwogICAgICAgIF9DTE9CQkVSX3IxNQogICAgICAgIF9DTE9CQkVSX2VicAogICAgICAgIF9DTE9CQkVSX0dPVF9lYngKICAgKTsKCiAgIC8vIG5vdyBkbyB0aGUgbWF0aCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJvdwogICBzd2l0Y2ggKGJwcCkKICAgewogICAgICBjYXNlIDM6CiAgICAgIHsKLy8gICAgICAgX1NoaWZ0QnBwID0gMjQ7ICAgIC8vID09IGJwcCAqIDgKLy8gICAgICAgX1NoaWZ0UmVtID0gNDA7ICAgIC8vID09IDY0IC0gX1NoaWZ0QnBwCgogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgIExPQURfR09UX3JicAovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVjeCAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIHJvdywgJTEgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQovLyBwcmVsb2FkICAibW92bCBwcmV2X3JvdywgJTAgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIKICAgICAgICAgInBhZXRoXzNscDogICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHNybHEgJDQwLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGxhc3QgMyBieXRlcyB0byAxc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGJ5dGVzCiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQogICAgICAgICAgICAibW92cSAtOCglMCwiIFBDWCAiLCksICUlbW0zIFxuXHQiIC8vIHByZXAgYz1Qcmlvcih4LWJwcCkgYnl0ZXMKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTIgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBiCiAgICAgICAgICAgICJwc3JscSAkNDAsICUlbW0zICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgbGFzdCAzIGJ5dGVzIHRvIDFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgYnl0ZXMKICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQogICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW00LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCiAgICAgICAgICAgICJwYW5kICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhY2t1c3diICUlbW0xLCAlJW1tNyAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMyAgIFxuXHQiIC8vIGxvYWQgYz1Qcmlvcih4LWJwcCkKICAgICAgICAgICAgInBhbmQgIiBBTUFTSzVfM18wICIsICUlbW03ICBcblx0IiAvLyBfYW1hc2s1XzNfMCAod2FzIF9BY3RpdmVNYXNrKQogICAgICAgICAgICAibW92cSAlJW1tMywgJSVtbTIgICAgICAgICAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDEKICAgICAgICAgICAgInBhZGRiICglMSwiIFBDWCAiLCksICUlbW03ICBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0zICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYwogICAgICAgICAgICAibW92cSAlJW1tNywgKCUxLCIgUENYICIsKSAgIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTEgICAgICAgICAgIFxuXHQiIC8vIG5vdyBtbTEgd2lsbCBiZSB1c2VkIGFzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3KHgtYnBwKQogICAgICAgICAgICAvLyBub3cgZG8gUGFldGggZm9yIDJuZCBzZXQgb2YgYnl0ZXMgKDMtNSkKICAgICAgICAgICAgInBzcmxxICQyNCwgJSVtbTIgICAgICAgICAgICBcblx0IiAvLyBsb2FkIGI9UHJpb3IoeCkgc3RlcCAyCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYQogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPQogICAgICAgICAgICAvLyAgICAgICBwYXYgKyBwYnYgPSBwYnYgKyBwYXYKICAgICAgICAgICAgIm1vdnEgJSVtbTUsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTQsICUlbW02ICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCiAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTEsICUlbW03ICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tMyAgICAgICAgICAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKSBzdGVwIDEKICAgICAgICAgICAgInBhbmQgIiBBTUFTSzVfM18wICIsICUlbW03ICBcblx0IiAvLyBfYW1hc2s1XzNfMCAod2FzIF9BY3RpdmVNYXNrKQogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTcgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBieXRlcyB0byAybmQgZ3JvdXAgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGJ5dGVzCiAgICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICglMSwiIFBDWCAiLCksICUlbW03ICBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCiAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0zICAgICAgICAgICAgXG5cdCIgLy8gbG9hZCBjPVByaW9yKHgtYnBwKSBzdGVwIDIKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGMKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBieXRlcyAod2FzIF9TaGlmdEJwcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm93IG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKQogICAgICAgICAgICAvLyBub3cgZG8gUGFldGggZm9yIDNyZCwgYW5kIGZpbmFsLCBzZXQgb2YgYnl0ZXMgKDYtNykKICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGEKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQogICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW00LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTcsICUlbW0xICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHN0ZXAgZWN4IHRvIG5leHQgc2V0IG9mIDggYnl0ZXMgYW5kIHJlcGVhdCBsb29wIHRpbCBkb25lCiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgIiBBTUFTSzBfMl82ICIsICUlbW0xICBcblx0IiAvLyBfYW1hc2swXzJfNiAoX0FjdGl2ZU1hc2tFbmQpCiAgICAgICAgICAgICJwYWRkYiAtOCglMSwiIFBDWCAiLCksICUlbW0xIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBweG9yIGRvZXMgbm90IGFmZmVjdCBmbGFncwogICAgICAgICAgICAibW92cSAlJW1tMSwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMyByZWFkeSB0byBiZSB1c2VkIGFzIFByaW9yKHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgImpiIHBhZXRoXzNscCAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICBSRVNUT1JFX3JicAoKICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKCiAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kvcnNpICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgLy8gZWRpL3JkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAvLyBlYXgKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCAzIGJwcAoKICAgICAgY2FzZSA0OgogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlY3ggICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCByb3csICUxICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUwICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gb25seSB0aW1lIHNob3VsZCBuZWVkIHRvIHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYT1SYXcoeC1icHApIGJ5dGVzCiAgICAgICAgICJwYWV0aF80bHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gZG8gZmlyc3Qgc2V0IG9mIDQgYnl0ZXMKICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBhCiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCiAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQogICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tMSwgJSVtbTcgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUwLCIgUENYICIsKSwgJSVtbTMgICBcblx0IiAvLyBsb2FkIGM9UHJpb3IoeC1icHApCiAgICAgICAgICAgIExPQURfR09UX3JicAogICAgICAgICAgICAicGFuZCAiIEFNQVNLNF80XzAgIiwgJSVtbTcgIFxuXHQiIC8vIF9hbWFzazRfNF8wICh3YXMgX0FjdGl2ZU1hc2spCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCiAgICAgICAgICAgICJtb3ZxICUlbW0zLCAlJW1tMiAgICAgICAgICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpIHN0ZXAgMQogICAgICAgICAgICAicGFkZGIgKCUxLCIgUENYICIsKSwgJSVtbTcgIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAoJTEsIiBQQ1ggIiwpICAgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMSAgICAgICAgICAgXG5cdCIgLy8gbm93IG1tMSB3aWxsIGJlIHVzZWQgYXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYXcoeC1icHApCiAgICAgICAgICAgIC8vIGRvIHNlY29uZCBzZXQgb2YgNCBieXRlcwogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYgogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYQogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMSwgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQogICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW00LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCiAgICAgICAgICAgICJwYW5kICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBzdGVwIGVjeCB0byBuZXh0IHNldCBvZiA4IGJ5dGVzIGFuZCByZXBlYXQgbG9vcCB0aWwgZG9uZQogICAgICAgICAgICAiYWRkbCAkOCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWNrdXN3YiAlJW1tNywgJSVtbTEgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gYWRkIHByZWRpY3RvciB3aXRoIFJhdyh4KQogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAlJW1tMSwgLTgoJTEsIiBQQ1ggIiwpIFxuXHQiIC8vIHdyaXRlIGJhY2sgdXBkYXRlZCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtbTEgd2lsbCBiZSB1c2VkIGFzIFJhdyh4LWJwcCkgbmV4dCBsb29wCiAgICAgICAgICAgICJqYiBwYWV0aF80bHAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1TIiAoZHVtbXlfdmFsdWVfUyksICAgICAgICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLAogICAgICAgICAgICAgICI9YyIgKGR1bW15X3ZhbHVlX2MpLAogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpCgogICAgICAgICAgICA6ICIwIiAocHJldl9yb3cpLCAgLy8gZXNpL3JzaSAgICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgIC8vIGVjeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgLy8gZWF4CgojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgOiAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgNCBicHAKCiAgICAgIGNhc2UgMToKICAgICAgY2FzZSAyOgogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlYXggICAgICAgICAgICBcblx0IiAvLyBlYXg6IHggPSBvZmZzZXQgdG8gYWxpZ24uIGJkcnkKLy8gcHJlbG9hZCAgIm1vdmwgRnVsbExlbmd0aCwgJSVlZHggICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVkeCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJqbmIgcGFldGhfZGVuZCAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIFNBVkVfZWJwCgovLyBwcmVsb2FkICAibW92bCByb3csICUyICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKICAgICAgICAgICAgLy8gZG8gUGFldGggZGVjb2RlIGZvciByZW1haW5pbmcgYnl0ZXMKLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUxICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpCiAgICAgICAgICAgICJtb3ZsICUlZWF4LCAlJWVicCAgICAgICAgICAgXG5cdCIKLy8gcHJlbG9hZCAgInN1YmwgYnBwLCAlJWVicCAgICAgICAgICAgICBcblx0IiAvLyAoYnBwIGlzIHByZWxvYWRlZCBpbnRvIGVjeCkKICAgICAgICAgICAgInN1YmwgJSVlY3gsICUlZWJwICAgICAgICAgICBcblx0IiAvLyBlYnAgPSBlYXggLSBicHAKICAgICAgICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyB6ZXJvIGVjeCBiZWZvcmUgdXNpbmcgY2wgJiBjeAoKICAgICAgICAgICAgU0FWRV9HT1RfZWJ4CiAgICAgICAgICAgIFNBVkVfcjExX3IxMl9yMTMKCiAgICAgICAgICJwYWV0aF9kbHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZiICglMSwiIFBBWCAiLCksICUlYmwgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4KSBpbnRvIGJsCiAgICAgICAgICAgICJtb3ZiICglMSwiIFBCUCAiLCksICUlY2wgICAgXG5cdCIgLy8gbG9hZCBQcmlvcih4LWJwcCkgaW50byBjbAogICAgICAgICAgICAic3VibCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IFByaW9yKHgtYnBwKQogICAgICAgICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIFNhdmUgcGF2IGZvciBsYXRlciB1c2UKICAgICAgICAgICAgInhvcmwgJSVlYngsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZiICglMiwiIFBCUCAiLCksICUlYmwgICAgXG5cdCIgLy8gbG9hZCBSYXcoeC1icHApIGludG8gYmwKICAgICAgICAgICAgInN1YmwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKICAgICAgICAgICAgIm1vdmwgJSVlYngsICUlZWN4ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgICAgICAgImFkZGwgIiBwYV9URU1QICIsICUlZWJ4ICAgICBcblx0IiAvLyBwY3YgPSBwYXYgKyBwYnYKICAgICAgICAgICAgLy8gcGMgPSBhYnMocGN2KQogICAgICAgICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWJ4ICAgIFxuXHQiCiAgICAgICAgICAgICJqeiBwYWV0aF9kcGNhICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgICAgICAgInBhZXRoX2RwY2E6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92bCAlJWVieCwgIiBwY19URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGMgZm9yIGxhdGVyIHVzZQogICAgICAgICAgICAvLyBwYiA9IGFicyhwYnYpCiAgICAgICAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlY3ggICAgXG5cdCIKICAgICAgICAgICAgImp6IHBhZXRoX2RwYmEgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibmVnbCAlJWVjeCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAgICAgICAicGFldGhfZHBiYTogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZsICUlZWN4LCAiIHBiX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYiBmb3IgbGF0ZXIgdXNlCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHBhdikKICAgICAgICAgICAgIm1vdmwgIiBwYV9URU1QICIsICUlZWJ4ICAgICBcblx0IgogICAgICAgICAgICAidGVzdGwgJDB4ODAwMDAwMDAsICUlZWJ4ICAgIFxuXHQiCiAgICAgICAgICAgICJqeiBwYWV0aF9kcGFhICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm5lZ2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IiAvLyByZXZlcnNlIHNpZ24gb2YgbmVnIHZhbHVlcwoKICAgICAgICAgInBhZXRoX2RwYWE6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92bCAlJWVieCwgIiBwYV9URU1QICIgICAgIFxuXHQiIC8vIHNhdmUgcGEgZm9yIGxhdGVyIHVzZQogICAgICAgICAgICAvLyB0ZXN0IGlmIHBhIDw9IHBiCiAgICAgICAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImpuYSBwYWV0aF9kYWJiICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA+IHBiOyBub3cgdGVzdCBpZiBwYiA8PSBwYwogICAgICAgICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlY3ggICAgIFxuXHQiCiAgICAgICAgICAgICJqbmEgcGFldGhfZGJiYyAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGIgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKICAgICAgICAgICAgIm1vdmIgKCUxLCIgUEJQICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICAgICAgICJqbXAgcGFldGhfZHBhZXRoICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICJwYWV0aF9kYmJjOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGIgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeCkKICAgICAgICAgICAgIm1vdmIgKCUxLCIgUEFYICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgpIGludG8gY2wKICAgICAgICAgICAgImptcCBwYWV0aF9kcGFldGggICAgICAgICAgICBcblx0IgoKICAgICAgICAgInBhZXRoX2RhYmI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA8PSBwYjsgbm93IHRlc3QgaWYgcGEgPD0gcGMKICAgICAgICAgICAgImNtcGwgIiBwY19URU1QICIsICUlZWJ4ICAgICBcblx0IgogICAgICAgICAgICAiam5hIHBhZXRoX2RhYmMgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhID4gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUHJpb3IoeC1icHApCiAgICAgICAgICAgICJtb3ZiICglMSwiIFBCUCAiLCksICUlY2wgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICAgICAgICJqbXAgcGFldGhfZHBhZXRoICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICJwYWV0aF9kYWJjOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGEgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUmF3KHgtYnBwKQogICAgICAgICAgICAibW92YiAoJTIsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGNsCgogICAgICAgICAicGFldGhfZHBhZXRoOiAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJpbmNsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImluY2wgJSVlYnAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBSYXcoeCkgPSAoUGFldGgoeCkgKyBQYWV0aF9QcmVkaWN0b3IoIGEsIGIsIGMgKSkgbW9kIDI1NgogICAgICAgICAgICAiYWRkYiAlJWNsLCAtMSglMiwiIFBBWCAiLCkgIFxuXHQiCiAgICAgICAgICAgICJjbXBsICUlZWR4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gY2hlY2sgYWdhaW5zdCBGdWxsTGVuZ3RoCiAgICAgICAgICAgICJqYiBwYWV0aF9kbHAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIFJFU1RPUkVfcjExX3IxMl9yMTMKICAgICAgICAgICAgUkVTVE9SRV9HT1RfZWJ4CiAgICAgICAgICAgIFJFU1RPUkVfZWJwCgogICAgICAgICAicGFldGhfZGVuZDogICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKSwKICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKQoKICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgLy8gZWN4ICAgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChwcmV2X3JvdyksICAgIC8vIGVzaS9yc2kKICAgICAgICAgICAgICAiMiIgKHJvdyksICAgICAgICAgLy8gZWRpL3JkaQogICAgICAgICAgICAgICIzIiAoZGlmZiksICAgICAgICAvLyBlYXgKICAgICAgICAgICAgICAiNCIgKEZ1bGxMZW5ndGgpICAgLy8gZWR4CgogICAgICAgICAgICBDTE9CX0NPTE9OX2VieF9lYnBfcjFYICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAgIENMT0JCRVJfR09UX2VieAogICAgICAgICAgICAgIENMT0JfQ09NTUFfZWJ4X2VicAogICAgICAgICAgICAgIENMT0JCRVJfZWJwCiAgICAgICAgICAgICAgQ0xPQl9DT01NQV9lYlhfcjFYCiAgICAgICAgICAgICAgQ0xPQkJFUl9yMTFfcjEyX3IxMwogICAgICAgICApOwogICAgICB9CiAgICAgIHJldHVybjsgLy8gZW5kIDEgb3IgMiBicHAgKG5vIG5lZWQgdG8gZ28gZnVydGhlciB3aXRoIHRoaXMgb25lKQoKICAgICAgY2FzZSA2OgogICAgICB7Ci8vICAgICAgIF9BY3RpdmVNYXNrMiA9IDB4ZmZmZmZmZmYwMDAwMDAwMExMOyAgLy8gTk9UIFVTRUQgKCJfYW1hc2tfMF80XzQiKQovLyAgICAgICBfU2hpZnRCcHAgPSA0ODsgICAgICAgLy8gYnBwIDw8IDMgPT0gYnBwICogOAovLyAgICAgICBfU2hpZnRSZW0gPSAxNjsgICAgICAgLy8gNjQgLSBfU2hpZnRCcHAKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlY3ggICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCByb3csICUxICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUwICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglMSwiIFBDWCAiLCksICUlbW0xIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICJwYWV0aF82bHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gbXVzdCBzaGlmdCB0byBwb3NpdGlvbiBSYXcoeC1icHApIGRhdGEKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyB3YXMgX1NoaWZ0UmVtCiAgICAgICAgICAgIC8vIGRvIGZpcnN0IHNldCBvZiA0IGJ5dGVzCiAgICAgICAgICAgICJtb3ZxIC04KCUwLCIgUENYICIsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcwogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYQogICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMiAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KQogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYgogICAgICAgICAgICAvLyBtdXN0IHNoaWZ0IHRvIHBvc2l0aW9uIFByaW9yKHgtYnBwKSBkYXRhCiAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0zICAgICAgICAgICAgXG5cdCIgLy8gd2FzIF9TaGlmdFJlbQogICAgICAgICAgICAvLyBwYXYgPSBwIC0gYSA9IChhICsgYiAtIGMpIC0gYSA9IGIgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB1bnBja2xidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgTG93IGJ5dGVzIG9mIGMKICAgICAgICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMSwgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTcsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwY3YgPSBwIC0gYyA9IChhICsgYiAtIGMpIC1jID0gKGEgLSBjKSArIChiIC0gYykgPSBwYXYgKyBwYnYKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBhID0gYWJzKHAtYSkgPSBhYnMocGF2KQogICAgICAgICAgICAvLyBwYiA9IGFicyhwLWIpID0gYWJzKHBidikKICAgICAgICAgICAgLy8gcGMgPSBhYnMocC1jKSA9IGFicyhwY3YpCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW00LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGF2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW00LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBidiBieXRlcyA8IDAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNSwgJSVtbTcgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGJ2IGJ5dGVzIDwgMCBpbiBtbTAKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwY3YgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMCAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYXYgYnl0ZXMgPCAwIGluIG1tNwogICAgICAgICAgICAicHN1YncgJSVtbTcsICUlbW01ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgcGEgPD0gcGIKICAgICAgICAgICAgIm1vdnEgJSVtbTQsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGEgPiBwYj8KICAgICAgICAgICAgIm1vdnEgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW03IG1hc2sgdG8gbWVyZ2UgcGEgJiBwYgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTAgbWFzayBjb3B5IHRvIG1lcmdlIGEgJiBiCiAgICAgICAgICAgICJwYW5kICUlbW0wLCAlJW1tMiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW00LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0yLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCAgKChwYSA8PSBwYik/IHBhOnBiKSA8PSBwYwogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhYiA+IHBjPwogICAgICAgICAgICAicHhvciAlJW1tMSwgJSVtbTEgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tMyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0wLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhY2t1c3diICUlbW0xLCAlJW1tNyAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAtOCglMCwiIFBDWCAiLCksICUlbW0zIFxuXHQiIC8vIGxvYWQgYz1Qcmlvcih4LWJwcCkKICAgICAgICAgICAgTE9BRF9HT1RfcmJwCiAgICAgICAgICAgICJwYW5kICIgQU1BU0s0XzRfMCAiLCAlJW1tNyAgXG5cdCIgLy8gX2FtYXNrNF80XzAgKHdhcyBfQWN0aXZlTWFzaykKICAgICAgICAgICAgUkVTVE9SRV9yYnAKICAgICAgICAgICAgInBzcmxxICQxNiwgJSVtbTMgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMiAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KSBzdGVwIDEKICAgICAgICAgICAgInBhZGRiICglMSwiIFBDWCAiLCksICUlbW03ICBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCiAgICAgICAgICAgICJtb3ZxICUlbW0yLCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgJSVtbTcsICglMSwiIFBDWCAiLCkgICBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IgogICAgICAgICAgICAicHNsbHEgJDQ4LCAlJW1tNiAgICAgICAgICAgIFxuXHQiIC8vIGJwcCAqIDggPSBiaXRzIHBlciBwaXhlbAogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTUgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gNjQgLSAoYnBwICogOCkgPSByZW1haW5kZXIKICAgICAgICAgICAgInBvciAlJW1tNiwgJSVtbTMgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHNsbHEgJDQ4LCAlJW1tNSAgICAgICAgICAgIFxuXHQiIC8vIHdhcyBfU2hpZnRCcHAKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgICJwb3IgJSVtbTUsICUlbW0xICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gZG8gc2Vjb25kIHNldCBvZiA0IGJ5dGVzCiAgICAgICAgICAgICJwdW5wY2toYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIEhpZ2ggYnl0ZXMgb2YgYgogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMSAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGEKICAgICAgICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAgICAgICAibW92cSAlJW1tMiwgJSVtbTQgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBidiA9IHAgLSBiID0gKGEgKyBiIC0gYykgLSBiID0gYSAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTMsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW03LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtYyA9IChhIC0gYykgKyAoYiAtIGMpID0gcGF2ICsgcGJ2CiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNiAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYSA9IGFicyhwLWEpID0gYWJzKHBhdikKICAgICAgICAgICAgLy8gcGIgPSBhYnMocC1iKSA9IGFicyhwYnYpCiAgICAgICAgICAgIC8vIHBjID0gYWJzKHAtYykgPSBhYnMocGN2KQogICAgICAgICAgICAicGNtcGd0dyAlJW1tNCwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBhdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNCwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYnYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW03ICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBidiBieXRlcyA8IDAgaW4gbW0wCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTQgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tMCAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGN2IGJ5dGVzIDwgMAogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTAgICAgICAgICAgIFxuXHQiIC8vIG9ubHkgcGF2IGJ5dGVzIDwgMCBpbiBtbTcKICAgICAgICAgICAgInBzdWJ3ICUlbW03LCAlJW1tNSAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW02ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0IHBhIDw9IHBiCiAgICAgICAgICAgICJtb3ZxICUlbW00LCAlJW1tNyAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNSwgJSVtbTcgICAgICAgIFxuXHQiIC8vIHBhID4gcGI/CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tNyBtYXNrIHRvIG1lcmdlIHBhICYgcGIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyB1c2UgbW0wIG1hc2sgY29weSB0byBtZXJnZSBhICYgYgogICAgICAgICAgICAicGFuZCAlJW1tMCwgJSVtbTIgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tNCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmRuICUlbW0xLCAlJW1tMCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTUsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMiwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gIHRlc3QgICgocGEgPD0gcGIpPyBwYTpwYikgPD0gcGMKICAgICAgICAgICAgInBjbXBndHcgJSVtbTYsICUlbW03ICAgICAgICBcblx0IiAvLyBwYWIgPiBwYz8KICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTMgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMCwgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTEsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTMsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gc3RlcCBlY3ggdG8gbmV4dCBzZXQgb2YgOCBieXRlcyBhbmQgcmVwZWF0IGxvb3AgdGlsIGRvbmUKICAgICAgICAgICAgImFkZGwgJDgsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTcsICUlbW0xICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAtOCglMSwiIFBDWCAiLCksICUlbW0xIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgImNtcGwgJSVlYXgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTEsIC04KCUxLCIgUENYICIsKSBcblx0IiAvLyB3cml0ZSBiYWNrIHVwZGF0ZWQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW0xIHdpbGwgYmUgdXNlZCBhcyBSYXcoeC1icHApIG5leHQgbG9vcAogICAgICAgICAgICAiamIgcGFldGhfNmxwICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICA6ICI9UyIgKGR1bW15X3ZhbHVlX1MpLCAgICAgICAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwKICAgICAgICAgICAgICAiPWMiIChkdW1teV92YWx1ZV9jKSwKICAgICAgICAgICAgICAiPWEiIChkdW1teV92YWx1ZV9hKQoKICAgICAgICAgICAgOiAiMCIgKHByZXZfcm93KSwgIC8vIGVzaS9yc2kgICAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgICAgICAgIjEiIChyb3cpLCAgICAgICAvLyBlZGkvcmRpCiAgICAgICAgICAgICAgIjIiIChkaWZmKSwgICAgICAvLyBlY3gKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiICAgLy8gY2xvYmJlciBsaXN0CiAgICAgICAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICAgICAgICApOwogICAgICB9CiAgICAgIGJyZWFrOyAgLy8gZW5kIDYgYnBwCgogICAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBicHAgPT0gOAogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlY3ggICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCByb3csICUxICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLy8gcHJlbG9hZCAgIm1vdmwgcHJldl9yb3csICUwICAgICAgICAgICBcblx0IiAvLyBlc2kvcnNpCiAgICAgICAgICAgICJweG9yICUlbW0wLCAlJW1tMCAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gb25seSB0aW1lIHNob3VsZCBuZWVkIHRvIHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgYT1SYXcoeC1icHApIGJ5dGVzCiAgICAgICAgICJwYWV0aF84bHA6ICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gZG8gZmlyc3Qgc2V0IG9mIDQgYnl0ZXMKICAgICAgICAgICAgIm1vdnEgLTgoJTAsIiBQQ1ggIiwpLCAlJW1tMyBcblx0IiAvLyByZWFkIGM9UHJpb3IoeC1icHApIGJ5dGVzCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0xICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBhCiAgICAgICAgICAgICJtb3ZxICglMCwiIFBDWCAiLCksICUlbW0yICAgXG5cdCIgLy8gbG9hZCBiPVByaW9yKHgpCiAgICAgICAgICAgICJwdW5wY2tsYncgJSVtbTAsICUlbW0yICAgICAgXG5cdCIgLy8gdW5wYWNrIExvdyBieXRlcyBvZiBiCiAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHVucGNrbGJ3ICUlbW0wLCAlJW1tMyAgICAgIFxuXHQiIC8vIHVucGFjayBMb3cgYnl0ZXMgb2YgYwogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkdyAlJW1tMywgJSVtbTcgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFja3Vzd2IgJSVtbTEsICUlbW03ICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxIC04KCUwLCIgUENYICIsKSwgJSVtbTMgXG5cdCIgLy8gcmVhZCBjPVByaW9yKHgtYnBwKSBieXRlcwogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgInBhbmQgIiBBTUFTSzRfNF8wICIsICUlbW03ICBcblx0IiAvLyBfYW1hc2s0XzRfMCAod2FzIF9BY3RpdmVNYXNrKQogICAgICAgICAgICBSRVNUT1JFX3JicAogICAgICAgICAgICAibW92cSAoJTAsIiBQQ1ggIiwpLCAlJW1tMiAgIFxuXHQiIC8vIGxvYWQgYj1Qcmlvcih4KQogICAgICAgICAgICAicGFkZGIgKCUxLCIgUENYICIsKSwgJSVtbTcgIFxuXHQiIC8vIGFkZCBQYWV0aCBwcmVkaWN0b3IgKyBSYXcoeCkKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTMgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBjCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAoJTEsIiBQQ1ggIiwpICAgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUENYICIsKSwgJSVtbTEgXG5cdCIgLy8gcmVhZCBhPVJhdyh4LWJwcCkgYnl0ZXMKCiAgICAgICAgICAgIC8vIGRvIHNlY29uZCBzZXQgb2YgNCBieXRlcwogICAgICAgICAgICAicHVucGNraGJ3ICUlbW0wLCAlJW1tMiAgICAgIFxuXHQiIC8vIHVucGFjayBIaWdoIGJ5dGVzIG9mIGIKICAgICAgICAgICAgInB1bnBja2hidyAlJW1tMCwgJSVtbTEgICAgICBcblx0IiAvLyB1bnBhY2sgSGlnaCBieXRlcyBvZiBhCiAgICAgICAgICAgIC8vIHBhdiA9IHAgLSBhID0gKGEgKyBiIC0gYykgLSBhID0gYiAtIGMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyBwYnYgPSBwIC0gYiA9IChhICsgYiAtIGMpIC0gYiA9IGEgLSBjCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0zLCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tNywgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHBjdiA9IHAgLSBjID0gKGEgKyBiIC0gYykgLWMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTYgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gcGEgPSBhYnMocC1hKSA9IGFicyhwYXYpCiAgICAgICAgICAgIC8vIHBiID0gYWJzKHAtYikgPSBhYnMocGJ2KQogICAgICAgICAgICAvLyBwYyA9IGFicyhwLWMpID0gYWJzKHBjdikKICAgICAgICAgICAgInBjbXBndHcgJSVtbTQsICUlbW0wICAgICAgICBcblx0IiAvLyBjcmVhdGUgbWFzayBwYXYgYnl0ZXMgPCAwCiAgICAgICAgICAgICJwYWRkdyAlJW1tNSwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTQsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwY21wZ3R3ICUlbW01LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gY3JlYXRlIG1hc2sgcGJ2IGJ5dGVzIDwgMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kICUlbW01LCAlJW1tNyAgICAgICAgICAgXG5cdCIgLy8gb25seSBwYnYgYnl0ZXMgPCAwIGluIG1tMAogICAgICAgICAgICAicHN1YncgJSVtbTAsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInB4b3IgJSVtbTAsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGNtcGd0dyAlJW1tNiwgJSVtbTAgICAgICAgIFxuXHQiIC8vIGNyZWF0ZSBtYXNrIHBjdiBieXRlcyA8IDAKICAgICAgICAgICAgInBhbmQgJSVtbTYsICUlbW0wICAgICAgICAgICBcblx0IiAvLyBvbmx5IHBhdiBieXRlcyA8IDAgaW4gbW03CiAgICAgICAgICAgICJwc3VidyAlJW1tNywgJSVtbTUgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBzdWJ3ICUlbW0wLCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAgICAgICAvLyAgdGVzdCBwYSA8PSBwYgogICAgICAgICAgICAibW92cSAlJW1tNCwgJSVtbTcgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwc3VidyAlJW1tMCwgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBjbXBndHcgJSVtbTUsICUlbW03ICAgICAgICBcblx0IiAvLyBwYSA+IHBiPwogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHVzZSBtbTcgbWFzayB0byBtZXJnZSBwYSAmIHBiCiAgICAgICAgICAgICJwYW5kICUlbW03LCAlJW1tNSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgLy8gdXNlIG1tMCBtYXNrIGNvcHkgdG8gbWVyZ2UgYSAmIGIKICAgICAgICAgICAgInBhbmQgJSVtbTAsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTQsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYW5kbiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW01LCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZHcgJSVtbTIsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vICB0ZXN0ICAoKHBhIDw9IHBiKT8gcGE6cGIpIDw9IHBjCiAgICAgICAgICAgICJwY21wZ3R3ICUlbW02LCAlJW1tNyAgICAgICAgXG5cdCIgLy8gcGFiID4gcGM/CiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFuZG4gJSVtbTAsICUlbW03ICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJweG9yICUlbW0xLCAlJW1tMSAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGR3ICUlbW0zLCAlJW1tNyAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHhvciAlJW1tMCwgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgIC8vIHN0ZXAgZWN4IHRvIG5leHQgc2V0IG9mIDggYnl0ZXMgYW5kIHJlcGVhdCBsb29wIHRpbCBkb25lCiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgInBhY2t1c3diICUlbW03LCAlJW1tMSAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgLTgoJTEsIiBQQ1ggIiwpLCAlJW1tMSBcblx0IiAvLyBhZGQgUGFldGggcHJlZGljdG9yICsgUmF3KHgpCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJtb3ZxICUlbW0xLCAtOCglMSwiIFBDWCAiLCkgXG5cdCIgLy8gd3JpdGUgYmFjayB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tMSB3aWxsIGJlIHVzZWQgYXMgUmF3KHgtYnBwKSBuZXh0IGxvb3AKICAgICAgICAgICAgImpiIHBhZXRoXzhscCAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgICAgICAgIj1jIiAoZHVtbXlfdmFsdWVfYyksCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkKCiAgICAgICAgICAgIDogIjAiIChwcmV2X3JvdyksICAvLyBlc2kvcnNpICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgLy8gZWRpL3JkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgLy8gZWN4CiAgICAgICAgICAgICAgIjMiIChNTVhMZW5ndGgpICAvLyBlYXgKCiNpZiBkZWZpbmVkKENMT0JCRVJfTU1YX1JFR1NfU1VQUE9SVEVEKQogICAgICAgICAgICA6ICIlbW0wIiwgIiVtbTEiLCAiJW1tMiIsICIlbW0zIiAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAsICIlbW00IiwgIiVtbTUiLCAiJW1tNiIsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA4IGJwcAoKICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgLy8gYnBwICE9IDEsMiwzLDQsNiw4OiAgZG9lc24ndCBleGlzdAogICAgICB7CiAgICAgICAgIC8vIEVSUk9SOiAgU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICAgICAgICBwbmdfZGVidWcoMSwgIkludGVybmFsIGxpYnBuZyBsb2dpYyBlcnJvciAoR0NDICIKICAgICAgICAgICAicG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgoKSlcbiIpOwojZW5kaWYKICAgICAgfQogICAgICBicmVhazsKCiAgIH0gLy8gZW5kIHN3aXRjaCAoYnBwKQoKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAvLyBNTVggYWNjZWxlcmF0aW9uIGNvbXBsZXRlOyBub3cgZG8gY2xlYW4tdXAKICAgICAgLy8gY2hlY2sgaWYgYW55IHJlbWFpbmluZyBieXRlcyBsZWZ0IHRvIGRlY29kZQovL3ByZSAibW92bCBGdWxsTGVuZ3RoLCAlJWVkeCAgICAgIFxuXHQiCi8vcHJlICJtb3ZsIE1NWExlbmd0aCwgJSVlYXggICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICBcblx0IgogICAgICAiam5iIHBhZXRoX2VuZCAgICAgICAgICAgICAgIFxuXHQiCgogICAgICBTQVZFX2VicAoKLy9wcmUgIm1vdmwgcm93LCAlMiAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi8vcHJlICJtb3ZsIHByZXZfcm93LCAlMSAgICAgICAgICAgXG5cdCIgLy8gZXNpL3JzaQogICAgICAvLyBkbyBQYWV0aCBkZWNvZGUgZm9yIHJlbWFpbmluZyBieXRlcwogICAgICAibW92bCAlJWVheCwgJSVlYnAgICAgICAgICAgIFxuXHQiCi8vcHJlICJzdWJsIGJwcCwgJSVlYnAgICAgICAgICAgICAgXG5cdCIgLy8gKGJwcCBpcyBwcmVsb2FkZWQgaW50byBlY3gpCiAgICAgICJzdWJsICUlZWN4LCAlJWVicCAgICAgICAgICAgXG5cdCIgLy8gZWJwID0gZWF4IC0gYnBwCiAgICAgICJ4b3JsICUlZWN4LCAlJWVjeCAgICAgICAgICAgXG5cdCIgLy8gemVybyBlY3ggYmVmb3JlIHVzaW5nIGNsICYgY3ggYmVsb3cKCiAgICAgIFNBVkVfR09UX2VieAogICAgICBTQVZFX3IxMV9yMTJfcjEzCgogICAicGFldGhfbHAyOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGF2ID0gcCAtIGEgPSAoYSArIGIgLSBjKSAtIGEgPSBiIC0gYwogICAgICAibW92YiAoJTEsIiBQQVggIiwpLCAlJWJsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBibAogICAgICAibW92YiAoJTEsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKICAgICAgInN1YmwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCBQcmlvcih4LWJwcCkKICAgICAgIm1vdmwgJSVlYngsICIgcGFfVEVNUCAiICAgICBcblx0IiAvLyBTYXZlIHBhdiBmb3IgbGF0ZXIgdXNlCiAgICAgICJ4b3JsICUlZWJ4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGJ2ID0gcCAtIGIgPSAoYSArIGIgLSBjKSAtIGIgPSBhIC0gYwogICAgICAibW92YiAoJTIsIiBQQlAgIiwpLCAlJWJsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGJsCiAgICAgICJzdWJsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgUHJpb3IoeC1icHApCiAgICAgICJtb3ZsICUlZWJ4LCAlJWVjeCAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGN2ID0gcCAtIGMgPSAoYSArIGIgLSBjKSAtIGMgPSAoYSAtIGMpICsgKGIgLSBjKSA9IHBhdiArIHBidgogICAgICAiYWRkbCAiIHBhX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiIC8vIHBjdiA9IHBhdiArIHBidgogICAgICAvLyBwYyA9IGFicyhwY3YpCiAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYnggICAgXG5cdCIKICAgICAgImp6IHBhZXRoX3BjYTIgICAgICAgICAgICAgICBcblx0IgogICAgICAibmVnbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAicGFldGhfcGNhMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZsICUlZWJ4LCAiIHBjX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYyBmb3IgbGF0ZXIgdXNlCiAgICAgIC8vIHBiID0gYWJzKHBidikKICAgICAgInRlc3RsICQweDgwMDAwMDAwLCAlJWVjeCAgICBcblx0IgogICAgICAianogcGFldGhfcGJhMiAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJuZWdsICUlZWN4ICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gcmV2ZXJzZSBzaWduIG9mIG5lZyB2YWx1ZXMKCiAgICJwYWV0aF9wYmEyOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmwgJSVlY3gsICIgcGJfVEVNUCAiICAgICBcblx0IiAvLyBzYXZlIHBiIGZvciBsYXRlciB1c2UKICAgICAgLy8gcGEgPSBhYnMocGF2KQogICAgICAibW92bCAiIHBhX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiCiAgICAgICJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlYnggICAgXG5cdCIKICAgICAgImp6IHBhZXRoX3BhYTIgICAgICAgICAgICAgICBcblx0IgogICAgICAibmVnbCAlJWVieCAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHJldmVyc2Ugc2lnbiBvZiBuZWcgdmFsdWVzCgogICAicGFldGhfcGFhMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZsICUlZWJ4LCAiIHBhX1RFTVAgIiAgICAgXG5cdCIgLy8gc2F2ZSBwYSBmb3IgbGF0ZXIgdXNlCiAgICAgIC8vIHRlc3QgaWYgcGEgPD0gcGIKICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAiam5hIHBhZXRoX2FiYjIgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhID4gcGI7IG5vdyB0ZXN0IGlmIHBiIDw9IHBjCiAgICAgICJjbXBsICIgcGNfVEVNUCAiLCAlJWVjeCAgICAgXG5cdCIKICAgICAgImpuYSBwYWV0aF9iYmMyICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYiA+IHBjOyBSYXcoeCkgPSBQYWV0aCh4KSArIFByaW9yKHgtYnBwKQogICAgICAibW92YiAoJTEsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeC1icHApIGludG8gY2wKICAgICAgImptcCBwYWV0aF9wYWV0aDIgICAgICAgICAgICBcblx0IgoKICAgInBhZXRoX2JiYzI6ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBwYiA8PSBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4KQogICAgICAibW92YiAoJTEsIiBQQVggIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUHJpb3IoeCkgaW50byBjbAogICAgICAiam1wIHBhZXRoX3BhZXRoMiAgICAgICAgICAgIFxuXHQiCgogICAicGFldGhfYWJiMjogICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgIC8vIHBhIDw9IHBiOyBub3cgdGVzdCBpZiBwYSA8PSBwYwogICAgICAiY21wbCAiIHBjX1RFTVAgIiwgJSVlYnggICAgIFxuXHQiCiAgICAgICJqbmEgcGFldGhfYWJjMiAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGEgPiBwYzsgUmF3KHgpID0gUGFldGgoeCkgKyBQcmlvcih4LWJwcCkKICAgICAgIm1vdmIgKCUxLCIgUEJQICIsKSwgJSVjbCAgICBcblx0IiAvLyBsb2FkIFByaW9yKHgtYnBwKSBpbnRvIGNsCiAgICAgICJqbXAgcGFldGhfcGFldGgyICAgICAgICAgICAgXG5cdCIKCiAgICJwYWV0aF9hYmMyOiAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgLy8gcGEgPD0gcGM7IFJhdyh4KSA9IFBhZXRoKHgpICsgUmF3KHgtYnBwKQogICAgICAibW92YiAoJTIsIiBQQlAgIiwpLCAlJWNsICAgIFxuXHQiIC8vIGxvYWQgUmF3KHgtYnBwKSBpbnRvIGNsCgogICAicGFldGhfcGFldGgyOiAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJpbmNsICUlZWF4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgImluY2wgJSVlYnAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAvLyBSYXcoeCkgPSAoUGFldGgoeCkgKyBQYWV0aF9QcmVkaWN0b3IoIGEsIGIsIGMgKSkgbW9kIDI1NgogICAgICAiYWRkYiAlJWNsLCAtMSglMiwiIFBBWCAiLCkgIFxuXHQiCiAgICAgICJjbXBsICUlZWR4LCAlJWVheCAgICAgICAgICAgXG5cdCIgLy8gY2hlY2sgYWdhaW5zdCBGdWxsTGVuZ3RoCiAgICAgICJqYiBwYWV0aF9scDIgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgIFJFU1RPUkVfcjExX3IxMl9yMTMKICAgICAgUkVTVE9SRV9HT1RfZWJ4CiAgICAgIFJFU1RPUkVfZWJwCgogICAicGFldGhfZW5kOiAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZW5kIE1NWDsgcHJlcCBmb3IgcG9zcy4gRlAgaW5zdHJzLgoKICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAgICAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgIj1TIiAoZHVtbXlfdmFsdWVfUyksCiAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksCiAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSksCiAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCkKCiAgICAgIDogIjAiIChicHApLCAgICAgICAgIC8vIGVjeCAgICAgICAgLy8gaW5wdXQgcmVncwogICAgICAgICIxIiAocHJldl9yb3cpLCAgICAvLyBlc2kvcnNpCiAgICAgICAgIjIiIChyb3cpLCAgICAgICAgIC8vIGVkaS9yZGkKICAgICAgICAiMyIgKE1NWExlbmd0aCksICAgLy8gZWF4CiAgICAgICAgIjQiIChGdWxsTGVuZ3RoKSAgIC8vIGVkeAoKICAgICAgQ0xPQl9DT0xPTl9lYnhfZWJwX3IxWCAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgICAgICBDTE9CQkVSX0dPVF9lYngKICAgICAgICBDTE9CX0NPTU1BX2VieF9lYnAKICAgICAgICBDTE9CQkVSX2VicAogICAgICAgIENMT0JfQ09NTUFfZWJYX3IxWAogICAgICAgIENMT0JCRVJfcjExX3IxMl9yMTMKICAgKTsKCn0gLyogZW5kIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKCkgKi8KI2VuZGlmIC8qIFBOR19NTVhfUkVBRF9GSUxURVJfUEFFVEhfU1VQUE9SVEVEICovCgojZW5kaWYgLy8gUE5HX3g4Nl82NF9VU0VfR09UUENSRUwgfHwgUE5HX1RIUkVBRF9VTlNBRkVfT0sKCgoKCiNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX1NVQl9TVVBQT1JURUQKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBTIFUgQiAgICAgICAgICAgLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCgovLyBPcHRpbWl6ZWQgY29kZSBmb3IgUE5HIFN1YiBmaWx0ZXIgZGVjb2RlcgoKc3RhdGljIHZvaWQgLyogUFJJVkFURSAqLwpwbmdfcmVhZF9maWx0ZXJfcm93X21teF9zdWIocG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwIHJvdykKewogICBwbmdfdWludF8zMiBGdWxsTGVuZ3RoLCBNTVhMZW5ndGg7CiAgIGludCBicHA7CiAgIGludCBkdW1teV92YWx1ZV9hOwogICBpbnQgZHVtbXlfdmFsdWVfYzsKICAgaW50IGR1bW15X3ZhbHVlX2Q7CiAgIHBuZ19ieXRlcCBkdW1teV92YWx1ZV9EOwogICBpbnQgZGlmZjsgLy8gICAgIF9fYXR0cmlidXRlX18oKHVzZWQpKTsKCiAgIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOyAgLy8gY2FsYyBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsCiAgIEZ1bGxMZW5ndGggPSByb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7ICAgLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIGZpbHRlcgogICAgIC8vICh3aHkgZG8gd2Ugc3VidHJhY3Qgb2ZmIGJwcD8gIG5vdCBzbyBpbiBhdmcgb3IgcGFldGguLi4pCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgIFNBVkVfcjE1CiAgICAgIFNBVkVfZWJwCi8vcHJlICJtb3ZsIHJvdywgJTEgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQogICAgICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci8vcHJlICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgXG5cdCIKICAgICAgImFkZCAgIiBQQ1ggIiwgJTEgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAovL3ByZSAibW92bCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgIFxuXHQiIC8vIGJyaW5nIGluIHZpYSBlYXguLi4KICAgICAgU0FWRV9GdWxsTGVuZ3RoICAgICAgICAgICAgICAgICAgICAvLyAuLi5idXQgc3RvcmUgZm9yIGxhdGVyIHVzZQoKICAgICAgInhvcmwgJSVlYXgsICUlZWF4ICAgICAgICAgICBcblx0IgoKICAgICAgLy8gZ2V0ICMgb2YgYnl0ZXMgdG8gYWxpZ25tZW50IChub3RlOiAgY29tcHV0aW5nIF9kZWx0YV8gb2YgdHdvIHBvaW50ZXJzLAogICAgICAvLyBzbyBoZXJlYWZ0ZXIgJSVlYnAgaXMgc3VmZmljaWVudCBldmVuIG9uIDY0LWJpdCkKICAgICAgIm1vdiAgJTEsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyB0YWtlIHN0YXJ0IG9mIHJvdwogICAgICAiYWRkICAkMHhmLCAiIFBCUCAiICAgICAgICAgIFxuXHQiIC8vIGFkZCA3KzggdG8gaW5jciBwYXN0IGFsaWdubWVudCBiZHJ5Ci8vICAgICJhbmRsICQweGZmZmZmZmY4LCAlJWVicCAgICAgXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkgKDMyLWJpdCEpCiAgICAgIENMRUFSX0JPVFRPTV8zX0JJVFMgIFBCUCAgICAiXG5cdCIgLy8gbWFzayB0byBhbGlnbm1lbnQgYm91bmRhcnkKICAgICAgInN1YiAgJTEsICIgUEJQICIgICAgICAgICAgICBcblx0IiAvLyBzdWJ0cmFjdCByb3cgcHRyIGFnYWluID0+IGVicCA9CiAgICAgICJqeiBzdWJfZ28gICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIHRhcmdldCB2YWx1ZSBvZiBlYXggYXQgYWxpZ25tZW50CgogICAic3ViX2xwMTogICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGZpeCBhbGlnbm1lbnQKICAgICAgIm1vdmIgKCIgUFNJICIsIiBQQVggIiwpLCAlJWNsIFxuXHQiCiAgICAgICJhZGRiICUlY2wsICglMSwiIFBBWCAiLCkgICAgXG5cdCIKICAgICAgImluY2wgJSVlYXggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiY21wbCAlJWVicCwgJSVlYXggICAgICAgICAgIFxuXHQiCiAgICAgICJqYiBzdWJfbHAxICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICJzdWJfZ286ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgUkVTVE9SRV9GdWxsTGVuZ3RoICIlJWVjeCAgICBcblx0IiAvLyBGdWxsTGVuZ3RoIC0+IGVjeAogICAgICAibW92bCAlJWVjeCwgJSVlZHggICAgICAgICAgIFxuXHQiCiAgICAgICJzdWJsICUlZWF4LCAlJWVkeCAgICAgICAgICAgXG5cdCIgLy8gc3VidHJhY3QgYWxpZ25tZW50IGZpeAogICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlZHggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKICAgICAgInN1YmwgJSVlZHgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBkcm9wIG92ZXIgYnl0ZXMgZnJvbSBsZW5ndGgKLy9vdXQgIm1vdmwgJSVlY3gsIE1NWExlbmd0aCAgICAgICBcblx0IgogICAgICAibW92bCAlJWVicCwgJSVlYXggICAgICAgICAgIFxuXHQiIC8vIGVicCA9IGRpZmYsIGJ1dCBubyByZWcgY29uc3RyYWludCg/KQogICAgICBSRVNUT1JFX2VicCAgICAgICAgICAgICAgICAgICAgICAgIC8vICAoY291bGQgc3dhcCBlYnAgYW5kIGVjeCBmdW5jdGlvbnMsCiAgICAgIFJFU1RPUkVfcjE1ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGJ1dCAlJWNsIGlzc3Vlcy4uLikKCiAgICAgIDogIj1jIiAoTU1YTGVuZ3RoKSwgICAgICAgLy8gMCAgICAgLy8gb3V0cHV0IHJlZ3MKICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgIj1hIiAoZGlmZikgICAgICAgICAgICAgLy8gMgoKICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCiAgICAgICAgIjIiIChGdWxsTGVuZ3RoKSAgICAgICAgLy8gZWF4CgogICAgICA6ICIlZXNpIiwgIiVlZHgiICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgIF9DTE9CQkVSX3IxNQogICAgICAgIF9DTE9CQkVSX2VicAogICApOwoKICAgLy8gbm93IGRvIHRoZSBtYXRoIGZvciB0aGUgcmVzdCBvZiB0aGUgcm93CiAgIHN3aXRjaCAoYnBwKQogICB7CiAgICAgIGNhc2UgMzoKICAgICAgewovLyAgICAgICBfU2hpZnRCcHAgPSAyNDsgICAgICAgLy8gPT0gMyAqIDgKLy8gICAgICAgX1NoaWZ0UmVtICA9IDQwOyAgICAgIC8vID09IDY0IC0gMjQKCiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdiAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgLy8gbG9hZCAoZm9ybWVyKSBfQWN0aXZlTWFzayBmb3IgMm5kIGFjdGl2ZSBieXRlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICIgQU1BU0syXzNfMyAiLCAlJW1tNyAgIFxuXHQiIC8vIF9hbWFzazJfM18zCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCgovLyBub3R1c2VkICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwovLyBwcmVsb2FkICAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAogICAgICAgICAgICAibW92cSAlJW1tNywgJSVtbTYgICAgICAgICAgICBcblx0IgovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicHNsbHEgJDI0LCAlJW1tNiAgICAgICAgICAgICBcblx0IiAvLyBtb3ZlIG1hc2sgaW4gbW02IHRvIGNvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAzcmQgYWN0aXZlIGJ5dGUgZ3JvdXAKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUERYICIsKSwgJSVtbTEgIFxuXHQiCgogICAgICAgICAic3ViXzNscDogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIGZvciBhZGRpbmcgZmlyc3QKICAgICAgICAgICAgInBzcmxxICQ0MCwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gIGJwcCBieXRlcyAobm8gbmVlZCBmb3IgbWFzazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHNoaWZ0IGNsZWFycyBpbmFjdGl2ZSBieXRlcykKICAgICAgICAgICAgLy8gYWRkIDFzdCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgIm1vdnEgKCUxLCIgUERYICIsKSwgJSVtbTAgICAgXG5cdCIKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIGFkZCAybmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCiAgICAgICAgICAgICJwc2xscSAkMjQsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgInBhbmQgJSVtbTcsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbWFzayB0byB1c2UgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gYWRkIDNyZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKICAgICAgICAgICAgInBzbGxxICQyNCwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAicGFuZCAlJW1tNiwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtYXNrIHRvIHVzZSAzcmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVkeCAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAogICAgICAgICAgICAiamIgc3ViXzNscCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwoKICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW02IiwgIiVtbTciICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCAzIGJwcAoKICAgICAgY2FzZSA0OiAgIC8vIGZvcm1lcmx5IHNoYXJlZCB3aXRoIDYgYnBwIGNhc2UgdmlhIF9TaGlmdEJwcCBhbmQgX1NoaWZ0UmVtLAogICAgICB7ICAgICAgICAgLy8gYnV0IDY0LWJpdCBQSUMvLnNvIHByb2JsZW1zIChjb3VsZCBzdGlsbCBzaGFyZSwgbW92aW5nIHZhcnMKICAgICAgICAgICAgICAgIC8vIGludG8gdW51c2VkIE1NWCByZWdzIHZpYSBlY3gvZWR4LCBidXQga2x1ZGd5KQovLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDMyIChwc2xscSkKLy8gICAgICAgX1NoaWZ0UmVtID0gNjQgLSBfU2hpZnRCcHA7ICAvLyAzMiAocHNybHEpCgogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vIHByZWxvYWQgICJtb3YgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLy8gcHJlbG9hZCAgIm1vdmwgYnBwLCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImFkZCAgIiBQQ1ggIiwgJTEgICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglMSwiIFBEWCAiLCksICUlbW0xICBcblx0IgoKICAgICAgICAgInN1Yl80bHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSBmb3IgYWRkaW5nIGZpcnN0CiAgICAgICAgICAgICJwc3JscSAkMzIsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vICBicHAgYnl0ZXMgKG5vIG5lZWQgZm9yIG1hc2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCiAgICAgICAgICAgICJtb3ZxICglMSwiIFBEWCAiLCksICUlbW0wICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQogICAgICAgICAgICAicHNsbHEgJDMyLCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVkeCAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAogICAgICAgICAgICAiamIgc3ViXzRscCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwoKICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA0IGJwcAoKICAgICAgY2FzZSAxOgogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3YgIHJvdywgJTEgICAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCi8vIHByZWxvYWQgICJjbXBsIEZ1bGxMZW5ndGgsICUlZWR4ICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImpuYiBzdWJfMWVuZCAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3YgICUxLCAiIFBTSSAiICAgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwovLyBpcnJlbC4gICAieG9ybCAlJWVjeCwgJSVlY3ggICAgICAgICAgICAgXG5cdCIgLy8gKGFjdHVhbGx5IGJ1ZyB3aXRoIHByZWxvYWQpCi8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKCiAgICAgICAgICJzdWJfMWxwOiAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92YiAoIiBQU0kgIiwiIFBEWCAiLCksICUlY2wgXG5cdCIKICAgICAgICAgICAgImFkZGIgJSVjbCwgKCUxLCIgUERYICIsKSAgICAgIFxuXHQiCiAgICAgICAgICAgICJpbmNsICUlZWR4ICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICAgXG5cdCIgLy8gY29tcGFyZSB3aXRoIEZ1bGxMZW5ndGgKICAgICAgICAgICAgImpiIHN1Yl8xbHAgICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAic3ViXzFlbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKCiAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAiMyIgKEZ1bGxMZW5ndGgpICAgICAgICAvLyBlYXgKCiAgICAgICAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICApOwogICAgICB9CiAgICAgIHJldHVybjsgIC8vIGVuZCAxIGJwcCAoYnlwYXNzaW5nIGNsZWFudXAgYmxvY2shKQoKICAgICAgY2FzZSAyOgogICAgICB7Ci8vICAgICAgIF9TaGlmdEJwcCA9IDE2OyAgICAgICAvLyA9PSAyICogOAovLyAgICAgICBfU2hpZnRSZW0gPSA0ODsgICAgICAgLy8gPT0gNjQgLSAxNgoKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAogICAgICAgICAgICBMT0FEX0dPVF9yYnAKICAgICAgICAgICAgLy8gbG9hZCAoZm9ybWVyKSBfQWN0aXZlTWFzayBmb3IgMm5kIGFjdGl2ZSBieXRlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICIgQU1BU0s0XzJfMiAiLCAlJW1tNyAgIFxuXHQiIC8vIF9hbWFzazRfMl8yCiAgICAgICAgICAgIFJFU1RPUkVfcmJwCi8vIHByZWxvYWQgICJtb3ZsIGRpZmYsICUlZWR4ICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxICUlbW03LCAlJW1tNiAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3YgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTYgICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBtYXNrIGluIG1tNiB0byBjb3ZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgM3JkIGFjdGl2ZSBieXRlIGdyb3VwCi8vIG5vdHVzZWQgICJtb3YgICUxLCAiIFBTSSAiICAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93CiAgICAgICAgICAgICJtb3ZxICUlbW02LCAlJW1tNSAgICAgICAgICAgIFxuXHQiCi8vIHByZWxvYWQgICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJhZGQgICIgUENYICIsICUxICAgICAgICAgICAgIFxuXHQiIC8vIHJwID0gcm93ICsgYnBwCiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW01ICAgICAgICAgICAgIFxuXHQiIC8vIG1vdmUgbWFzayBpbiBtbTUgdG8gY292ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDR0aCBhY3RpdmUgYnl0ZSBncm91cAogICAgICAgICAgICAvLyBwcmltZSB0aGUgcHVtcDogIGxvYWQgdGhlIGZpcnN0IFJhdyh4LWJwcCkgZGF0YSBzZXQKICAgICAgICAgICAgIm1vdnEgLTgoJTEsIiBQRFggIiwpLCAlJW1tMSAgXG5cdCIKCiAgICAgICAgICJzdWJfMmxwOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgZm9yIGFkZGluZyBmaXJzdAogICAgICAgICAgICAicHNybHEgJDQ4LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyAgYnBwIGJ5dGVzIChubyBuZWVkIGZvciBtYXNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgc2hpZnQgY2xlYXJzIGluYWN0aXZlIGJ5dGVzKQogICAgICAgICAgICAvLyBhZGQgMXN0IGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAoJTEsIiBQRFggIiwpLCAlJW1tMCAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gYWRkIDJuZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbW92IHVwZGF0ZWQgUmF3cyB0byBtbTEKICAgICAgICAgICAgInBzbGxxICQxNiwgJSVtbTEgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSB0byBwb3MuIGNvcnJlY3RseQogICAgICAgICAgICAicGFuZCAlJW1tNywgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtYXNrIHRvIHVzZSAybmQgYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBhZGQgM3JkIGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQogICAgICAgICAgICAicHNsbHEgJDE2LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJwYW5kICUlbW02LCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1hc2sgdG8gdXNlIDNyZCBhY3RpdmUgZ3JvdXAKICAgICAgICAgICAgInBhZGRiICUlbW0xLCAlJW1tMCAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIC8vIGFkZCA0dGggYWN0aXZlIGdyb3VwCiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIG1vdiB1cGRhdGVkIFJhd3MgdG8gbW0xCiAgICAgICAgICAgICJwc2xscSAkMTYsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vIHNoaWZ0IGRhdGEgdG8gcG9zLiBjb3JyZWN0bHkKICAgICAgICAgICAgInBhbmQgJSVtbTUsICUlbW0xICAgICAgICAgICAgXG5cdCIgLy8gbWFzayB0byB1c2UgNHRoIGFjdGl2ZSBncm91cAogICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAogICAgICAgICAgICAiamIgc3ViXzJscCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwoKICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIsICIlbW01IiwgIiVtbTYiICAgIC8vIGNsb2JiZXIgbGlzdAogICAgICAgICAgICAsICIlbW03IgojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCAyIGJwcAoKICAgICAgY2FzZSA2OiAgIC8vIGZvcm1lcmx5IHNoYXJlZCB3aXRoIDQgYnBwIGNhc2UgKHNlZSBjb21tZW50cyB0aGVyZSkKICAgICAgewovLyAgICAgICBfU2hpZnRCcHAgPSBicHAgPDwgMzsgICAgICAgIC8vIDQ4IChwc2xscSkKLy8gICAgICAgX1NoaWZ0UmVtID0gNjQgLSBfU2hpZnRCcHA7ICAvLyAxNiAocHNybHEpCgogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vIHByZWxvYWQgICJtb3YgIHJvdywgJTEgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVkaS9yZGkKLy8gcHJlbG9hZCAgIm1vdmwgZGlmZiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKLy8gbm90dXNlZCAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgXG5cdCIgLy8gbHAgPSByb3cKLy8gcHJlbG9hZCAgIm1vdmwgYnBwLCAlJWVjeCAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgImFkZCAgIiBQQ1ggIiwgJTEgICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKCiAgICAgICAgICAgIC8vIHByaW1lIHRoZSBwdW1wOiAgbG9hZCB0aGUgZmlyc3QgUmF3KHgtYnBwKSBkYXRhIHNldAogICAgICAgICAgICAibW92cSAtOCglMSwiIFBEWCAiLCksICUlbW0xICBcblx0IgoKICAgICAgICAgInN1Yl82bHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gc2hpZnQgZGF0YSBmb3IgYWRkaW5nIGZpcnN0CiAgICAgICAgICAgICJwc3JscSAkMTYsICUlbW0xICAgICAgICAgICAgIFxuXHQiIC8vICBicHAgYnl0ZXMgKG5vIG5lZWQgZm9yIG1hc2s7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBzaGlmdCBjbGVhcnMgaW5hY3RpdmUgYnl0ZXMpCiAgICAgICAgICAgICJtb3ZxICglMSwiIFBEWCAiLCksICUlbW0wICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAvLyBhZGQgMm5kIGFjdGl2ZSBncm91cAogICAgICAgICAgICAibW92cSAlJW1tMCwgJSVtbTEgICAgICAgICAgICBcblx0IiAvLyBtb3YgdXBkYXRlZCBSYXdzIHRvIG1tMQogICAgICAgICAgICAicHNsbHEgJDQ4LCAlJW1tMSAgICAgICAgICAgICBcblx0IiAvLyBzaGlmdCBkYXRhIHRvIHBvcy4gY29ycmVjdGx5CiAgICAgICAgICAgICJhZGRsICQ4LCAlJWVkeCAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBNTVhMZW5ndGgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsIC04KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgdXBkYXRlZCBSYXdzIHRvIGFycmF5CiAgICAgICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSAgICAgICAgICAgIFxuXHQiIC8vIHByZXAgMXN0IGFkZCBhdCB0b3Agb2YgbG9vcAogICAgICAgICAgICAiamIgc3ViXzZscCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgICAgICAgOiAiPWMiIChkdW1teV92YWx1ZV9jKSwgICAvLyAwICAgICAgLy8gb3V0cHV0IHJlZ3MgKGR1bW15KQogICAgICAgICAgICAgICI9RCIgKGR1bW15X3ZhbHVlX0QpLCAgIC8vIDEKICAgICAgICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSwgICAvLyAyCiAgICAgICAgICAgICAgIj1hIiAoZHVtbXlfdmFsdWVfYSkgICAgLy8gMwoKICAgICAgICAgICAgOiAiMCIgKGJwcCksICAgICAgICAgICAgICAvLyBlY3ggICAgLy8gaW5wdXQgcmVncwogICAgICAgICAgICAgICIxIiAocm93KSwgICAgICAgICAgICAgIC8vIGVkaQogICAgICAgICAgICAgICIyIiAoZGlmZiksICAgICAgICAgICAgIC8vIGVkeAogICAgICAgICAgICAgICIzIiAoTU1YTGVuZ3RoKSAgICAgICAgIC8vIGVheAoKI2lmIGRlZmluZWQoQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICAgICAgIDogIiVtbTAiLCAiJW1tMSIgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojZW5kaWYKICAgICAgICAgKTsKICAgICAgfQogICAgICBicmVhazsgIC8vIGVuZCA2IGJwcAoKICAgICAgY2FzZSA4OgogICAgICB7CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLy8gcHJlbG9hZCAgIm1vdiAgcm93LCAlMSAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQovLyBwcmVsb2FkICAibW92bCBkaWZmLCAlJWVkeCAgICAgICAgICAgICBcblx0IgovLyBub3R1c2VkICAibW92ICAlMSwgIiBQU0kgIiAgICAgICAgICAgICBcblx0IiAvLyBscCA9IHJvdwovLyBwcmVsb2FkICAibW92bCBicHAsICUlZWN4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICBcblx0IiAvLyBycCA9IHJvdyArIGJwcAovLyBwcmVsb2FkICAibW92bCBNTVhMZW5ndGgsICUlZWF4ICAgICAgICBcblx0IgoKICAgICAgICAgICAgLy8gcHJpbWUgdGhlIHB1bXA6ICBsb2FkIHRoZSBmaXJzdCBSYXcoeC1icHApIGRhdGEgc2V0CiAgICAgICAgICAgICJtb3ZxIC04KCUxLCIgUERYICIsKSwgJSVtbTcgIFxuXHQiCiAgICAgICAgICAgICJtb3ZsICUlZWF4LCAlJWVzaSAgICAgICAgICAgIFxuXHQiIC8vIGNvcHkgb2YgTU1YTGVuZ3RoIC0+IGVzaQogICAgICAgICAgICAiYW5kbCAkMHgwMDAwMDAzZiwgJSVlc2kgICAgICBcblx0IiAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAoKICAgICAgICAgInN1Yl84bHA6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgICAgICAgIm1vdnEgKCUxLCIgUERYICIsKSwgJSVtbTAgICAgXG5cdCIgLy8gbG9hZCBTdWIoeCkgZm9yIDFzdCA4IGJ5dGVzCiAgICAgICAgICAgICJwYWRkYiAlJW1tNywgJSVtbTAgICAgICAgICAgIFxuXHQiCiAgICAgICAgICAgICJtb3ZxIDgoJTEsIiBQRFggIiwpLCAlJW1tMSAgIFxuXHQiIC8vIGxvYWQgU3ViKHgpIGZvciAybmQgOCBieXRlcwogICAgICAgICAgICAibW92cSAlJW1tMCwgKCUxLCIgUERYICIsKSAgICBcblx0IiAvLyB3cml0ZSBSYXcoeCkgZm9yIDFzdCA4IGJ5dGVzCgogICAgICAgICAgICAvLyBOb3cgbW0wIHdpbGwgYmUgdXNlZCBhcyBSYXcoeC1icHApIGZvciB0aGUgMm5kIGdyb3VwIG9mIDggYnl0ZXMuCiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSByZXBlYXRlZCBmb3IgZWFjaCBncm91cCBvZiA4IGJ5dGVzIHdpdGggdGhlIDh0aAogICAgICAgICAgICAvLyBncm91cCBiZWluZyB1c2VkIGFzIHRoZSBSYXcoeC1icHApIGZvciB0aGUgMXN0IGdyb3VwIG9mIHRoZQogICAgICAgICAgICAvLyBuZXh0IGxvb3AuCgogICAgICAgICAgICAicGFkZGIgJSVtbTAsICUlbW0xICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAxNiglMSwiIFBEWCAiLCksICUlbW0yICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgM3JkIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTEsIDgoJTEsIiBQRFggIiwpICAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAybmQgOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTEsICUlbW0yICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAyNCglMSwiIFBEWCAiLCksICUlbW0zICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgNHRoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTIsIDE2KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciAzcmQgOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTIsICUlbW0zICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAzMiglMSwiIFBEWCAiLCksICUlbW00ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgNXRoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTMsIDI0KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA0dGggOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTMsICUlbW00ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSA0MCglMSwiIFBEWCAiLCksICUlbW01ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgNnRoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTQsIDMyKCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA1dGggOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTQsICUlbW01ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSA0OCglMSwiIFBEWCAiLCksICUlbW02ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgN3RoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTUsIDQwKCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA2dGggOCBieXRlcwogICAgICAgICAgICAicGFkZGIgJSVtbTUsICUlbW02ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSA1NiglMSwiIFBEWCAiLCksICUlbW03ICBcblx0IiAvLyBsb2FkIFN1Yih4KSBmb3IgOHRoIDggYnl0ZXMKICAgICAgICAgICAgIm1vdnEgJSVtbTYsIDQ4KCUxLCIgUERYICIsKSAgXG5cdCIgLy8gd3JpdGUgUmF3KHgpIGZvciA3dGggOCBieXRlcwogICAgICAgICAgICAiYWRkbCAkNjQsICUlZWR4ICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTYsICUlbW03ICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVzaSwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBjbXAgdG8gYnl0ZXMgb3ZlciBtdWx0IG9mIDY0CiAgICAgICAgICAgICJtb3ZxICUlbW03LCAtOCglMSwiIFBEWCAiLCkgIFxuXHQiIC8vIHdyaXRlIFJhdyh4KSBmb3IgOHRoIDggYnl0ZXMKICAgICAgICAgICAgImpiIHN1Yl84bHAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgICJjbXBsICUlZWF4LCAlJWVkeCAgICAgICAgICAgIFxuXHQiIC8vIGNvbXBhcmUgdG8gTU1YTGVuZ3RoCiAgICAgICAgICAgICJqbmIgc3ViXzhsdDggICAgICAgICAgICAgICAgIFxuXHQiCgogICAgICAgICAic3ViXzhscEE6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAibW92cSAoJTEsIiBQRFggIiwpLCAlJW1tMCAgICBcblx0IgogICAgICAgICAgICAiYWRkbCAkOCwgJSVlZHggICAgICAgICAgICAgICBcblx0IgogICAgICAgICAgICAicGFkZGIgJSVtbTcsICUlbW0wICAgICAgICAgICBcblx0IgogICAgICAgICAgICAiY21wbCAlJWVheCwgJSVlZHggICAgICAgICAgICBcblx0IiAvLyBjb21wYXJlIHRvIE1NWExlbmd0aAogICAgICAgICAgICAibW92cSAlJW1tMCwgLTgoJTEsIiBQRFggIiwpICBcblx0IiAvLyAtOCB0byBvZmZzZXQgZWFybHkgYWRkbCBlZHgKICAgICAgICAgICAgIm1vdnEgJSVtbTAsICUlbW03ICAgICAgICAgICAgXG5cdCIgLy8gbW92ZSBjYWxjdWxhdGVkIFJhdyh4KSBkYXRhCiAgICAgICAgICAgICJqYiBzdWJfOGxwQSAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICB0byBtbTcgdG8gYmUgbmV3IFJhdyh4LWJwcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGZvciBuZXh0IGxvb3AKICAgICAgICAgInN1Yl84bHQ4OiAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKCiAgICAgICAgICAgIDogIj1jIiAoZHVtbXlfdmFsdWVfYyksICAgLy8gMCAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAgICAgICAiPUQiIChkdW1teV92YWx1ZV9EKSwgICAvLyAxCiAgICAgICAgICAgICAgIj1kIiAoZHVtbXlfdmFsdWVfZCksICAgLy8gMgogICAgICAgICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpICAgIC8vIDMKCiAgICAgICAgICAgIDogIjAiIChicHApLCAgICAgICAgICAgICAgLy8gZWN4ICAgIC8vIGlucHV0IHJlZ3MKICAgICAgICAgICAgICAiMSIgKHJvdyksICAgICAgICAgICAgICAvLyBlZGkKICAgICAgICAgICAgICAiMiIgKGRpZmYpLCAgICAgICAgICAgICAvLyBlZHgKICAgICAgICAgICAgICAiMyIgKE1NWExlbmd0aCkgICAgICAgICAvLyBlYXgKCiAgICAgICAgICAgIDogIiVlc2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdAojaWYgZGVmaW5lZChDTE9CQkVSX01NWF9SRUdTX1NVUFBPUlRFRCkKICAgICAgICAgICAgLCAiJW1tMCIsICIlbW0xIiwgIiVtbTIiLCAiJW1tMyIKICAgICAgICAgICAgLCAiJW1tNCIsICIlbW01IiwgIiVtbTYiLCAiJW1tNyIKI2VuZGlmCiAgICAgICAgICk7CiAgICAgIH0KICAgICAgYnJlYWs7ICAvLyBlbmQgOCBicHAKCiAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8vIGJwcCAhPSAxLDIsMyw0LDYsODogIGRvZXNuJ3QgZXhpc3QKICAgICAgewogICAgICAgICAvLyBFUlJPUjogIFNIT1VMRCBORVZFUiBCRSBSRUFDSEVECiNpZiBkZWZpbmVkKFBOR19ERUJVRykKICAgICAgICAgcG5nX2RlYnVnKDEsICJJbnRlcm5hbCBsaWJwbmcgbG9naWMgZXJyb3IgKEdDQyAiCiAgICAgICAgICAgInBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpKVxuIik7CiNlbmRpZgogICAgICB9CiAgICAgIGJyZWFrOwoKICAgfSAvLyBlbmQgc3dpdGNoIChicHApCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi8vcHJlICJtb3ZsIE1NWExlbmd0aCwgJSVlYXggICAgICAgICBcblx0IgovL3ByZSAibW92ICByb3csICUxICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZWRpL3JkaQovL3ByZSAiY21wbCBGdWxsTGVuZ3RoLCAlJWVheCAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICAgIFxuXHQiCiAgICAgICJqbmIgc3ViX2VuZCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgIm1vdiAgJTEsICIgUFNJICIgICAgICAgICAgICAgIFxuXHQiIC8vIGxwID0gcm93Ci8vcHJlICJtb3ZsIGJwcCwgJSVlY3ggICAgICAgICAgICAgICBcblx0IgogICAgICAiYWRkICAiIFBDWCAiLCAlMSAgICAgICAgICAgICAgXG5cdCIgLy8gcnAgPSByb3cgKyBicHAKICAgICAgInhvcmwgJSVlY3gsICUlZWN4ICAgICAgICAgICAgIFxuXHQiCgogICAic3ViX2xwMjogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmIgKCIgUFNJICIsIiBQQVggIiwpLCAlJWNsIFxuXHQiCiAgICAgICJhZGRiICUlY2wsICglMSwiIFBBWCAiLCkgICAgICBcblx0IgogICAgICAiaW5jbCAlJWVheCAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlZHgsICUlZWF4ICAgICAgICAgICAgIFxuXHQiIC8vIEZ1bGxMZW5ndGgKICAgICAgImpiIHN1Yl9scDIgICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAic3ViX2VuZDogICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgIkVNTVMgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vIGVuZCBNTVggaW5zdHJ1Y3Rpb25zCgogICAgICA6ICI9YyIgKGR1bW15X3ZhbHVlX2MpLCAgIC8vIDAgICAgICAvLyBvdXRwdXQgcmVncyAoZHVtbXkpCiAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCksICAgLy8gMQogICAgICAgICI9YSIgKGR1bW15X3ZhbHVlX2EpLCAgIC8vIDIKICAgICAgICAiPWQiIChkdW1teV92YWx1ZV9kKSAgICAvLyAzCgogICAgICA6ICIwIiAoYnBwKSwgICAgICAgICAgICAgIC8vIGVjeCAgICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChyb3cpLCAgICAgICAgICAgICAgLy8gZWRpCiAgICAgICAgIjIiIChNTVhMZW5ndGgpLCAgICAgICAgLy8gZWF4CiAgICAgICAgIjMiIChGdWxsTGVuZ3RoKSAgICAgICAgLy8gZWR4CgogICAgICA6ICIlZXNpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIGxpc3QKICAgKTsKCn0gLy8gZW5kIG9mIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1YigpCiNlbmRpZiAvKiBQTkdfTU1YX1JFQURfRklMVEVSX1NVQl9TVVBQT1JURUQgKi8KCgoKCiNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX1VQX1NVUFBPUlRFRAovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBVIFAgICAgICAgICAgICAvLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KCi8vIE9wdGltaXplZCBjb2RlIGZvciBQTkcgVXAgZmlsdGVyIGRlY29kZXIKCnN0YXRpYyB2b2lkIC8qIFBSSVZBVEUgKi8KcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfdXAocG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwIHJvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2J5dGVwIHByZXZfcm93KQp7CiAgIHBuZ191aW50XzMyIGxlbjsKICAgaW50IGR1bW15X3ZhbHVlX2Q7ICAgLy8gZml4ICdmb3JiaWRkZW4gcmVnaXN0ZXIgMyAoZHgpIHdhcyBzcGlsbGVkJyBlcnJvcgogICBwbmdfYnl0ZXAgZHVtbXlfdmFsdWVfUzsKICAgcG5nX2J5dGVwIGR1bW15X3ZhbHVlX0Q7CgogICBsZW4gPSByb3dfaW5mby0+cm93Ynl0ZXM7ICAgICAgICAgICAgICAvLyBudW1iZXIgb2YgYnl0ZXMgdG8gZmlsdGVyCgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgIFNBVkVfR09UX2VieAovL3ByZSAibW92ICBwcmV2X3JvdywgJTEgICAgICAgICAgIFxuXHQiIC8vIGVzaS9yc2kKLy9wcmUgIm1vdmwgcm93LCAlMiAgICAgICAgICAgICAgICBcblx0IiAvLyBlZGkvcmRpCgogICAgICAieG9ybCAlJWVieCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKCiAgICAgIC8vIGdldCAjIG9mIGJ5dGVzIHRvIGFsaWdubWVudCAobm90ZTogIGNvbXB1dGluZyBfZGVsdGFfIG9mIHR3byBwb2ludGVycywKICAgICAgLy8gc28gaGVyZWFmdGVyICUlZWN4IGlzIHN1ZmZpY2llbnQgZXZlbiBvbiA2NC1iaXQpCiAgICAgICJtb3YgICUyLCAiIFBDWCAiICAgICAgICAgICAgXG5cdCIgLy8gdGFrZSBzdGFydCBvZiByb3cKICAgICAgImFkZCAgJDB4NywgIiBQQ1ggIiAgICAgICAgICBcblx0IiAvLyBhZGQgNyB0byBpbmNyIHBhc3QgYWxpZ25tZW50IGJkcnkKLy8gICAgImFuZGwgJDB4ZmZmZmZmZjgsICUlZWN4ICAgICBcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeSAoMzItYml0ISkKICAgICAgQ0xFQVJfQk9UVE9NXzNfQklUUyAgUENYICAgICJcblx0IiAvLyBtYXNrIHRvIGFsaWdubWVudCBib3VuZGFyeQogICAgICAic3ViICAlMiwgIiBQQ1ggIiAgICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IHJvdyBwdHIgYWdhaW4gPT4gZWJwID0KICAgICAgImp6IHVwX2dvICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgdGFyZ2V0IHZhbHVlIG9mIGVjeCBhdCBhbGlnbm1lbnQKCiAgICJ1cF9scDE6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gZml4IGFsaWdubWVudAogICAgICAibW92YiAoJTIsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiCiAgICAgICJhZGRiICglMSwiIFBCWCAiLCksICUlYWwgICAgXG5cdCIKICAgICAgImluY2wgJSVlYnggICAgICAgICAgICAgICAgICBcblx0IgogICAgICAiY21wbCAlJWVjeCwgJSVlYnggICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZiICUlYWwsIC0xKCUyLCIgUEJYICIsKSAgXG5cdCIgLy8gbW92IGRvZXMgbm90IGFmZmVjdCBmbGFnczsgLTEgdG8KICAgICAgImpiIHVwX2xwMSAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgb2Zmc2V0IGluY2wgZWJ4CgogICAidXBfZ286ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCi8vcHJlICJtb3ZsIGxlbiwgJSVlZHggICAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdmwgJSVlZHgsICUlZWN4ICAgICAgICAgICBcblx0IgogICAgICAic3VibCAlJWVieCwgJSVlZHggICAgICAgICAgIFxuXHQiIC8vIHN1YnRyYWN0IGFsaWdubWVudCBmaXgKICAgICAgImFuZGwgJDB4MDAwMDAwM2YsICUlZWR4ICAgICBcblx0IiAvLyBjYWxjIGJ5dGVzIG92ZXIgbXVsdCBvZiA2NAogICAgICAic3VibCAlJWVkeCwgJSVlY3ggICAgICAgICAgIFxuXHQiIC8vIHN1YiBvdmVyLWJ5dGVzIGZyb20gb3JpZ2luYWwgbGVuZ3RoCgogICAgICAvLyB1bnJvbGxlZCBsb29wIC0gdXNlIGFsbCBNTVggcmVnaXN0ZXJzIGFuZCBpbnRlcmxlYXZlIHRvIHJlZHVjZQogICAgICAvLyBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyAobG9vcHMpIGFuZCByZWR1Y2UgcGFydGlhbCBzdGFsbHMKICAgInVwX2xvb3A6ICAgICAgICAgICAgICAgICAgICAgICBcblx0IgogICAgICAibW92cSAoJTEsIiBQQlggIiwpLCAlJW1tMSAgIFxuXHQiCiAgICAgICJtb3ZxICglMiwiIFBCWCAiLCksICUlbW0wICAgXG5cdCIKICAgICAgIm1vdnEgOCglMSwiIFBCWCAiLCksICUlbW0zICBcblx0IgogICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDgoJTIsIiBQQlggIiwpLCAlJW1tMiAgXG5cdCIKICAgICAgIm1vdnEgJSVtbTAsICglMiwiIFBCWCAiLCkgICBcblx0IgogICAgICAicGFkZGIgJSVtbTMsICUlbW0yICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDE2KCUxLCIgUEJYICIsKSwgJSVtbTUgXG5cdCIKICAgICAgIm1vdnEgJSVtbTIsIDgoJTIsIiBQQlggIiwpICBcblx0IgogICAgICAibW92cSAxNiglMiwiIFBCWCAiLCksICUlbW00IFxuXHQiCiAgICAgICJtb3ZxIDI0KCUxLCIgUEJYICIsKSwgJSVtbTcgXG5cdCIKICAgICAgInBhZGRiICUlbW01LCAlJW1tNCAgICAgICAgICBcblx0IgogICAgICAibW92cSAyNCglMiwiIFBCWCAiLCksICUlbW02IFxuXHQiCiAgICAgICJtb3ZxICUlbW00LCAxNiglMiwiIFBCWCAiLCkgXG5cdCIKICAgICAgInBhZGRiICUlbW03LCAlJW1tNiAgICAgICAgICBcblx0IgogICAgICAibW92cSAzMiglMSwiIFBCWCAiLCksICUlbW0xIFxuXHQiCiAgICAgICJtb3ZxICUlbW02LCAyNCglMiwiIFBCWCAiLCkgXG5cdCIKICAgICAgIm1vdnEgMzIoJTIsIiBQQlggIiwpLCAlJW1tMCBcblx0IgogICAgICAibW92cSA0MCglMSwiIFBCWCAiLCksICUlbW0zIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tMSwgJSVtbTAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdnEgNDAoJTIsIiBQQlggIiwpLCAlJW1tMiBcblx0IgogICAgICAibW92cSAlJW1tMCwgMzIoJTIsIiBQQlggIiwpIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tMywgJSVtbTIgICAgICAgICAgXG5cdCIKICAgICAgIm1vdnEgNDgoJTEsIiBQQlggIiwpLCAlJW1tNSBcblx0IgogICAgICAibW92cSAlJW1tMiwgNDAoJTIsIiBQQlggIiwpIFxuXHQiCiAgICAgICJtb3ZxIDQ4KCUyLCIgUEJYICIsKSwgJSVtbTQgXG5cdCIKICAgICAgIm1vdnEgNTYoJTEsIiBQQlggIiwpLCAlJW1tNyBcblx0IgogICAgICAicGFkZGIgJSVtbTUsICUlbW00ICAgICAgICAgIFxuXHQiCiAgICAgICJtb3ZxIDU2KCUyLCIgUEJYICIsKSwgJSVtbTYgXG5cdCIKICAgICAgIm1vdnEgJSVtbTQsIDQ4KCUyLCIgUEJYICIsKSBcblx0IgogICAgICAiYWRkbCAkNjQsICUlZWJ4ICAgICAgICAgICAgIFxuXHQiCiAgICAgICJwYWRkYiAlJW1tNywgJSVtbTYgICAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAibW92cSAlJW1tNiwgLTgoJTIsIiBQQlggIiwpIFxuXHQiIC8vICgrNTYpbW92cSBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7CiAgICAgICJqYiB1cF9sb29wICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIC04IHRvIG9mZnNldCBhZGRsIGVieAoKICAgICAgImNtcGwgJDAsICUlZWR4ICAgICAgICAgICAgICBcblx0IiAvLyB0ZXN0IGZvciBieXRlcyBvdmVyIG11bHQgb2YgNjQKICAgICAgImp6IHVwX2VuZCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgICAgImNtcGwgJDgsICUlZWR4ICAgICAgICAgICAgICBcblx0IiAvLyB0ZXN0IGZvciBsZXNzIHRoYW4gOCBieXRlcwogICAgICAiamIgdXBfbHQ4ICAgICAgICAgICAgICAgICAgIFxuXHQiIC8vICBbYWRkZWQgYnkgbGNyZWV2ZSBhdCBuZXRpbnMubmV0XQoKICAgICAgImFkZGwgJSVlZHgsICUlZWN4ICAgICAgICAgICBcblx0IgogICAgICAiYW5kbCAkMHgwMDAwMDAwNywgJSVlZHggICAgIFxuXHQiIC8vIGNhbGMgYnl0ZXMgb3ZlciBtdWx0IG9mIDgKICAgICAgInN1YmwgJSVlZHgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBkcm9wIG92ZXItYnl0ZXMgZnJvbSBsZW5ndGgKICAgICAgImp6IHVwX2x0OCAgICAgICAgICAgICAgICAgICBcblx0IgoKICAgInVwX2xwQTogICAgICAgICAgICAgICAgICAgICAgICBcblx0IiAvLyB1c2UgTU1YIHJlZ3MgdG8gdXBkYXRlIDggYnl0ZXMgc2ltLgogICAgICAibW92cSAoJTEsIiBQQlggIiwpLCAlJW1tMSAgIFxuXHQiCiAgICAgICJtb3ZxICglMiwiIFBCWCAiLCksICUlbW0wICAgXG5cdCIKICAgICAgImFkZGwgJDgsICUlZWJ4ICAgICAgICAgICAgICBcblx0IgogICAgICAicGFkZGIgJSVtbTEsICUlbW0wICAgICAgICAgIFxuXHQiCiAgICAgICJjbXBsICUlZWN4LCAlJWVieCAgICAgICAgICAgXG5cdCIKICAgICAgIm1vdnEgJSVtbTAsIC04KCUyLCIgUEJYICIsKSBcblx0IiAvLyBtb3ZxIGRvZXMgbm90IGFmZmVjdCBmbGFnczsgLTggdG8KICAgICAgImpiIHVwX2xwQSAgICAgICAgICAgICAgICAgICBcblx0IiAvLyAgb2Zmc2V0IGFkZCBlYngKICAgICAgImNtcGwgJDAsICUlZWR4ICAgICAgICAgICAgICBcblx0IiAvLyB0ZXN0IGZvciBieXRlcyBvdmVyIG11bHQgb2YgOAogICAgICAianogdXBfZW5kICAgICAgICAgICAgICAgICAgIFxuXHQiCgogICAidXBfbHQ4OiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJ4b3JsICUlZWF4LCAlJWVheCAgICAgICAgICAgXG5cdCIKICAgICAgImFkZGwgJSVlZHgsICUlZWN4ICAgICAgICAgICBcblx0IiAvLyBtb3ZlIG92ZXIgYnl0ZSBjb3VudCBpbnRvIGNvdW50ZXIKCiAgICJ1cF9scDI6ICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gdXNlIHg4NiByZWdzIGZvciByZW1haW5pbmcgYnl0ZXMKICAgICAgIm1vdmIgKCUyLCIgUEJYICIsKSwgJSVhbCAgICBcblx0IgogICAgICAiYWRkYiAoJTEsIiBQQlggIiwpLCAlJWFsICAgIFxuXHQiCiAgICAgICJpbmNsICUlZWJ4ICAgICAgICAgICAgICAgICAgXG5cdCIKICAgICAgImNtcGwgJSVlY3gsICUlZWJ4ICAgICAgICAgICBcblx0IgogICAgICAibW92YiAlJWFsLCAtMSglMiwiIFBCWCAiLCkgIFxuXHQiIC8vIG1vdiBkb2VzIG5vdCBhZmZlY3QgZmxhZ3M7IC0xIHRvCiAgICAgICJqYiB1cF9scDIgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gIG9mZnNldCBpbmMgZWJ4CgogICAidXBfZW5kOiAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCiAgICAgICJFTU1TICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIgLy8gY29udmVyc2lvbiBvZiBmaWx0ZXJlZCByb3cgY29tcGxldGUKICAgICAgUkVTVE9SRV9HT1RfZWJ4CgogICAgICA6ICI9ZCIgKGR1bW15X3ZhbHVlX2QpLCAgIC8vIDAgICAgIC8vIG91dHB1dCByZWdzIChkdW1teSkKICAgICAgICAiPVMiIChkdW1teV92YWx1ZV9TKSwgICAvLyAxCiAgICAgICAgIj1EIiAoZHVtbXlfdmFsdWVfRCkgICAgLy8gMgoKICAgICAgOiAiMCIgKGxlbiksICAgICAgICAgICAgICAvLyBlZHggICAvLyBpbnB1dCByZWdzCiAgICAgICAgIjEiIChwcmV2X3JvdyksICAgICAgICAgLy8gZXNpCiAgICAgICAgIjIiIChyb3cpICAgICAgICAgICAgICAgLy8gZWRpCgogICAgICA6ICIlZWF4IiwgIiVlY3giICAgICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgbGlzdCAobm8gaW5wdXQgcmVncyEpCiAgICAgICAgX0NMT0JCRVJfR09UX2VieAojaWYgZGVmaW5lZChQTkdfQ0xPQkJFUl9NTVhfUkVHU19TVVBQT1JURUQpCiAgICAgICwgIiVtbTAiLCAiJW1tMSIsICIlbW0yIiwgIiVtbTMiCiAgICAgICwgIiVtbTQiLCAiJW1tNSIsICIlbW02IiwgIiVtbTciCiNlbmRpZgogICApOwoKfSAvLyBlbmQgb2YgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfdXAoKQojZW5kaWYgLyogUE5HX01NWF9SRUFEX0ZJTFRFUl9VUF9TVVBQT1JURUQgKi8KCgoKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKCi8qIE9wdGltaXplZCBwbmdfcmVhZF9maWx0ZXJfcm93IHJvdXRpbmVzICovCgp2b2lkIC8qIFBSSVZBVEUgKi8KcG5nX3JlYWRfZmlsdGVyX3Jvdyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAKICAgcm93LCBwbmdfYnl0ZXAgcHJldl9yb3csIGludCBmaWx0ZXIpCnsKI2lmIGRlZmluZWQoUE5HX0RFQlVHKQogICBjaGFyIGZpbHRuYW1lWzEwXTsKI2VuZGlmCgogICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgewojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7CiNlbmRpZgogICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgIH0KCiNpZiBkZWZpbmVkKFBOR19ERUJVRykKICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfcmVhZF9maWx0ZXJfcm93IChwbmdnY2NyZC5jKVxuIik7CiAgIHN3aXRjaCAoZmlsdGVyKQogICB7CiAgICAgIGNhc2UgMDoKICAgICAgICAgcG5nX3NucHJpbnRmKGZpbHRuYW1lLCAxMCwgIm5vbmUiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIDE6CiAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJzdWItJXMiLAojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9TVUJfU1VQUE9SVEVECiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQikgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCiNlbmRpZgojZW5kaWYKICAgICAgICAgICA/ICJNTVgiIDogIkMiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIDI6CiAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJ1cC0lcyIsCiNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX1VQX1NVUFBPUlRFRAojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICAgICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCkgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCiNlbmRpZgojZW5kaWYKICAgICAgICAgICA/ICJNTVgiIDogIkMiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIDM6CiAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJhdmctJXMiLAojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9BVkdfU1VQUE9SVEVECiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgICAgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX0FWRykgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICAgIF9tbXhfc3VwcG9ydGVkCiNlbmRpZgojZW5kaWYKICAgICAgICAgICA/ICJNTVgiIDogIkMiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIDQ6CiAgICAgICAgIHBuZ19zbnByaW50ZihmaWx0bmFtZSwgMTAsICJwYWV0aC0lcyIsCiNpZmRlZiBQTkdfTU1YX1JFQURfRklMVEVSX1BBRVRIX1NVUFBPUlRFRAojaWYgZGVmaW5lZChQTkdfeDg2XzY0X1VTRV9HT1RQQ1JFTCkgfHwgZGVmaW5lZChQTkdfVEhSRUFEX1VOU0FGRV9PSykKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgICAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfUEFFVEgpICYmCiAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKI2Vsc2UKICAgICAgICAgICBfbW14X3N1cHBvcnRlZAojZW5kaWYKICAgICAgICAgICA/ICJNTVgiIDoKI2VuZGlmIC8qIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIHx8IFBOR19USFJFQURfVU5TQUZFX09LICovCiNlbmRpZgogICAgICAgICAgICAgIkMiKTsKICAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgICBwbmdfc25wcmludGYoZmlsdG5hbWUsIDEwLCAidW5rbm93biIpOwogICAgICAgICBicmVhazsKICAgfQogICBwbmdfZGVidWcyKDIsICJyb3dfbnVtYmVyPSVsZCwgJXMsICIsIHBuZ19wdHItPnJvd19udW1iZXIsIGZpbHRuYW1lKTsKICAgLy9wbmdfZGVidWcxKDAsICJwbmdfcHRyPSUxMHAsICIsIHBuZ19wdHIpOwogICAvL3BuZ19kZWJ1ZzEoMCwgImFzbV9mbGFncz0weCUwOGx4LCAiLCBwbmdfcHRyLT5hc21fZmxhZ3MpOwogICBwbmdfZGVidWcxKDAsICJyb3c9JTEwcCwgIiwgcm93KTsKICAgcG5nX2RlYnVnMigwLCAicGl4ZGVwdGg9JWQsIGJ5dGVzPSVkLCAiLCAoaW50KXJvd19pbmZvLT5waXhlbF9kZXB0aCwKICAgICAgKGludCkoKHJvd19pbmZvLT5waXhlbF9kZXB0aCArIDcpID4+IDMpKTsKICAgcG5nX2RlYnVnMSgwLCAicm93Ynl0ZXM9JWxkXG4iLCByb3dfaW5mby0+cm93Ynl0ZXMpOwojZW5kaWYgLyogUE5HX0RFQlVHICovCgogICBzd2l0Y2ggKGZpbHRlcikKICAgewogICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfTk9ORToKICAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfU1VCOgojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9TVUJfU1VQUE9SVEVECiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIpICYmCiAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCiAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQojZWxzZQogICAgICAgICBpZiAoX21teF9zdXBwb3J0ZWQpCiNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1Yihyb3dfaW5mbywgcm93KTsKICAgICAgICAgfQojZW5kaWYKICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGlzdG9wID0gcm93X2luZm8tPnJvd2J5dGVzOwogICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93ICsgYnBwOwogICAgICAgICAgICBwbmdfYnl0ZXAgbHAgPSByb3c7CgogICAgICAgICAgICBmb3IgKGkgPSBicHA7IGkgPCBpc3RvcDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyAoaW50KSgqbHArKykpICYgMHhmZik7CiAgICAgICAgICAgICAgIHJwKys7CiAgICAgICAgICAgIH0KICAgICAgICAgfSAgLyogZW5kICFVc2VNTVhfc3ViICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1VQOgojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9VUF9TVVBQT1JURUQKI2lmICFkZWZpbmVkKFBOR18xXzBfWCkKICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKI2Vsc2UKICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgewogICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cChyb3dfaW5mbywgcm93LCBwcmV2X3Jvdyk7CiAgICAgICAgIH0KICAgICAgICAgIGVsc2UKI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXM7CiAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIHBwID0gcHJldl9yb3c7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7ICsraSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgKGludCkoKnBwKyspKSAmIDB4ZmYpOwogICAgICAgICAgICAgICBycCsrOwogICAgICAgICAgICB9CiAgICAgICAgIH0gIC8qIGVuZCAhVXNlTU1YX3VwICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX0FWRzoKI2lmZGVmIFBOR19NTVhfUkVBRF9GSUxURVJfQVZHX1NVUFBPUlRFRAojaWYgIWRlZmluZWQoUE5HXzFfMF9YKQogICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgogICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKI2Vsc2UKICAgICAgICAgaWYgKF9tbXhfc3VwcG9ydGVkKQojZW5kaWYKICAgICAgICAgewogICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaTsKICAgICAgICAgICAgcG5nX2J5dGVwIHJwID0gcm93OwogICAgICAgICAgICBwbmdfYnl0ZXAgcHAgPSBwcmV2X3JvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIGxwID0gcm93OwogICAgICAgICAgICBwbmdfdWludF8zMiBicHAgPSAocm93X2luZm8tPnBpeGVsX2RlcHRoICsgNykgPj4gMzsKICAgICAgICAgICAgcG5nX3VpbnRfMzIgaXN0b3AgPSByb3dfaW5mby0+cm93Ynl0ZXMgLSBicHA7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnBwOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgKnJwID0gKHBuZ19ieXRlKSgoKGludCkoKnJwKSArCiAgICAgICAgICAgICAgICAgICgoaW50KSgqcHArKykgPj4gMSkpICYgMHhmZik7CiAgICAgICAgICAgICAgIHJwKys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpc3RvcDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKwogICAgICAgICAgICAgICAgICAoKGludCkoKnBwKysgKyAqbHArKykgPj4gMSkpICYgMHhmZik7CiAgICAgICAgICAgICAgIHJwKys7CiAgICAgICAgICAgIH0KICAgICAgICAgfSAgLyogZW5kICFVc2VNTVhfYXZnICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1BBRVRIOgojaWZkZWYgUE5HX01NWF9SRUFEX0ZJTFRFUl9QQUVUSF9TVVBQT1JURUQKI2lmIGRlZmluZWQoUE5HX3g4Nl82NF9VU0VfR09UUENSRUwpIHx8IGRlZmluZWQoUE5HX1RIUkVBRF9VTlNBRkVfT0spCiNpZiAhZGVmaW5lZChQTkdfMV8wX1gpCiAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCkgJiYKICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCiNlbHNlCiAgICAgICAgIGlmIChfbW14X3N1cHBvcnRlZCkKI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKI2VuZGlmIC8qIFBOR194ODZfNjRfVVNFX0dPVFBDUkVMIHx8IFBOR19USFJFQURfVU5TQUZFX09LICovCiNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGk7CiAgICAgICAgICAgIHBuZ19ieXRlcCBycCA9IHJvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIHBwID0gcHJldl9yb3c7CiAgICAgICAgICAgIHBuZ19ieXRlcCBscCA9IHJvdzsKICAgICAgICAgICAgcG5nX2J5dGVwIGNwID0gcHJldl9yb3c7CiAgICAgICAgICAgIHBuZ191aW50XzMyIGJwcCA9IChyb3dfaW5mby0+cGl4ZWxfZGVwdGggKyA3KSA+PiAzOwogICAgICAgICAgICBwbmdfdWludF8zMiBpc3RvcCA9IHJvd19pbmZvLT5yb3dieXRlcyAtIGJwcDsKCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBicHA7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAqcnAgPSAocG5nX2J5dGUpKCgoaW50KSgqcnApICsgKGludCkoKnBwKyspKSAmIDB4ZmYpOwogICAgICAgICAgICAgICBycCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXN0b3A7IGkrKykgICAvKiB1c2UgbGVmdG92ZXIgcnAscHAgKi8KICAgICAgICAgICAgewogICAgICAgICAgICAgICBpbnQgYSwgYiwgYywgcGEsIHBiLCBwYywgcDsKCiAgICAgICAgICAgICAgIGEgPSAqbHArKzsKICAgICAgICAgICAgICAgYiA9ICpwcCsrOwogICAgICAgICAgICAgICBjID0gKmNwKys7CgogICAgICAgICAgICAgICBwID0gYiAtIGM7CiAgICAgICAgICAgICAgIHBjID0gYSAtIGM7CgojaWYgZGVmaW5lZChQTkdfVVNFX0FCUykKICAgICAgICAgICAgICAgcGEgPSBhYnMocCk7CiAgICAgICAgICAgICAgIHBiID0gYWJzKHBjKTsKICAgICAgICAgICAgICAgcGMgPSBhYnMocCArIHBjKTsKI2Vsc2UKICAgICAgICAgICAgICAgcGEgPSBwIDwgMCA/IC1wIDogcDsKICAgICAgICAgICAgICAgcGIgPSBwYyA8IDAgPyAtcGMgOiBwYzsKICAgICAgICAgICAgICAgcGMgPSAocCArIHBjKSA8IDAgPyAtKHAgKyBwYykgOiBwICsgcGM7CiNlbmRpZgoKICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgaWYgKHBhIDw9IHBiICYmIHBhIDw9IHBjKQogICAgICAgICAgICAgICAgICAgICBwID0gYTsKICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGIgPD0gcGMpCiAgICAgICAgICAgICAgICAgICAgIHAgPSBiOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHAgPSBjOwogICAgICAgICAgICAgICAgKi8KCiAgICAgICAgICAgICAgIHAgPSAocGEgPD0gcGIgJiYgcGEgPD0gcGMpID8gYSA6IChwYiA8PSBwYykgPyBiIDogYzsKCiAgICAgICAgICAgICAgICpycCA9IChwbmdfYnl0ZSkoKChpbnQpKCpycCkgKyBwKSAmIDB4ZmYpOwogICAgICAgICAgICAgICBycCsrOwogICAgICAgICAgICB9CiAgICAgICAgIH0gIC8qIGVuZCAhVXNlTU1YX3BhZXRoICovCiAgICAgICAgIGJyZWFrOwoKICAgICAgZGVmYXVsdDoKICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIklnbm9yaW5nIGJhZCByb3ctZmlsdGVyIHR5cGUiKTsKICAgICAgICAgKnJvdz0wOwogICAgICAgICBicmVhazsKICAgfQp9CgojZW5kaWYgLyogUE5HX0hBVkVfTU1YX1JFQURfRklMVEVSX1JPVyAqLwoKCiNlbmRpZiAvKiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEICYmIFBOR19VU0VfUE5HR0NDUkQgKi8KI2VuZGlmIC8qIF9fR05VQ19fICovCg==