{"id":6471,"date":"2026-07-11T11:39:40","date_gmt":"2026-07-11T11:39:40","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-12-test-2-speaking\/"},"modified":"2026-07-12T03:16:14","modified_gmt":"2026-07-12T03:16:14","slug":"celpip-set-12-test-2-speaking","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-12-test-2-speaking\/","title":{"rendered":"CELPIP Speaking \u2014 Set 12 \u00b7 Practice Test 2"},"content":{"rendered":"<div id=\"clp-spk-root\" style=\"min-height:300px\">\n<p style=\"text-align:center;padding:40px 0;color:#888\">Loading CELPIP Speaking\u2026<\/p>\n<\/div>\n<p><script>eval(atob(\"d2luZG93LkNMUFNQS19EQVRBPXsic2V0IjoxMiwidGVzdCI6MiwidGl0bGUiOiJDRUxQSVAgU3BlYWtpbmcgXHUyMDE0IFNldCAxMiBcdTAwYjcgUHJhY3RpY2UgVGVzdCAyIiwiaGVhZGVyIjoiUHJhY3RpY2UgVGVzdCAyIiwiaW1ncyI6eyJzY2VuZSI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9zMTJ0Mi1zY2VuZS5qcGciLCJvcHRBIjoiaHR0cHM6Ly9hbGxlbmdsaXNoNHUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA3L3MxMnQyLW9wdC1hLmpwZyIsIm9wdEIiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczEydDItb3B0LWIuanBnIiwib3B0T3RoZXIiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczEydDItb3B0LW90aGVyLmpwZyIsInVudXN1YWwiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczEydDItdW51c3VhbC5qcGcifSwib3RoZXJVcmwiOiIvY2VscGlwLXNldC0xMi10ZXN0LTEtc3BlYWtpbmcvIiwidGFza3MiOlt7ImsiOiJ3IiwibnVtIjowLCJ0eXBlRW4iOiJTcGVha2luZyBQcmFjdGljZSBUYXNrIiwicHJlcCI6MzAsInJlYyI6NjAsIndhcm11cCI6dHJ1ZSwicHJvbXB0IjoiVGFsayBhYm91dCBvbmUgb2YgeW91ciBiZXN0IGZyaWVuZHMuIiwiaW1nIjpudWxsLCJ0aXBzIjp7ImJ1bGxldHMiOlsiVGhlIFByYWN0aWNlIFRhc2sgKHdhcm0tdXApIGlzIE5PVCBzY29yZWQgXHUyMDE0IGl0IGlzIGhlcmUgdG8gaGVscCB5b3UgZ2V0IHVzZWQgdG8gdGhlIGNvbnRyb2xzIGFuZCB3YXJtIHVwIHlvdXIgdm9pY2UuIiwiU3BlYWsgbmF0dXJhbGx5IGFib3V0IGEgYmVzdCBmcmllbmQ6IHRoZWlyIG5hbWUsIGhvdyB5b3UgbWV0LCB0aGVpciBwZXJzb25hbGl0eSwgYSBtZW1vcnkgeW91IHNoYXJlLiIsIlVzZSBpdCB0byBhZGp1c3QgeW91ciBwb3N0dXJlLCBtaWNyb3Bob25lIGRpc3RhbmNlLCBhbmQgc3BlYWtpbmcgcGFjZS4iXSwicGhyYXNlcyI6WyJNeSBiZXN0IGZyaWVuZCdzIG5hbWUgaXNcdTIwMjYiLCJXZSBtZXQgd2hlblx1MjAyNiIsIldoYXQgSSBsaWtlIG1vc3QgYWJvdXQgaGltL2hlciBpc1x1MjAyNiJdfSwiczYiOm51bGwsInM5IjpudWxsfSx7ImsiOiJ0MSIsIm51bSI6MSwidHlwZUVuIjoiR2l2aW5nIEFkdmljZSIsInByZXAiOjMwLCJyZWMiOjkwLCJwcm9tcHQiOiJZb3VyIGZyaWVuZCB3YW50cyB0byB2b2x1bnRlZXIgYXQgYW4gYW5pbWFsIHNoZWx0ZXIgdGhhdCBsb29rcyBhZnRlciBjYXRzIGFuZCBkb2dzLiBHaXZlIGhlciBhZHZpY2Ugb24gd2hhdCBzaGUgc2hvdWxkIGNvbnNpZGVyIGJlZm9yZSB3b3JraW5nIGFzIGEgdm9sdW50ZWVyLiIsImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIk9wZW5pbmc6IGdyZWV0IHlvdXIgZnJpZW5kIGFuZCByZXN0YXRlIHRoZSBzaXR1YXRpb24gaW4gb25lIHNlbnRlbmNlLiIsIkJvZHk6IGdpdmUgMlx1MjAxMzMgcGllY2VzIG9mIGFkdmljZSwgZWFjaCB3aXRoIGEgcmVhc29uIG9yIGV4YW1wbGUgKEZpcnN0XHUyMDI2LCBiZWNhdXNlXHUyMDI2OyBBbm90aGVyIGlkZWEgaXNcdTIwMjYpLiIsIkNsb3Npbmc6IGVuY291cmFnZSB0aGVtIGFuZCB3aXNoIHRoZW0gbHVjay4iLCJBZHZpc2UgeW91ciBmcmllbmQgb24gd2hhdCB0byB0aGluayBhYm91dCBiZWZvcmUgdm9sdW50ZWVyaW5nIGF0IGEgY2F0LWFuZC1kb2cgc2hlbHRlcjogdGhlIHRpbWUgY29tbWl0bWVudCAoc2hlbHRlcnMgbmVlZCBwZW9wbGUgd2hvIHR1cm4gdXAgcmVndWxhcmx5IGFuZCByZWxpYWJseSk7IGhlciBoZWFsdGggKGFueSBhbGxlcmdpZXMgdG8gY2F0cyBvciBkb2dzLCBhbmQgdGhlIHBoeXNpY2FsIHdvcmsgb2YgY2xlYW5pbmcga2VubmVscywgd2Fsa2luZyBkb2dzIGFuZCBsaWZ0aW5nIGZvb2QpOyB0aGUgZW1vdGlvbmFsIHNpZGUgKHNvbWUgYW5pbWFscyBhcmUgc2ljaywgZnJpZ2h0ZW5lZCBvciBoYXZlIHNhZCBzdG9yaWVzLCBzbyBzaGUgbmVlZHMgYSBsaXR0bGUgcmVzaWxpZW5jZSk7IGFuZCB0aGUgcHJhY3RpY2FsaXRpZXMsIGFzayB3aGF0IGhlciBkdXRpZXMgd2lsbCBiZSBhbmQgd2hldGhlciB0aGV5IGdpdmUgdHJhaW5pbmcsIHdlYXIgb2xkIGNsb3RoZXMsIGFuZCBhYm92ZSBhbGwgYmUgcGF0aWVudCBhbmQga2luZC4iXSwicGhyYXNlcyI6WyJJZiBJIHdlcmUgeW91LCBJJ2RcdTIwMjYiLCJZb3Ugc2hvdWxkIGRlZmluaXRlbHlcdTIwMjYiLCJBbm90aGVyIG9wdGlvbiBpcyB0b1x1MjAyNiIsIlRydXN0IG1lLCB5b3Ugd29uJ3QgcmVncmV0IGl0LiJdfSwiczYiOiJIZXkgQW5uYSwgSSB0aGluayBpdCBpcyB3b25kZXJmdWwgdGhhdCB5b3Ugd2FudCB0byB2b2x1bnRlZXIgYXQgdGhlIGFuaW1hbCBzaGVsdGVyLCB5b3UgaGF2ZSBzdWNoIGEgYmlnIGhlYXJ0ISBCdXQgYmVmb3JlIHlvdSBzdGFydCwgbGV0IG1lIHRlbGwgeW91IHNvbWUgdGhpbmdzIHRvIHRoaW5rIGFib3V0LiBGaXJzdCwgdGhlIHRpbWUuIEEgc2hlbHRlciBuZWVkcyBwZW9wbGUgd2hvIGNvbWUgcmVndWxhcmx5LCBtYXliZSBldmVyeSB3ZWVrLCBzbyBhc2sgeW91cnNlbGYsIGRvIHlvdSByZWFsbHkgaGF2ZSB0aGUgdGltZT8gVGhlIGFuaW1hbHMgbmVlZCBwZW9wbGUgdGhleSBjYW4gY291bnQgb24uIFNlY29uZCwgdGhpbmsgYWJvdXQgeW91ciBoZWFsdGguIERvIHlvdSBoYXZlIGFsbGVyZ2llcyB0byBjYXRzIG9yIGRvZ3M\/IEFuZCB0aGUgd29yayBjYW4gYmUgcGh5c2ljYWwsIGNsZWFuaW5nIGNhZ2VzLCB3YWxraW5nIGJpZyBkb2dzLCBhbmQgbGlmdGluZyBiYWdzIG9mIGZvb2QsIHNvIGJlIHJlYWR5IGZvciB0aGF0LiBUaGlyZCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBiZSByZWFkeSBmb3IgeW91ciBmZWVsaW5ncy4gU29tZSBhbmltYWxzIGFyZSBzaWNrIG9yIHNjYXJlZCwgYW5kIHNvbWUgaGF2ZSBzYWQgc3Rvcmllcy4gSXQgY2FuIG1ha2UgeW91IGNyeSwgc28geW91IG5lZWQgdG8gYmUgYSBsaXR0bGUgYml0IHN0cm9uZyBlbW90aW9uYWxseS4gRm91cnRoLCBhc2sgdGhlbSBhYm91dCB0cmFpbmluZy4gQSBnb29kIHNoZWx0ZXIgd2lsbCB0ZWFjaCB5b3Ugd2hhdCB0byBkbywgc28gYXNrIHdoYXQgeW91ciBqb2Igd2lsbCBiZSBhbmQgaWYgdGhleSBnaXZlIHRyYWluaW5nLiBBbmQgb25lIHNtYWxsIHRpcCwgd2VhciBvbGQgY2xvdGhlcywgYmVjYXVzZSB5b3Ugd2lsbCBnZXQgZGlydHkgYW5kIGNvdmVyZWQgaW4gZnVyISBCdXQgbW9zdCBvZiBhbGwsIGJlIHBhdGllbnQgYW5kIGtpbmQuIElmIHlvdSBsb3ZlIGFuaW1hbHMgYW5kIHlvdSBhcmUgcmVsaWFibGUsIHlvdSB3aWxsIGJlIGEgZ3JlYXQgdm9sdW50ZWVyLiBHb29kIGx1Y2ssIEFubmEsIHRoZSBhbmltYWxzIGFyZSBsdWNreSB0byBoYXZlIHlvdSEiLCJzOSI6IkFubmEsIEkgdGhpbmsgaXQgaXMgcmVhbGx5IGxvdmVseSB0aGF0IHlvdSB3YW50IHRvIHZvbHVudGVlciBhdCB0aGUgYW5pbWFsIHNoZWx0ZXIsIGJ1dCBsZXQgbWUgdGFsayB5b3UgdGhyb3VnaCBhIGZldyB0aGluZ3MgdG8gd2VpZ2ggdXAgYmVmb3JlIHlvdSBjb21taXQuIFN0YXJ0IHdpdGggdGltZSwgYmVjYXVzZSBpdCBpcyB0aGUgYmlnIG9uZS4gU2hlbHRlcnMgZGVwZW5kIG9uIHZvbHVudGVlcnMgd2hvIHR1cm4gdXAgcmVsaWFibHksIHdlZWsgYWZ0ZXIgd2Vlaywgc28gYmUgaG9uZXN0IHdpdGggeW91cnNlbGYgYWJvdXQgd2hldGhlciB5b3UgY2FuIGdlbnVpbmVseSBzcGFyZSBhIHJlZ3VsYXIgc2xvdCwgdGhlIGFuaW1hbHMgZm9ybSBib25kcyBhbmQgbmVlZCBjb25zaXN0ZW5jeSwgbm90IHBlb3BsZSB3aG8gdmFuaXNoIGFmdGVyIGEgZm9ydG5pZ2h0LiBOZXh0LCB0aGluayBhYm91dCB0aGUgcGh5c2ljYWwgYW5kIGhlYWx0aCBzaWRlLiBJZiB5b3UgaGF2ZSBhbnkgYWxsZXJneSB0byBjYXRzIG9yIGRvZ3MsIGEgc2hlbHRlciBpcyB0aGUgd29yc3QgcGxhY2UgdG8gZGlzY292ZXIgaXQsIGFuZCB0aGUgd29yayBpdHNlbGYgaXMgc3VycHJpc2luZ2x5IGRlbWFuZGluZywgc2NydWJiaW5nIG91dCBrZW5uZWxzLCB3YWxraW5nIHN0cm9uZyBkb2dzLCBoYXVsaW5nIHNhY2tzIG9mIGZvb2QsIHNvIHlvdSBuZWVkIHRvIGJlIHVwIGZvciBnZXR0aW5nIHlvdXIgaGFuZHMgZGlydHkuIEp1c3QgYXMgaW1wb3J0YW50IGlzIHRoZSBlbW90aW9uYWwgc2lkZSwgd2hpY2ggcGVvcGxlIHVuZGVyZXN0aW1hdGUuIFNvbWUgb2YgdGhlIGFuaW1hbHMgYXJyaXZlIGZyaWdodGVuZWQsIHNpY2sgb3Igd2l0aCBoZWFydGJyZWFraW5nIGhpc3RvcmllcywgYW5kIG5vdCBldmVyeSBzdG9yeSBlbmRzIGhhcHBpbHksIHNvIHlvdSB3aWxsIG5lZWQgYSBiaXQgb2YgcmVzaWxpZW5jZSB0byBjb3BlIHdpdGggdGhhdC4gSSB3b3VsZCBhbHNvIHN1Z2dlc3QgYXNraW5nIHByYWN0aWNhbCBxdWVzdGlvbnMgdXAgZnJvbnQ6IHdoYXQgZXhhY3RseSB3aWxsIHlvdXIgZHV0aWVzIGJlLCBhbmQgZG8gdGhleSBwcm92aWRlIHRyYWluaW5nPyBBbnkgZGVjZW50IHNoZWx0ZXIgd2lsbCBzaG93IHlvdSB0aGUgcm9wZXMuIEFuZCBhIHNtYWxsIHRpcCwgd2VhciBvbGQgY2xvdGhlcywgYmVjYXVzZSB5b3Ugd2lsbCBnbyBob21lIGNvdmVyZWQgaW4gZnVyIGFuZCBtdWQuIEFib3ZlIGFsbCwgYnJpbmcgcGF0aWVuY2UgYW5kIGEgY2FsbSwga2luZCBtYW5uZXIuIElmIHlvdSBjYW4gb2ZmZXIgdGhvc2UsIGFsb25nIHdpdGggcmVsaWFiaWxpdHksIHlvdSB3aWxsIGJlIGEgZmFudGFzdGljIHZvbHVudGVlciwgYW5kIGhvbmVzdGx5LCB0aG9zZSBjYXRzIGFuZCBkb2dzIHdpbGwgYWRvcmUgeW91IGZvciBpdC4ifSx7ImsiOiJ0MiIsIm51bSI6MiwidHlwZUVuIjoiVGFsa2luZyBhYm91dCBhIFBlcnNvbmFsIEV4cGVyaWVuY2UiLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiVGFsayBhYm91dCBhIHRpbWUgd2hlbiB5b3UgbWV0IHNvbWVvbmUgbWVtb3JhYmxlLiBNYXliZSB5b3UgY2FuIHRhbGsgYWJvdXQgbWVldGluZyBhIHBlcnNvbiB5b3UgYWRtaXJlLCBhIG5ldyBmYW1pbHkgbWVtYmVyLCBvciBzb21lb25lIHdobyBiZWNhbWUgeW91ciBmcmllbmQuIFdobyBkaWQgeW91IG1lZXQsIGhvdyBkaWQgaXQgbWFrZSB5b3UgZmVlbCwgYW5kIHdoeSB3YXMgdGhlIGV2ZW50IG1lbW9yYWJsZT8iLCJpbWciOm51bGwsInRpcHMiOnsiYnVsbGV0cyI6WyJBbnN3ZXIgZXZlcnkgcGFydCBvZiB0aGUgcXVlc3Rpb24gKHdoYXQgaGFwcGVuZWQgXHUyMDEzIGhvdyBpdCB1bmZvbGRlZCBcdTIwMTMgdGhlIG91dGNvbWUgLyB3aHkgaXQgaXMgbWVtb3JhYmxlKS4iLCJVc2UgcGFzdCB0ZW5zZXMgYW5kIHRlbGwgaXQgaW4gb3JkZXI6IFRoaXMgaGFwcGVuZWRcdTIwMjYgXHUyMTkyIFRoZW5cdTIwMjYgXHUyMTkyIEluIHRoZSBlbmRcdTIwMjYiLCJGaW5pc2ggd2l0aCBhIGZlZWxpbmcgb3IgYSBsZXNzb24gbGVhcm5lZC4iLCJBbnN3ZXIgdGhlIHRocmVlIHBhcnRzOiB3aG8geW91IG1ldCwgaG93IHRoZSBtZWV0aW5nIG1hZGUgeW91IGZlZWwsIGFuZCB3aHkgaXQgc3RheWVkIHdpdGggeW91LiBUaGUgc2FtcGxlcyBkZXNjcmliZSBhIGxvbmVseSwgbmVydm91cyBmaXJzdCBkYXkgYXQgYSBuZXcgc2Nob29sIHdoZW4gYSBmcmllbmRseSBnaXJsLCBNYXJpYSwgaW52aXRlZCBhIHN0cmFuZ2VyIHRvIHNpdCB3aXRoIGhlciBhbmQgYmVjYW1lIGEgbGlmZWxvbmcgYmVzdCBmcmllbmQuIFBpY2sgb25lIHJlYWwgcGVyc29uIGFuZCBnaXZlIGEgY29uY3JldGUgbW9tZW50LCB0aGUgZXhhY3QgdGhpbmcgdGhleSBzYWlkIG9yIGRpZCB0aGF0IGNoYW5nZWQgaG93IHlvdSBmZWx0LiJdLCJwaHJhc2VzIjpbIlRoaXMgaGFwcGVuZWQgYWJvdXQgdHdvIHllYXJzIGFnb1x1MjAyNiIsIkF0IGZpcnN0XHUyMDI2LCBidXQgdGhlblx1MjAyNiIsIldoYXQgbWFkZSBpdCB1bmZvcmdldHRhYmxlIHdhc1x1MjAyNiIsIkxvb2tpbmcgYmFjaywgXHUyMDI2Il19LCJzNiI6Ikkgd2FudCB0byB0YWxrIGFib3V0IHRoZSBkYXkgSSBtZXQgbXkgYmVzdCBmcmllbmQsIE1hcmlhLiBJdCB3YXMgbXkgZmlyc3QgZGF5IGF0IGEgbmV3IHNjaG9vbCwgYW5kIEkgd2FzIHZlcnkgbmVydm91cy4gSSBkaWQgbm90IGtub3cgYW55Ym9keSwgYW5kIEkgZmVsdCBsb25lbHkgYW5kIGEgbGl0dGxlIGJpdCBzY2FyZWQuIEF0IGx1bmNoIHRpbWUsIEkgd2FzIHNpdHRpbmcgYWxvbmUgYXQgYSB0YWJsZSwgbG9va2luZyBhdCBteSBmb29kLiBUaGVuIGEgZ2lybCBjYW1lIGFuZCBzYXQgbmV4dCB0byBtZSwgc21pbGVkLCBhbmQgc2FpZCwgJ0hpLCB5b3UgYXJlIG5ldywgcmlnaHQ\/IENvbWUgYW5kIHNpdCB3aXRoIHVzIScgVGhhdCB3YXMgTWFyaWEuIFNoZSB3YXMgc28gZnJpZW5kbHkgYW5kIHdhcm0uIFNoZSBpbnRyb2R1Y2VkIG1lIHRvIGFsbCBoZXIgZnJpZW5kcywgYW5kIHN1ZGRlbmx5IEkgd2FzIG5vdCBhbG9uZSBhbnltb3JlLiBIb3cgZGlkIGl0IG1ha2UgbWUgZmVlbD8gQXQgZmlyc3QsIHN1cnByaXNlZCwgYW5kIHRoZW4gdmVyeSBoYXBweSBhbmQgdGhhbmtmdWwuIEluIG9uZSBtaW51dGUsIG15IHRlcnJpYmxlIGZpcnN0IGRheSBiZWNhbWUgYSBnb29kIGRheS4gV2h5IGlzIGl0IHNvIG1lbW9yYWJsZT8gQmVjYXVzZSB0aGF0IHNtYWxsIGtpbmQgYWN0aW9uIGNoYW5nZWQgZXZlcnl0aGluZyBmb3IgbWUuIElmIE1hcmlhIGRpZCBub3QgY29tZSB0byB0YWxrIHRvIG1lLCBtYXliZSBJIHdvdWxkIGhhdmUgYmVlbiBzYWQgYW5kIGxvbmVseSBmb3Igd2Vla3MuIEJ1dCBiZWNhdXNlIG9mIGhlciwgSSBmZWx0IHdlbGNvbWUuIFRoYXQgd2FzIHRlbiB5ZWFycyBhZ28sIGFuZCB0b2RheSBNYXJpYSBpcyBzdGlsbCBteSBiZXN0IGZyaWVuZC4gV2UgaGF2ZSBzaGFyZWQgc28gbWFueSBoYXBweSBtZW1vcmllcyB0b2dldGhlci4gSSBhbHdheXMgcmVtZW1iZXIgdGhhdCBmaXJzdCBkYXksIGFuZCBpdCB0YXVnaHQgbWUgYW4gaW1wb3J0YW50IGxlc3NvbiwgdGhhdCBvbmUgc21hbGwgYWN0IG9mIGtpbmRuZXNzIGNhbiBjaGFuZ2Ugc29tZW9uZSdzIHdob2xlIGxpZmUuIiwiczkiOiJUaGUgbW9zdCBtZW1vcmFibGUgcGVyc29uIEkgaGF2ZSBldmVyIG1ldCBpcyBteSBiZXN0IGZyaWVuZCwgTWFyaWEsIGFuZCBJIGNhbiBzdGlsbCBwaWN0dXJlIHRoZSBleGFjdCBtb21lbnQgd2UgbWV0LiBJdCB3YXMgbXkgdmVyeSBmaXJzdCBkYXkgYXQgYSBuZXcgc2Nob29sLCBhbmQgSSB3YXMgYSBidW5kbGUgb2YgbmVydmVzLCBJIGtuZXcgYWJzb2x1dGVseSBubyBvbmUsIGFuZCBJIGZlbHQgcGFpbmZ1bGx5IGxvbmVseSBhbmQgb3V0IG9mIHBsYWNlLiBCeSBsdW5jaHRpbWUgSSBoYWQgcmV0cmVhdGVkIHRvIGFuIGVtcHR5IHRhYmxlLCBzdGFyaW5nIGF0IG15IHRyYXkgYW5kIHF1aWV0bHkgZHJlYWRpbmcgdGhlIHJlc3Qgb2YgdGhlIGRheS4gVGhlbiBhIGdpcmwgSSBoYWQgbmV2ZXIgc2VlbiBiZWZvcmUgc2ltcGx5IHdhbGtlZCBvdmVyLCBkcm9wcGVkIGludG8gdGhlIHNlYXQgYmVzaWRlIG1lIHdpdGggYSBodWdlIHNtaWxlLCBhbmQgc2FpZCwgJ0hpLCB5b3UncmUgbmV3LCBhcmVuJ3QgeW91PyBDb21lIGFuZCBzaXQgd2l0aCB1cy4nIFRoYXQgd2FzIE1hcmlhLiBXaXRoaW4gbWludXRlcyBzaGUgaGFkIGludHJvZHVjZWQgbWUgdG8gaGVyIHdob2xlIGNpcmNsZSBvZiBmcmllbmRzLCBhbmQganVzdCBsaWtlIHRoYXQgdGhlIGNydXNoaW5nIGxvbmVsaW5lc3MgZXZhcG9yYXRlZC4gSG93IGRpZCBpdCBtYWtlIG1lIGZlZWw\/IFN0dW5uZWQgYXQgZmlyc3QsIHRoZW4gZmxvb2RlZCB3aXRoIHJlbGllZiBhbmQgZ3JhdGl0dWRlLCBzaGUgaGFkIHR1cm5lZCB3aGF0IHdhcyBzaGFwaW5nIHVwIHRvIGJlIGEgbWlzZXJhYmxlIGRheSBjb21wbGV0ZWx5IGFyb3VuZC4gV2hhdCBtYWtlcyBpdCBzbyB1bmZvcmdldHRhYmxlIGlzIHRoZSBzaGVlciBwb3dlciBvZiBzdWNoIGEgc21hbGwgZ2VzdHVyZS4gSGFkIE1hcmlhIG5vdCBib3RoZXJlZCB0byBjcm9zcyB0aGF0IHJvb20sIEkgbWlnaHQgaGF2ZSBzcGVudCB3ZWVrcyBpc29sYXRlZCBhbmQgaG9tZXNpY2suIEluc3RlYWQsIG9uZSBtb21lbnQgb2Yga2luZG5lc3MgZ2F2ZSBtZSBhIHNlbnNlIG9mIGJlbG9uZ2luZyB0aGF0IGhhcyBsYXN0ZWQgZXZlciBzaW5jZSwgdGhhdCB3YXMgd2VsbCBvdmVyIHRlbiB5ZWFycyBhZ28sIGFuZCBzaGUgaXMgc3RpbGwgbXkgY2xvc2VzdCBmcmllbmQgdG9kYXkuIE1vcmUgdGhhbiBhbnl0aGluZywgbWVldGluZyBoZXIgdGF1Z2h0IG1lIGEgbGVzc29uIEkgaGF2ZSBuZXZlciBmb3Jnb3R0ZW46IGEgc2luZ2xlLCB0aW55IGFjdCBvZiBraW5kbmVzcyByZWFsbHkgY2FuIGNoYW5nZSB0aGUgY291cnNlIG9mIHNvbWVvbmUncyBsaWZlLiJ9LHsiayI6InQzIiwibnVtIjozLCJ0eXBlRW4iOiJEZXNjcmliaW5nIGEgU2NlbmUiLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiRGVzY3JpYmUgc29tZSB0aGluZ3MgdGhhdCBhcmUgaGFwcGVuaW5nIGluIHRoZSBwaWN0dXJlIGJlbG93IGFzIHdlbGwgYXMgeW91IGNhbi4gVGhlIHBlcnNvbiB3aXRoIHdob20geW91IGFyZSBzcGVha2luZyBjYW5ub3Qgc2VlIHRoZSBwaWN0dXJlLiIsImltZyI6InNjZW5lIiwidGlwcyI6eyJidWxsZXRzIjpbIkZpcnN0IHNlbnRlbmNlOiBnaXZlIHRoZSBvdmVydmlldyAod2hlcmUgaXQgaXMsIHdoYXQgdGhlIGF0bW9zcGhlcmUgaXMgbGlrZSkuIiwiRGVzY3JpYmUgNFx1MjAxMzYgZGV0YWlscyBieSBsb2NhdGlvbjogaW4gdGhlIGZvcmVncm91bmQgLyBvbiB0aGUgbGVmdCAvIGF0IHRoZSBiYWNrXHUyMDI2OyB1c2UgdGhlIHByZXNlbnQgY29udGludW91cy4iLCJUaGUgbGlzdGVuZXIgQ0FOTk9UIHNlZSB0aGUgcGljdHVyZSBcdTIwMTQgYmUgc3BlY2lmaWM7IHdoZW4gdW5zdXJlLCB1c2Ugc2VlbXMgLyBhcHBlYXJzIC8gbG9va3MgbGlrZS4iLCJBIGxpdmVseSBjaXJjdXMgcGVyZm9ybWFuY2UgaW5zaWRlIGEgYmlnLXRvcCB0ZW50LiBHbyBpbiBvcmRlcjogb3ZlcmhlYWQsIGFlcmlhbCBhY3JvYmF0cywgYSB3b21hbiBpbiBhIHB1cnBsZSBsZW90YXJkIGZseWluZyBvbiBhIHRyYXBlemUsIGFub3RoZXIgZG9pbmcgYSBtaWQtYWlyIGhhbmRzdGFuZCwgYW5kIGEgYmxvbmRlIHBlcmZvcm1lciBjbGltYmluZyBwaW5rIGFuZCBncmVlbiBzaWxrIHJpYmJvbnMgLT4gb24gdGhlIGxlZnQgYSBtYW4ganVnZ2xpbmcgcmVkIGJhbGxzIHdoaWxlIGJhbGFuY2luZyBvbiB0YWxsIHN0aWx0cyAtPiBpbiB0aGUgY2VudHJlIGEgcGVyZm9ybWVyIG9uIGEgdW5pY3ljbGUgYW5kIGEgbWFuIGRvaW5nIGEgaGFuZHN0YW5kIG9uIGEgdGFsbCBzdGFjayBvZiBwdXJwbGUgY2hhaXJzLCBzdGVhZGllZCBieSBhbm90aGVyIHBlcmZvcm1lciAtPiBhIGNsb3duIHdpdGggYmx1ZSBoYWlyIGFuZCBhIHJlZCBub3NlIG1ha2luZyBhIHBpbmsgYmFsbG9vbiBwb29kbGUgLT4gaW4gdGhlIGZvcmVncm91bmQgYSB2ZW5kb3IgaW4gYSBncmVlbiBhcHJvbiBhbmQgd2hpdGUgaGF0IGhhbmRpbmcgcGluayBjb3R0b24gY2FuZHkgdG8gYSB3b21hbiBpbiBwdXJwbGUsIGEgY2hpbGQgZ2V0dGluZyBhIGJsYWNrLWNhdCBmYWNlLXBhaW50aW5nLCBhIGxpdHRsZSBnaXJsIGluIHBpbmsgd2VhcmluZyBhIGhhdCwgYW5kIGEgd29tYW4gaW4geWVsbG93IGhvbGRpbmcgYSBib3kncyBoYW5kIGFuZCBsb29raW5nIGFtYXplZC4iXSwicGhyYXNlcyI6WyJJbiB0aGUgZm9yZWdyb3VuZCwgXHUyMDI2IiwiT24gdGhlIHJpZ2h0LWhhbmQgc2lkZSwgXHUyMDI2IiwiSXQgbG9va3MgbGlrZVx1MjAyNiIsIlRoZSB3aG9sZSBwbGFjZSBmZWVsc1x1MjAyNiJdfSwiczYiOiJUaGlzIHBpY3R1cmUgc2hvd3MgYW4gZXhjaXRpbmcgY2lyY3VzIHNob3cgaW5zaWRlIGEgYmlnIHRlbnQsIGFuZCB0aGVyZSBpcyBhY3Rpb24gZXZlcnl3aGVyZSEgRmlyc3QsIGxldCBtZSBsb29rIHVwLiBIaWdoIGluIHRoZSBhaXIsIHRoZXJlIGFyZSBhY3JvYmF0cy4gT25lIHdvbWFuIGluIGEgcHVycGxlIGNvc3R1bWUgaXMgZmx5aW5nIG9uIGEgdHJhcGV6ZSwgYW5vdGhlciBpcyBkb2luZyBhIGhhbmRzdGFuZCwgYW5kIGEgd29tYW4gd2l0aCBibG9uZGUgaGFpciBpcyBjbGltYmluZyB1cCBwaW5rIGFuZCBncmVlbiBzaWxrIHJpYmJvbnMuIEl0IGxvb2tzIGFtYXppbmcsIGJ1dCBhIGxpdHRsZSBiaXQgc2NhcnkhIE9uIHRoZSBsZWZ0LCBhIG1hbiBpcyBqdWdnbGluZyByZWQgYmFsbHMgd2hpbGUgaGUgaXMgc3RhbmRpbmcgb24gdGFsbCBzdGlsdHMuIEluIHRoZSBtaWRkbGUsIG9uZSBwZXJmb3JtZXIgaXMgcmlkaW5nIGEgdW5pY3ljbGUsIGFuZCBuZWFyIGhpbSwgYSBtYW4gaXMgZG9pbmcgYSBoYW5kc3RhbmQgb24gdG9wIG9mIGEgdGFsbCBwaWxlIG9mIHB1cnBsZSBjaGFpcnMsIHdoaWxlIGFub3RoZXIgbWFuIGhvbGRzIHRoZSBjaGFpcnMgc28gdGhleSBkbyBub3QgZmFsbC4gT24gdGhlIHJpZ2h0LCB0aGVyZSBpcyBhIGZ1bm55IGNsb3duIHdpdGggYmx1ZSBoYWlyIGFuZCBhIHJlZCBub3NlLCBhbmQgaGUgaXMgbWFraW5nIGEgcGluayBiYWxsb29uIGFuaW1hbCwgSSB0aGluayBpdCBpcyBhIHBvb2RsZS4gTm93LCBpbiB0aGUgZnJvbnQsIHRoZXJlIGlzIGEgbWFuIHdlYXJpbmcgYSBncmVlbiBhcHJvbiBhbmQgYSB3aGl0ZSBoYXQsIGFuZCBoZSBpcyBnaXZpbmcgcGluayBjb3R0b24gY2FuZHkgdG8gYSB3b21hbiBpbiBwdXJwbGUuIEEgY2hpbGQgaXMgZ2V0dGluZyBhIGJsYWNrIGNhdCBwYWludGVkIG9uIGhpcyBmYWNlLiBBIGxpdHRsZSBnaXJsIGluIGEgcGluayBzaGlydCBpcyB3ZWFyaW5nIGEgaGF0IGFuZCBydW5uaW5nLiBBbmQgYSB3b21hbiBpbiBhIHllbGxvdyBzaGlydCBpcyBob2xkaW5nIGEgYm95J3MgaGFuZCwgYW5kIGhlciBtb3V0aCBpcyBvcGVuLCBzaGUgbG9va3MgdmVyeSBzdXJwcmlzZWQhIEV2ZXJ5b25lIGlzIGVuam95aW5nIHRoZSBzaG93LiIsInM5IjoiVGhpcyBpcyBhIHZpYnJhbnQgY2lyY3VzIGluIGZ1bGwgc3dpbmcgaW5zaWRlIGEgYmlnLXRvcCB0ZW50LCBhbmQgaG9uZXN0bHkgdGhlcmUgaXMgc28gbXVjaCBoYXBwZW5pbmcgaXQgaXMgaGFyZCB0byBrbm93IHdoZXJlIHRvIGxvb2sgZmlyc3QuIExldCBtZSBzdGFydCBvdmVyaGVhZCwgYmVjYXVzZSB0aGF0IGlzIHRoZSBtb3N0IGRyYW1hdGljIHBhcnQuIEhpZ2ggdW5kZXIgdGhlIGNhbm9weSwgYWVyaWFsIGFjcm9iYXRzIGFyZSBwZXJmb3JtaW5nLCBhIHdvbWFuIGluIGEgcHVycGxlIGxlb3RhcmQgc3dpbmdzIGFuZCBmbGllcyBvbiBhIHRyYXBlemUsIGFub3RoZXIgYXJjaGVzIGludG8gYSBoYW5kc3RhbmQgaW4gbWlkLWFpciwgYW5kIGEgYmxvbmRlIHBlcmZvcm1lciBzY2FsZXMgYSBwYWlyIG9mIHBpbmsgYW5kIGdyZWVuIHNpbGsgcmliYm9ucywgYWxsIG9mIGl0IHRocmlsbGluZyBhbmQgc2xpZ2h0bHkgaGVhcnQtc3RvcHBpbmcuIERvd24gYXQgZ3JvdW5kIGxldmVsIG9uIHRoZSBsZWZ0LCBhIG1hbiBqdWdnbGVzIGEgY2FzY2FkZSBvZiByZWQgYmFsbHMgd2hpbGUgYmFsYW5jaW5nIG9uIHRhbGwgc3RpbHRzLiBJbiB0aGUgY2VudHJlLCBvbmUgcGVyZm9ybWVyIHdvYmJsZXMgYWxvbmcgb24gYSB1bmljeWNsZSwgYW5kIGJlc2lkZSBoaW0gYSBtYW4gaG9sZHMgYSBoYW5kc3RhbmQgb24gdG9wIG9mIGEgcHJlY2FyaW91cyBzdGFjayBvZiBwdXJwbGUgY2hhaXJzLCBzdGVhZGllZCBieSBhIGNvbGxlYWd1ZSB3aG8gaXMgYnJhY2luZyB0aGUgdG93ZXIuIE92ZXIgdG8gdGhlIHJpZ2h0LCBhIGNoZWVyZnVsIGNsb3duIHdpdGggZWxlY3RyaWMtYmx1ZSBoYWlyIGFuZCBhIGJpZyByZWQgbm9zZSBpcyB0d2lzdGluZyBhIHBpbmsgYmFsbG9vbiBpbnRvIHdoYXQgbG9va3MgbGlrZSBhIHBvb2RsZS4gQnV0IHRoZSBmb3JlZ3JvdW5kIGlzIGp1c3QgYXMgYnVzeTogYSB2ZW5kb3IgaW4gYSBncmVlbiBhcHJvbiBhbmQgd2hpdGUgaGF0IGlzIHBhc3NpbmcgYSBjbG91ZCBvZiBwaW5rIGNvdHRvbiBjYW5keSB0byBhIHdvbWFuIGluIHB1cnBsZSwgYSBzbWFsbCBjaGlsZCBpcyBoYXZpbmcgYSBibGFjayBjYXQgcGFpbnRlZCBvbnRvIHRoZWlyIGZhY2UsIGEgbGl0dGxlIGdpcmwgaW4gYSBwaW5rIHRvcCBhbmQgYSBwZWFrZWQgaGF0IGRhc2hlcyBwYXN0LCBhbmQsIGJlc3Qgb2YgYWxsLCBhIHdvbWFuIGluIGEgeWVsbG93IHNoaXJ0IGdyaXBzIGEgYm95J3MgaGFuZCB3aXRoIGhlciBtb3V0aCB3aWRlIG9wZW4sIHV0dGVybHkgYW1hemVkIGJ5IHRoZSBzcGVjdGFjbGUuIFRoZSB3aG9sZSB0ZW50IGJ1enplcyB3aXRoIGNvbG91ciBhbmQgZXhjaXRlbWVudC4ifSx7ImsiOiJ0NCIsIm51bSI6NCwidHlwZUVuIjoiTWFraW5nIFByZWRpY3Rpb25zIiwicHJlcCI6MzAsInJlYyI6NjAsInByb21wdCI6IkluIHRoaXMgcGljdHVyZSwgd2hhdCBkbyB5b3UgdGhpbmsgd2lsbCBtb3N0IHByb2JhYmx5IGhhcHBlbiBuZXh0PyIsImltZyI6InNjZW5lIiwidGlwcyI6eyJidWxsZXRzIjpbIkVhY2ggcHJlZGljdGlvbiA9IHdpbGwgLyBiZSBnb2luZyB0byAvIHdpbGwgcHJvYmFibHkgKyBhIFJFQVNPTiBiYXNlZCBvbiBhIGRldGFpbCBpbiB0aGUgcGljdHVyZS4iLCJNYWtlIDNcdTIwMTM0IHByZWRpY3Rpb25zIGFib3V0IGRpZmZlcmVudCBwZW9wbGUgXHUyMDE0IGRvbid0IHN0b3AgYXQgb25lIGlkZWEuIiwiRmluaXNoIHdpdGggb25lIG92ZXJhbGwgcHJlZGljdGlvbiBmb3IgdGhlIHdob2xlIHNjZW5lLiIsIlNhbWUgY2lyY3VzIGFzIFRhc2sgMyAtIG5vdyBwcmVkaWN0OiB0aGUgdHJhcGV6ZSBhcnRpc3Qgd2lsbCBiZSBjYXVnaHQgYnkgaGVyIHBhcnRuZXIgYW5kIHRoZSBjcm93ZCB3aWxsIGNsYXA7IHRoZSBtYW4gb24gdGhlIHRhbGwgc3RhY2sgb2YgcHVycGxlIGNoYWlycyB3aWxsIGZpbmlzaCBoaXMgaGFuZHN0YW5kIGFuZCBjbGltYiBkb3duIHNhZmVseSB3aGlsZSBoaXMgaGVscGVyIHN0ZWFkaWVzIGl0OyB0aGUganVnZ2xlciBvbiBzdGlsdHMgd2lsbCBnYXRoZXIgaGlzIHJlZCBiYWxscyBhbmQgdGFrZSBhIGJvdzsgdGhlIGJsdWUtaGFpcmVkIGNsb3duIHdpbGwgZmluaXNoIHRoZSBwaW5rIHBvb2RsZSBhbmQgaGFuZCBpdCB0byBhIGRlbGlnaHRlZCBjaGlsZDsgdGhlIHZlbmRvciB3aWxsIGtlZXAgc2VsbGluZyBjb3R0b24gY2FuZHk7IGFuZCB0aGUgYW1hemVkIHdvbWFuIGluIHllbGxvdyBhbmQgdGhlIGNoaWxkcmVuIHdpbGwgY2hlZXIgYXMgZWFjaCBhY3QgZW5kcy4iXSwicGhyYXNlcyI6WyJcdTIwMjZpcyBhYm91dCB0b1x1MjAyNiIsIkhlJ2xsIG1vc3QgbGlrZWx5XHUyMDI2IiwiSnVkZ2luZyBieVx1MjAyNiwgSSBleHBlY3RcdTIwMjYiLCJXaXRoaW4gbWludXRlcywgXHUyMDI2Il19LCJzNiI6IkkgdGhpbmsgaW4gdGhlIG5leHQgbW9tZW50LCB0aGlzIGV4Y2l0aW5nIGNpcmN1cyBzaG93IHdpbGwgY29udGludWUgYW5kIHJlYWNoIGEgYmlnIGZpbmlzaC4gRmlyc3QsIHRoZSB3b21hbiBmbHlpbmcgb24gdGhlIHRyYXBlemUgd2lsbCBwcm9iYWJseSBiZSBjYXVnaHQgYnkgYW5vdGhlciBhY3JvYmF0LCBvciBzaGUgd2lsbCBzd2luZyBiYWNrIHNhZmVseSwgYW5kIHRoZW4gYWxsIHRoZSBwZW9wbGUgd2lsbCBjbGFwIGxvdWRseSBmb3IgaGVyLiBUaGUgbWFuIGRvaW5nIGEgaGFuZHN0YW5kIG9uIHRoZSB0YWxsIHBpbGUgb2YgcHVycGxlIGNoYWlycyBpcyBpbiBhIGRhbmdlcm91cyBwb3NpdGlvbiwgc28gSSB0aGluayBoZSB3aWxsIGZpbmlzaCBoaXMgdHJpY2sgY2FyZWZ1bGx5IGFuZCBjbGltYiBkb3duIHNsb3dseSwgYW5kIGhpcyBoZWxwZXIgd2lsbCBob2xkIHRoZSBjaGFpcnMgc28gbm90aGluZyBmYWxscy4gVGhlIG1hbiBqdWdnbGluZyBvbiB0aGUgc3RpbHRzIHdpbGwgY2F0Y2ggYWxsIGhpcyByZWQgYmFsbHMgYW5kIHRha2UgYSBib3cuIFRoZSBjbG93biB3aXRoIHRoZSBibHVlIGhhaXIgaXMgYWxtb3N0IGZpbmlzaGVkIHdpdGggdGhlIHBpbmsgYmFsbG9vbiBwb29kbGUsIHNvIGluIGEgc2Vjb25kIGhlIHdpbGwgZ2l2ZSBpdCB0byBhIGhhcHB5IGNoaWxkLCBhbmQgdGhlIGNoaWxkIHdpbGwgc21pbGUuIFRoZSBtYW4gd2l0aCB0aGUgZ3JlZW4gYXByb24gd2lsbCBzZWxsIG1vcmUgY290dG9uIGNhbmR5IHRvIHRoZSBvdGhlciBjaGlsZHJlbiwgYmVjYXVzZSBpdCBsb29rcyBkZWxpY2lvdXMuIEFuZCB0aGUgd29tYW4gaW4geWVsbG93IHdobyBsb29rcyBzbyBzdXJwcmlzZWQsIHRvZ2V0aGVyIHdpdGggYWxsIHRoZSBjaGlsZHJlbiwgd2lsbCBjbGFwIGFuZCBjaGVlciBmb3IgdGhlIHBlcmZvcm1lcnMuIEkgdGhpbmsgZXZlcnkgYWN0IHdpbGwgZW5kIHdlbGwsIGFuZCBldmVyeW9uZSB3aWxsIGJlIHZlcnkgaGFwcHkuIEFmdGVyIHRoZSBzaG93LCB0aGUgZmFtaWxpZXMgd2lsbCBnbyBob21lIHRpcmVkIGJ1dCBleGNpdGVkLCB0YWxraW5nIGFib3V0IGFsbCB0aGUgYW1hemluZyB0aGluZ3MgdGhleSBzYXcuIEl0IHdpbGwgYmUgYSB3b25kZXJmdWwgZGF5IGF0IHRoZSBjaXJjdXMhIiwiczkiOiJHaXZlIHRoaXMgY2lyY3VzIGFub3RoZXIgbW9tZW50IGFuZCBlYWNoIGRhcmluZyBhY3Qgd2lsbCBidWlsZCB0byBpdHMgY2xpbWF4LiBUaGUgYWNyb2JhdCBmbHlpbmcgb24gdGhlIHRyYXBlemUgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIHNuYXRjaGVkIHNhZmVseSBvdXQgb2YgdGhlIGFpciBieSBoZXIgcGFydG5lciwgb3Igc3dpbmcgZ3JhY2VmdWxseSBiYWNrIHRvIGhlciBwbGF0Zm9ybSwgYW5kIHRoZSB0ZW50IHdpbGwgZXJ1cHQgaW4gYXBwbGF1c2UuIFRoZSBtYW4gYmFsYW5jaW5nIGluIGEgaGFuZHN0YW5kIGF0b3AgdGhhdCBzd2F5aW5nIHRvd2VyIG9mIHB1cnBsZSBjaGFpcnMgaXMgdGhlIG9uZSBJIHdvdWxkIHdhdGNoIG5lcnZvdXNseSwgYnV0IEkgZXhwZWN0IGhpbSB0byBob2xkIHRoZSBwb3NlIGp1c3QgbG9uZyBlbm91Z2ggZm9yIHRoZSBnYXNwcywgdGhlbiBjYXJlZnVsbHkgZGlzbW91bnQgd2hpbGUgaGlzIHBhcnRuZXIgc3RlYWRpZXMgdGhlIHN0YWNrIHNvIG5vdGhpbmcgdG9wcGxlcy4gT3ZlciBvbiB0aGUgbGVmdCwgdGhlIGp1Z2dsZXIgb24gc3RpbHRzIHdpbGwgZ2F0aGVyIHVwIGhpcyByZWQgYmFsbHMgd2l0aCBhIGZsb3VyaXNoIGFuZCB0YWtlIGEgZGVlcCBib3cuIFRoZSBibHVlLWhhaXJlZCBjbG93biBpcyBtb21lbnRzIGZyb20gZmluaXNoaW5nIGhpcyBwaW5rIGJhbGxvb24gcG9vZGxlLCBzbyBoZSB3aWxsIHNvb24gcHJlc2VudCBpdCB0byBhIGRlbGlnaHRlZCBjaGlsZCwgd2hvc2UgZmFjZSB3aWxsIGxpZ2h0IHVwLiBNZWFud2hpbGUgdGhlIHZlbmRvciBpbiB0aGUgZ3JlZW4gYXByb24gd2lsbCBrZWVwIGRvaW5nIGEgYnJpc2sgdHJhZGUsIHNwaW5uaW5nIG1vcmUgY2xvdWRzIG9mIGNvdHRvbiBjYW5keSBmb3IgdGhlIGNoaWxkcmVuIHF1ZXVpbmcgdXAuIEFuZCB0aGF0IHdvbWFuIGluIHllbGxvdywgZnJvemVuIG1pZC1nYXNwLCBhbG9uZyB3aXRoIHRoZSB3aWRlLWV5ZWQgeW91bmdzdGVycyBhcm91bmQgaGVyLCB3aWxsIGJyZWFrIGludG8gY2hlZXJzIGFuZCBjbGFwcGluZyBhcyBlYWNoIHBlcmZvcm1lciBsYW5kcyB0aGVpciBmaW5hbGUuIE15IG92ZXJhbGwgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSB3aG9sZSBzaG93IHdpbGwgZW5kIHRyaXVtcGhhbnRseSwgZXZlcnkgYWN0IG5haWxlZCwgZXZlcnkgY2hpbGQgdGhyaWxsZWQsIGFuZCBhZnRlcndhcmRzIHRoZSBmYW1pbGllcyB3aWxsIHNwaWxsIG91dCBvZiB0aGUgdGVudCwgdGlyZWQgYnV0IGJ1enppbmcsIGNoYXR0ZXJpbmcgdGhlIHdob2xlIHdheSBob21lIGFib3V0IHRoZSBhY3JvYmF0cywgdGhlIGNsb3duIGFuZCB0aGUgYXN0b25pc2hpbmcgdG93ZXIgb2YgY2hhaXJzLiJ9LHsiayI6InQ1IiwibnVtIjo1LCJ0eXBlRW4iOiJDb21wYXJpbmcgYW5kIFBlcnN1YWRpbmciLCJwaGFzZWQiOnRydWUsImNob29zZSI6eyJwcmVwIjo2MCwic2l0dWF0aW9uIjoiWW91IGFyZSBzaG9wcGluZyBmb3IgYSB0ZWxlcGhvbmUgZm9yIGEgcmVsYXRpdmUgd2hvIGhhcyBkaWZmaWN1bHR5IGhlYXJpbmcgYW5kIGNhbm5vdCBzZWUgdmVyeSB3ZWxsLiBZb3UgaGF2ZSB0d28gb3B0aW9ucy4gVXNpbmcgdGhlIHBpY3R1cmVzIGFuZCBpbmZvcm1hdGlvbiBiZWxvdywgY2hvb3NlIHRoZSBvcHRpb24gdGhhdCB5b3UgcHJlZmVyLiBJbiB0aGUgbmV4dCBzZWN0aW9uLCB5b3Ugd2lsbCBuZWVkIHRvIHBlcnN1YWRlIHlvdXIgZnJpZW5kIHRoYXQgeW91ciBjaG9pY2UgaXMgdGhlIGJldHRlciBjaG9pY2UuIiwibm90ZSI6IklmIHlvdSBkbyBub3QgY2hvb3NlLCB0aGUgY29tcHV0ZXIgd2lsbCBjaG9vc2Ugb25lIGZvciB5b3UuIFlvdSBkbyBub3QgbmVlZCB0byBzcGVhayBmb3IgdGhpcyBwYXJ0LiIsIm9wdGlvbnMiOlt7InRpdGxlIjoiQmxhY2sgQlgtNDAiLCJpbWciOiJvcHRBIiwiYnVsbGV0cyI6WyIkNzkuOTkiLCJlYXN5IHRvIHNlZSBsYXJnZSBudW1iZXJzIiwiZWFzeSB0byB1c2Ugdm9sdW1lIGNvbnRyb2wiXX0seyJ0aXRsZSI6IkNsYXNzaWMgRFAtMjAiLCJpbWciOiJvcHRCIiwiYnVsbGV0cyI6WyIkOTkuOTkiLCJkaXNwbGF5IGlzIGVhc3kgdG8gcmVhZCIsImZpdmUgZGlmZmVyZW50IGZlYXR1cmVzLCBpbmNsdWRpbmcgdm9pY2UgY29udHJvbCJdfV19LCJzcGVhayI6eyJwcmVwIjo2MCwicmVjIjo2MCwicHJvbXB0IjoiWW91ciBmcmllbmQgaXMgc3VnZ2VzdGluZyBhbm90aGVyIHRlbGVwaG9uZS4gUGVyc3VhZGUgaGltIHRoYXQgdGhlIG9wdGlvbiB5b3UgY2hvc2UgaXMgbW9yZSBzdWl0YWJsZSBieSBjb21wYXJpbmcgdGhlIHR3by4iLCJvdGhlckxhYmVsIjoiWW91ciBGcmllbmQncyBDaG9pY2UiLCJvdGhlciI6eyJ0aXRsZSI6IkdyZXkgQVQtMTAwIiwiaW1nIjoib3B0T3RoZXIiLCJidWxsZXRzIjpbIiQ0MC4wMCIsInBvcnRhYmxlLCBoZWF2eSwgYW5kIHN0dXJkeSIsIjMwLW1pbnV0ZSBiYXR0ZXJ5IGxpZmUiXX19LCJ0aXBzIjp7ImJ1bGxldHMiOlsiU3RydWN0dXJlOiBhY2tub3dsZWRnZSB0aGUgb3RoZXIgcGVyc29uJ3MgY2hvaWNlIFx1MjE5MiBnaXZlIDJcdTIwMTMzIGFkdmFudGFnZXMgb2YgeW91cnMgKGRpcmVjdCBjb21wYXJpc29uKSBcdTIxOTIgd3JhcCB1cC4iLCJDb21wYXJlIHVzaW5nIHRoZSBudW1iZXJzIG9uIHRoZSBjYXJkczogcHJpY2UsIGR1cmF0aW9uLCBjYXBhY2l0eSwgZXhwZXJpZW5jZS4iLCJZb3UgZG8gTk9UIG5lZWQgdG8gc3BlYWsgZHVyaW5nIHRoZSBjaG9vc2luZyBzdGVwIFx1MjAxNCBqdXN0IGNsaWNrIGFuIG9wdGlvbi4iLCJUaGUgc2FtcGxlcyBjaG9vc2UgdGhlIEJsYWNrIEJYLTQwICgkNzkuOTksIGxhcmdlIGVhc3ktdG8tc2VlIG51bWJlcnMsIGVhc3ktdG8tdXNlIHZvbHVtZSBjb250cm9sKS4gSXQgaXMgdGhlIGJlc3QgZml0IGJlY2F1c2UgdGhlIHJlbGF0aXZlIGJvdGggc3RydWdnbGVzIHRvIHNlZSBhbmQgdG8gaGVhcjogdGhlIGJpZyBudW1iZXJzIGhlbHAgdGhlIHBvb3IgZXllc2lnaHQgYW5kIHRoZSBzaW1wbGUgdm9sdW1lIGNvbnRyb2wgaGVscHMgdGhlIHBvb3IgaGVhcmluZywgYWxsIGF0IGEgZmFpciBwcmljZS4gWW91ciBmcmllbmQncyBHcmV5IEFULTEwMCBpcyBjaGVhcCBhdCAkNDAgYnV0IHVzZWxlc3MgaGVyZSwgc21hbGwgYnV0dG9ucywgbm8gdm9sdW1lIGNvbnRyb2wsIGhlYXZ5LCBhbmQgb25seSBhIDMwLW1pbnV0ZSBiYXR0ZXJ5LiBUaGUgQ2xhc3NpYyBEUC0yMCAoJDk5Ljk5LCB2b2ljZSBjb250cm9sKSB3YXMgdGhlIHJ1bm5lci11cCBidXQgY29zdHMgbW9yZSBhbmQgaXMgbW9yZSBjb21wbGljYXRlZC4gSWYgeW91IHByZWZlciB0aGUgRFAtMjAsIHN0cmVzcyBpdHMgdm9pY2UgY29udHJvbCBhbmQgcmVhZGFibGUgZGlzcGxheS4iXSwicGhyYXNlcyI6WyJJIHNlZSB3aHkgeW91IGxpa2VcdTIwMjYsIGJ1dFx1MjAyNiIsIkNvbXBhcmVkIHRvXHUyMDI2LCB0aGlzIG9uZVx1MjAyNiIsIkl0J3MgYmV0dGVyIHZhbHVlOiBcdTIwMjYgdmVyc3VzIFx1MjAyNiIsIklmIHRoZSBnb2FsIGlzXHUyMDI2LCB0aGUgY2hvaWNlIGlzIGNsZWFyLiJdfSwiczYiOiJJIGtub3cgdGhlIEdyZXkgQVQtMTAwIGlzIGNoZWFwLCBvbmx5IGZvcnR5IGRvbGxhcnMsIGJ1dCBwbGVhc2UgbGlzdGVuLCBiZWNhdXNlIGZvciBvdXIgcmVsYXRpdmUgSSByZWFsbHkgdGhpbmsgbXkgY2hvaWNlLCB0aGUgQmxhY2sgQlgtNDAsIGlzIG11Y2ggYmV0dGVyLiBSZW1lbWJlciB0aGUgbW9zdCBpbXBvcnRhbnQgdGhpbmc6IG91ciByZWxhdGl2ZSBjYW5ub3QgaGVhciB3ZWxsIGFuZCBjYW5ub3Qgc2VlIHdlbGwuIFNvIHdlIG5lZWQgYSBwaG9uZSB0aGF0IGhlbHBzIHdpdGggYm90aCBwcm9ibGVtcy4gRmlyc3QsIHNlZWluZy4gVGhlIEJsYWNrIEJYLTQwIGhhcyBiaWcsIGxhcmdlIG51bWJlcnMgdGhhdCBhcmUgdmVyeSBlYXN5IHRvIHNlZS4gWW91ciBHcmV5IEFULTEwMCBoYXMgc21hbGwgYnV0dG9ucywgc28gb3VyIHJlbGF0aXZlIHdpbGwgbm90IGJlIGFibGUgdG8gcmVhZCB0aGVtLiBTZWNvbmQsIGhlYXJpbmcuIFRoZSBCWC00MCBoYXMgYW4gZWFzeSB2b2x1bWUgY29udHJvbCwgc28gdGhleSBjYW4gdHVybiB0aGUgc291bmQgdXAgbG91ZCBhbmQgaGVhciBjbGVhcmx5LiBUaGUgR3JleSBBVC0xMDAgZG9lcyBub3QgaGF2ZSB0aGF0LiBUaGlyZCwgdGhpbmsgYWJvdXQgdGhlIGJhdHRlcnkuIFRoZSBBVC0xMDAgb25seSBoYXMgdGhpcnR5IG1pbnV0ZXMgb2YgYmF0dGVyeSBsaWZlLCB0aGF0IGlzIHRlcnJpYmxlISBJbWFnaW5lIHRoZSBwaG9uZSBkaWVzIGluIHRoZSBtaWRkbGUgb2YgYSBjYWxsLiBUaGUgQlgtNDAgaXMgYSBob21lIHBob25lLCBzbyBpdCBhbHdheXMgd29ya3MuIFllcywgdGhlIEJYLTQwIGNvc3RzIHNldmVudHktbmluZSBkb2xsYXJzLCBtb3JlIHRoYW4gZm9ydHksIGJ1dCBpdCBpcyB3b3J0aCBpdCBiZWNhdXNlIGl0IGFjdHVhbGx5IHNvbHZlcyB0aGUgcHJvYmxlbS4gVGhlIENsYXNzaWMgRFAtMjAgd2FzIG15IHNlY29uZCBjaG9pY2UsIGFuZCBpdHMgdm9pY2UgY29udHJvbCBpcyBuaWNlLCBidXQgaXQgY29zdHMgbW9yZSBhbmQgaXQgaXMgbW9yZSBjb21wbGljYXRlZCB0byB1c2UuIEZvciBiaWcgbnVtYmVycywgbG91ZCB2b2x1bWUsIGFuZCBhIGdvb2QgcHJpY2UsIHRoZSBCbGFjayBCWC00MCBpcyB0aGUgYmVzdCBwaG9uZSBmb3Igb3VyIHJlbGF0aXZlLiBMZXQncyBidXkgdGhhdCBvbmUsIG9rYXk\/IiwiczkiOiJJIHVuZGVyc3RhbmQgdGhlIGFwcGVhbCBvZiB0aGUgR3JleSBBVC0xMDAsIGZvcnR5IGRvbGxhcnMgaXMgY2VydGFpbmx5IGNoZWFwLCBidXQgbGV0IG1lIHB1dCBpdCBiZXNpZGUgbXkgY2hvaWNlLCB0aGUgQmxhY2sgQlgtNDAsIGJlY2F1c2UgZm9yIHRoaXMgcGFydGljdWxhciByZWxhdGl2ZSBJIHRoaW5rIHRoZSBkZWNpc2lvbiBpcyBjbGVhci4gVGhlIGtleSB0aGluZyB3ZSBjYW5ub3QgbG9zZSBzaWdodCBvZiBpcyB0aGF0IG91ciByZWxhdGl2ZSBzdHJ1Z2dsZXMgYm90aCB0byBzZWUgYW5kIHRvIGhlYXIsIHNvIHRoZSBwaG9uZSBoYXMgdG8gdGFja2xlIGJvdGggZGlmZmljdWx0aWVzIGF0IG9uY2UuIE9uIHNpZ2h0LCB0aGUgQmxhY2sgQlgtNDAgd2lucyBlYXNpbHk6IGl0IGhhcyBiaWcsIGJvbGQsIGxhcmdlIG51bWJlcnMgdGhhdCBhcmUgZ2VudWluZWx5IGVhc3kgdG8gcmVhZCwgd2hlcmVhcyB5b3VyIEFULTEwMCBoYXMgc21hbGwsIGZpZGRseSBidXR0b25zIHRoYXQgc29tZW9uZSB3aXRoIHBvb3IgZXllc2lnaHQgd2lsbCBzcXVpbnQgYXQgaG9wZWxlc3NseS4gT24gaGVhcmluZywgdGhlIEJYLTQwIGFnYWluIGNvbWVzIG91dCBhaGVhZCwgdGhhbmtzIHRvIGl0cyBzaW1wbGUgdm9sdW1lIGNvbnRyb2wsIHRoZXkgY2FuIGNyYW5rIHRoZSBzb3VuZCByaWdodCB1cCBhbmQgYWN0dWFsbHkgZm9sbG93IGEgY29udmVyc2F0aW9uLCB3aGljaCB0aGUgQVQtMTAwIG9mZmVycyBubyB3YXkgdG8gZG8uIFRoZW4gdGhlcmUgaXMgcmVsaWFiaWxpdHk6IHRoZSBBVC0xMDAncyB0aGlydHktbWludXRlIGJhdHRlcnkgaXMgZnJhbmtseSBhIGRlYWwtYnJlYWtlciwgaW1hZ2luZSBpdCBkeWluZyBoYWxmd2F5IHRocm91Z2ggYW4gaW1wb3J0YW50IGNhbGwsIHdoaWxlIHRoZSBCWC00MCwgYXMgYSBwbHVnLWluIGhvbWUgcGhvbmUsIHdpbGwgc2ltcGx5IGFsd2F5cyBiZSByZWFkeS4gWWVzLCBhdCBzZXZlbnR5LW5pbmUgZG9sbGFycyBpdCBjb3N0cyBtb3JlIHRoYW4gZm9ydHksIGJ1dCB0aGF0IGV4dHJhIG1vbmV5IGJ1eXMgYSBwaG9uZSB0aGF0IGFjdHVhbGx5IHNvbHZlcyB0aGUgcHJvYmxlbSByYXRoZXIgdGhhbiBvbmUgdGhhdCBsb29rcyBsaWtlIGEgYmFyZ2FpbiBhbmQgaGVscHMgbm9ib2R5LiBJIHdpbGwgYWRtaXQgdGhlIENsYXNzaWMgRFAtMjAgd2FzIGEgY2xvc2UgcnVubmVyLXVwLCBpdHMgdm9pY2UgY29udHJvbCBpcyBjbGV2ZXIsIGJ1dCBpdCBpcyBwcmljaWVyIGFuZCBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIGZvciBzb21lb25lIHdobyBqdXN0IG5lZWRzIHNpbXBsaWNpdHkuIEZvciByZWFkYWJsZSBudW1iZXJzLCBsb3VkIGNsZWFyIHZvbHVtZSBhbmQgc29saWQgdmFsdWUsIHRoZSBCbGFjayBCWC00MCBpcyB0aGUgcmlnaHQgY2FsbC4gU2hhbGwgd2UgZ2V0IGl0PyJ9LHsiayI6InQ2IiwibnVtIjo2LCJ0eXBlRW4iOiJEZWFsaW5nIHdpdGggYSBEaWZmaWN1bHQgU2l0dWF0aW9uIiwicHJlcCI6NjAsInJlYyI6NjAsInByb21wdCI6IllvdXIgMTUteWVhci1vbGQgZnJpZW5kLCBKb2huLCB3YW50cyB0byBnbyB0byBhbiBvdXRkb29yIG11c2ljIGZlc3RpdmFsIHRvIHNlZSBoaXMgZmF2b3VyaXRlIG11c2ljaWFuLiBIZSBoYXMgc2F2ZWQgdXAgbW9uZXkgdG8gYnV5IGEgdGlja2V0LiBZb3VyIGZyaWVuZCdzIG1vdGhlciBkb2VzIG5vdCB3YW50IGhpbSB0byBnbyBiZWNhdXNlIHNoZSBpcyB3b3JyaWVkIHRoYXQgaGUncyB0b28geW91bmcgdG8gZ28gYnkgaGltc2VsZi4iLCJjaG9vc2VPbmUiOlsiVGFsayB0byBKb2huLiBFeHBsYWluIHdoeSBoZSBzaG91bGQgbm90IGdvIHRvIHRoZSBtdXNpYyBmZXN0aXZhbC4iLCJUYWxrIHRvIEpvaG4ncyBtb3RoZXIuIEV4cGxhaW4gd2h5IHNoZSBzaG91bGQgbGV0IEpvaG4gZ28gdG8gdGhlIG11c2ljIGZlc3RpdmFsLiJdLCJpbWciOm51bGwsInRpcHMiOnsiYnVsbGV0cyI6WyJQaWNrIE9ORSBvcHRpb24gKEVJVEhFUiBvciBPUikgaW1tZWRpYXRlbHkgXHUyMDE0IGRvbid0IHdhc3RlIHRpbWUgZGVjaWRpbmcuIiwiU3RydWN0dXJlOiBvcGVuIHBvbGl0ZWx5IFx1MjE5MiBleHBsYWluIHlvdXIgcmVhc29ucy9ldmlkZW5jZSBcdTIxOTIgcHJvcG9zZSBhIHNvbHV0aW9uIFx1MjE5MiBzbW9vdGggdGhpbmdzIG92ZXIuIiwiU3RheSBjYWxtIGFuZCByZXNwZWN0ZnVsIFx1MjAxNCBob3cgeW91IGhhbmRsZSB0aGUgc2l0dWF0aW9uIGlzIHBhcnQgb2Ygd2hhdCdzIGJlaW5nIHJhdGVkIChMaXN0ZW5hYmlsaXR5KS4iLCJUaGUgc2FtcGxlcyBwaWNrIG9wdGlvbiAyIC0gdGFsayB0byBKb2huJ3MgbW90aGVyIGFuZCBnZW50bHkgcGVyc3VhZGUgaGVyIHRvIGxldCBKb2huIGdvLiBSZWFzb25pbmc6IEpvaG4gc2F2ZWQgdXAgaGlzIG93biBtb25leSwgd2hpY2ggc2hvd3MgcmVhbCByZXNwb25zaWJpbGl0eSBhbmQgaG93IG11Y2ggaXQgbWVhbnMgdG8gaGltOyBzZWVpbmcgaGlzIGZhdm91cml0ZSBtdXNpY2lhbiBsaXZlIGlzIGEgc3BlY2lhbCwgb25jZS1pbi1hLWxpZmV0aW1lIG1lbW9yeTsgYW5kIGhlciBzYWZldHkgd29ycmllcyBjYW4gYmUgc29sdmVkIHdpdGggc2Vuc2libGUgcnVsZXMuIE9mZmVyIGNvbmNyZXRlIGNvbXByb21pc2VzLCBoZSBnb2VzIHdpdGggYSB0cnVzdGVkIGZyaWVuZCBvciBncm91cCwga2VlcHMgaGlzIHBob25lIGNoYXJnZWQgYW5kIGNoZWNrcyBpbiwgc2hhcmVzIGhpcyBsb2NhdGlvbiwgYW5kIGFncmVlcyBhIGZpcm0gcGljay11cCB0aW1lIGFuZCBwbGFjZS4gUmVhc3N1cmUgaGVyIHRoYXQgSm9obiBpcyBtYXR1cmUgYW5kIGNhbiBiZSB0cnVzdGVkLiJdLCJwaHJhc2VzIjpbIkNvdWxkIEkganVtcCBpbiBmb3IgYSBtb21lbnQ\/IiwiSSB1bmRlcnN0YW5kIHlvdXIgY29uY2VybiwgYnV0XHUyMDI2IiwiSG93IGFib3V0IHdlXHUyMDI2PyIsIkknbGwgdGFrZSByZXNwb25zaWJpbGl0eSBmb3IgdGhpcy4iXX0sInM2IjoiSGkgTXJzLiBNaWxsZXIsIEkgd2FudGVkIHRvIHRhbGsgdG8geW91IGFib3V0IHRoZSBtdXNpYyBmZXN0aXZhbCwgYmVjYXVzZSBJIGtub3cgeW91IGFyZSB3b3JyaWVkIGFib3V0IEpvaG4gZ29pbmcuIEkgY29tcGxldGVseSB1bmRlcnN0YW5kLCB5b3UgYXJlIGhpcyBtb20sIGFuZCB5b3Ugd2FudCBoaW0gdG8gYmUgc2FmZS4gQnV0IHBsZWFzZSwgbGV0IG1lIHNoYXJlIHdoeSBJIHRoaW5rIHlvdSBjb3VsZCBsZXQgaGltIGdvLiBGaXJzdCwgdGhpbmsgYWJvdXQgaG93IHJlc3BvbnNpYmxlIEpvaG4gaXMuIEhlIHNhdmVkIHVwIGhpcyBvd24gbW9uZXkgZm9yIGEgbG9uZyB0aW1lIHRvIGJ1eSB0aGUgdGlja2V0LiBUaGF0IHNob3dzIGhlIGlzIHNlcmlvdXMgYW5kIGhlIGNhbiBwbGFuIGFuZCB3YWl0IGZvciBzb21ldGhpbmcgaGUgd2FudHMsIHRoYXQgaXMgdmVyeSBtYXR1cmUgZm9yIGZpZnRlZW4uIFNlY29uZCwgdGhpcyBpcyBoaXMgZmF2b3VyaXRlIG11c2ljaWFuLiBGb3IgYSB5b3VuZyBwZXJzb24sIHNlZWluZyB5b3VyIGhlcm8gcGxheSBsaXZlIGlzIGEgaHVnZSwgc3BlY2lhbCBtZW1vcnkgdGhhdCBoZSB3aWxsIGtlZXAgZm9yZXZlci4gVGhpcmQsIEkga25vdyB5b3VyIHJlYWwgd29ycnkgaXMgc2FmZXR5LCBzbyBsZXQncyBtYWtlIGEgc2FmZSBwbGFuIHRvZ2V0aGVyLiBIZSBkb2VzIG5vdCBoYXZlIHRvIGdvIGFsb25lLCBoZSBjYW4gZ28gd2l0aCBhIGdyb3VwIG9mIGZyaWVuZHMuIEhlIHdpbGwga2VlcCBoaXMgcGhvbmUgY2hhcmdlZCwgY2FsbCB5b3UgYW5kIHRleHQgeW91IGR1cmluZyB0aGUgZGF5LCBhbmQgZXZlbiBzaGFyZSBoaXMgbG9jYXRpb24gc28geW91IGFsd2F5cyBrbm93IHdoZXJlIGhlIGlzLiBBbmQgd2UgY2FuIGFncmVlIG9uIGEgdGltZSBhbmQgcGxhY2Ugd2hlcmUgeW91IHBpY2sgaGltIHVwLCBzbyBoZSBpcyBub3Qgb3V0IGxhdGUgYnkgaGltc2VsZi4gSWYgd2Ugc2V0IHRoZXNlIHJ1bGVzLCBJIHRoaW5rIGhlIGNhbiBiZSBzYWZlIGFuZCBzdGlsbCBoYXZlIGhpcyBzcGVjaWFsIGRheS4gSGUgaXMgYSBnb29kLCBzZW5zaWJsZSBib3kuIFdpbGwgeW91IHRoaW5rIGFib3V0IGl0PyIsInM5IjoiSGkgTXJzLiBNaWxsZXIsIEkgd2FzIGhvcGluZyB3ZSBjb3VsZCB0YWxrIGFib3V0IHRoZSBtdXNpYyBmZXN0aXZhbCwgYmVjYXVzZSBJIGtub3cgdGhlIGlkZWEgb2YgSm9obiBnb2luZyBoYXMgeW91IHdvcnJpZWQsIGFuZCBJIGNvbXBsZXRlbHkgZ2V0IGl0LCB5b3UgYXJlIGhpcyBtdW0sIGFuZCBoaXMgc2FmZXR5IGNvbWVzIGZpcnN0LiBCdXQgSSB3b3VsZCBsb3ZlIHRvIGdlbnRseSBtYWtlIHRoZSBjYXNlIGZvciBsZXR0aW5nIGhpbSBnby4gU3RhcnQgd2l0aCB3aGF0IHRoaXMgdGlja2V0IHJlcHJlc2VudHM6IEpvaG4gc2F2ZWQgdXAgaGlzIG93biBtb25leSwgcGF0aWVudGx5LCBvdmVyIGEgbG9uZyB0aW1lLCB0byBidXkgaXQuIFRoYXQgaXMgbm90IHRoZSBiZWhhdmlvdXIgb2YgYSByZWNrbGVzcyBraWQ7IGl0IHNob3dzIHJlYWwgcmVzcG9uc2liaWxpdHksIHBsYW5uaW5nIGFuZCBzZWxmLWRpc2NpcGxpbmUsIHdoaWNoIGlzIGhvbmVzdGx5IHF1aXRlIGltcHJlc3NpdmUgZm9yIGZpZnRlZW4uIE9uIHRvcCBvZiB0aGF0LCB0aGlzIGlzIGhpcyBhYnNvbHV0ZSBmYXZvdXJpdGUgbXVzaWNpYW4sIGFuZCBzZWVpbmcgeW91ciBoZXJvIHBlcmZvcm0gbGl2ZSBhdCB0aGF0IGFnZSBiZWNvbWVzIG9uZSBvZiB0aG9zZSBnb2xkZW4gbWVtb3JpZXMgeW91IGNhcnJ5IGZvciB0aGUgcmVzdCBvZiB5b3VyIGxpZmUsIGl0IHdvdWxkIG1lYW4gdGhlIHdvcmxkIHRvIGhpbS4gTm93LCBJIGtub3cgdGhlIGhlYXJ0IG9mIHlvdXIgY29uY2VybiBpcyBzYWZldHksIHNvIHJhdGhlciB0aGFuIGRpc21pc3MgaXQsIGxldCdzIGRlc2lnbiBhcm91bmQgaXQgdG9nZXRoZXIuIEhlIGRvZXMgbm90IG5lZWQgdG8gZ28gYWxvbmUsIGhlIGNhbiBnbyB3aXRoIGEgdHJ1c3RlZCBncm91cCBvZiBmcmllbmRzLiBIZSBrZWVwcyBoaXMgcGhvbmUgZnVsbHkgY2hhcmdlZCwgY2hlY2tzIGluIHdpdGggeW91IGJ5IGNhbGwgb3IgdGV4dCB0aHJvdWdoIHRoZSBkYXksIGFuZCBzaGFyZXMgaGlzIGxpdmUgbG9jYXRpb24gc28geW91IGFsd2F5cyBrbm93IGV4YWN0bHkgd2hlcmUgaGUgaXMuIEFuZCB3ZSBhZ3JlZSBpbiBhZHZhbmNlIG9uIGEgZmlybSB0aW1lIGFuZCBwbGFjZSBmb3IgeW91IHRvIGNvbGxlY3QgaGltLCBzbyBoZSBpcyBuZXZlciB3YW5kZXJpbmcgYXJvdW5kIGxhdGUgb24gaGlzIG93bi4gUHV0IHNlbnNpYmxlIHJ1bGVzIGxpa2UgdGhhdCBpbiBwbGFjZSwgYW5kIEkgZ2VudWluZWx5IGJlbGlldmUgaGUgY2FuIGJlIGJvdGggc2FmZSBhbmQgaGFwcHkuIEpvaG4gaXMgYSBsZXZlbC1oZWFkZWQsIHRydXN0d29ydGh5IGJveSwgd291bGQgeW91IGJlIHdpbGxpbmcgdG8gY29uc2lkZXIgaXQ\/In0seyJrIjoidDciLCJudW0iOjcsInR5cGVFbiI6IkV4cHJlc3NpbmcgT3BpbmlvbnMiLCJwcmVwIjozMCwicmVjIjo5MCwicHJvbXB0IjoiRG8geW91IHRoaW5rIHRoYXQgY29tcGFuaWVzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGFkdmVydGlzZSB0aGVpciBwcm9kdWN0cyBhbmQgc2VydmljZXMgaW4gcHVibGljIHNjaG9vbHM\/IEV4cGxhaW4geW91ciByZWFzb25zLiIsInByb21wdExlYWQiOiJBbnN3ZXIgdGhlIGZvbGxvd2luZyBxdWVzdGlvbi4iLCJpbWciOm51bGwsInRpcHMiOnsiYnVsbGV0cyI6WyJTdGF0ZSB5b3VyIHBvc2l0aW9uIGNsZWFybHkgaW4gdGhlIGZpcnN0IHNlbnRlbmNlIChwaWNraW5nIG9uZSBzaWRlIGlzIGVhc2llciB0byBkZXZlbG9wIHRoYW4gc3RheWluZyBuZXV0cmFsKS4iLCJHaXZlIDJcdTIwMTMzIHJlYXNvbnMsIGVhY2ggZGV2ZWxvcGVkIG92ZXIgMlx1MjAxMzMgc2VudGVuY2VzIHdpdGggYW4gZXhhbXBsZTsgOTAgc2Vjb25kcyBpcyBsb25nIFx1MjAxNCBkb24ndCBzdG9wIGVhcmx5LiIsIkFja25vd2xlZGdlIHRoZSBvdGhlciBzaWRlIGluIG9uZSBzZW50ZW5jZSAoVGhhdCBzYWlkLCBcdTIwMjYpIHRoZW4gY29uY2x1ZGUgXHUyMDE0IGl0IHNob3dzIGJhbGFuY2VkIHRoaW5raW5nLiIsIlRoZSBzYW1wbGVzIGFyZ3VlIE5PIC0gY29tcGFuaWVzIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBhZHZlcnRpc2UgaW4gcHVibGljIHNjaG9vbHMuIFJlYXNvbnM6IHNjaG9vbCBzaG91bGQgYmUgYSBwbGFjZSBmb3IgbGVhcm5pbmcsIG5vdCBhIG1hcmtldHBsYWNlLCBhbmQgY29uc3RhbnQgYWRzIGRpc3RyYWN0IGZyb20gZWR1Y2F0aW9uOyBjaGlsZHJlbiBhcmUgaW1wcmVzc2lvbmFibGUgYW5kIGNhbm5vdCBqdWRnZSBhZHZlcnRpc2luZyBjcml0aWNhbGx5LCBzbyB0YXJnZXRpbmcgdGhlbSBpcyB1bmZhaXI7IGFuZCBtdWNoIG9mIHdoYXQgZ2V0cyBhZHZlcnRpc2VkIChqdW5rIGZvb2QsIGV4cGVuc2l2ZSBnYWRnZXRzKSBoYXJtcyBraWRzJyBoZWFsdGggb3IgbWFrZXMgcG9vcmVyIHN0dWRlbnRzIGZlZWwgbGVmdCBvdXQuIENvbmNlZGUgdGhhdCBzY2hvb2xzIGRvIG5lZWQgZXh0cmEgbW9uZXksIHRoZW4gYXJndWUgaXQgc2hvdWxkIGNvbWUgZnJvbSBwcm9wZXIgZ292ZXJubWVudCBmdW5kaW5nIG9yIGV0aGljYWwgc3BvbnNvcnMsIG5vdCBmcm9tIG1hcmtldGluZyB0byBjaGlsZHJlbi4iXSwicGhyYXNlcyI6WyJJZiBJIGhhZCB0byBjaG9vc2UsIEknZCBzYXlcdTIwMjYiLCJNeSBtYWluIHJlYXNvbiBpc1x1MjAyNiIsIkZvciBleGFtcGxlLCBcdTIwMjYiLCJUaGF0IHNhaWQsIFx1MjAyNiIsIkFsbCB0aGluZ3MgY29uc2lkZXJlZCwgXHUyMDI2Il19LCJzNiI6Ik5vLCBJIGRvIG5vdCB0aGluayBjb21wYW5pZXMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYWR2ZXJ0aXNlIHRoZWlyIHByb2R1Y3RzIGluIHB1YmxpYyBzY2hvb2xzLiBMZXQgbWUgZXhwbGFpbiBteSByZWFzb25zLiBNeSBmaXJzdCByZWFzb24gaXMgdGhhdCBhIHNjaG9vbCBpcyBhIHBsYWNlIGZvciBsZWFybmluZywgbm90IGEgcGxhY2UgZm9yIHNob3BwaW5nLiBDaGlsZHJlbiBnbyB0byBzY2hvb2wgdG8gc3R1ZHkgYW5kIHRvIGdyb3csIGFuZCBpZiB0aGVyZSBhcmUgYWR2ZXJ0aXNlbWVudHMgZXZlcnl3aGVyZSwgb24gdGhlIHdhbGxzLCBvbiB0aGUgYnVzZXMsIGluIHRoZSBib29rcywgaXQgZGlzdHJhY3RzIHRoZW0gZnJvbSB0aGVpciBlZHVjYXRpb24uIFNjaG9vbCBzaG91bGQgYmUgcHJvdGVjdGVkIGZyb20gYWxsIHRoaXMgc2VsbGluZy4gTXkgc2Vjb25kIHJlYXNvbiBpcyB0aGF0IGNoaWxkcmVuIGFyZSB5b3VuZyBhbmQgZWFzaWx5IGluZmx1ZW5jZWQuIEFkdWx0cyBjYW4gbG9vayBhdCBhbiBhZHZlcnRpc2VtZW50IGFuZCB0aGluaywgJ1RoaXMgaXMganVzdCBhIGNvbXBhbnkgdHJ5aW5nIHRvIHRha2UgbXkgbW9uZXkuJyBCdXQgYSBzbWFsbCBjaGlsZCBjYW5ub3QgdGhpbmsgbGlrZSB0aGF0LiBUaGV5IGp1c3QgYmVsaWV2ZSBpdCBhbmQgd2FudCB0aGUgcHJvZHVjdC4gU28gaXQgaXMgbm90IGZhaXIgdG8gdGFyZ2V0IGNoaWxkcmVuIHdpdGggY2xldmVyIGFkdmVydGlzaW5nLCBiZWNhdXNlIHRoZXkgY2Fubm90IGRlZmVuZCB0aGVtc2VsdmVzLiBNeSB0aGlyZCByZWFzb24gaXMgYWJvdXQgd2hhdCB0aGV5IGFkdmVydGlzZS4gVXN1YWxseSBpdCBpcyBqdW5rIGZvb2QsIHN1Z2FyeSBkcmlua3MsIG9yIGV4cGVuc2l2ZSB0aGluZ3MuIEp1bmsgZm9vZCBpcyBiYWQgZm9yIGNoaWxkcmVuJ3MgaGVhbHRoLCBhbmQgZXhwZW5zaXZlIHRoaW5ncyBtYWtlIHBvb3Igc3R1ZGVudHMgZmVlbCBiYWQgYmVjYXVzZSB0aGVpciBmYW1pbHkgY2Fubm90IGJ1eSB0aGVtLiBOb3csIEkga25vdyBzY2hvb2xzIG5lZWQgbW9uZXksIHRoYXQgaXMgdHJ1ZS4gQnV0IHRoZSBhbnN3ZXIgaXMgbm90IHRvIHNlbGwgb3VyIGNoaWxkcmVuIHRvIGNvbXBhbmllcy4gVGhlIGdvdmVybm1lbnQgc2hvdWxkIGdpdmUgc2Nob29scyBlbm91Z2ggbW9uZXksIG9yIHNjaG9vbHMgY2FuIGZpbmQgc3BvbnNvcnMgd2hvIGhlbHAgd2l0aG91dCBhZHZlcnRpc2luZy4gU28gZm9yIG1lLCB0aGUgYW5zd2VyIGlzIGNsZWFybHkgbm8uIiwiczkiOiJNeSBhbnN3ZXIgaXMgYSBmaXJtIG5vOiBJIGRvIG5vdCBiZWxpZXZlIGNvbXBhbmllcyBzaG91bGQgYmUgYWxsb3dlZCB0byBhZHZlcnRpc2UgdGhlaXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzIGluIHB1YmxpYyBzY2hvb2xzLCBhbmQgSSBmZWVsIHF1aXRlIHN0cm9uZ2x5IGFib3V0IGl0LiBNeSBmaXJzdCByZWFzb24gaXMgb25lIG9mIHByaW5jaXBsZS4gQSBzY2hvb2wgaXMgZnVuZGFtZW50YWxseSBhIHBsYWNlIGZvciBsZWFybmluZyBhbmQgcGVyc29uYWwgZ3Jvd3RoLCBub3QgYSBtYXJrZXRwbGFjZSwgYW5kIHRoZSBtb21lbnQgeW91IGZpbGwgaXQgd2l0aCBhZHZlcnRpc2luZywgb24gdGhlIHdhbGxzLCB0aGUgbG9ja2VycywgdGhlIGJ1c2VzLCBldmVuIHRoZSB0ZXh0Ym9va3MsIHlvdSBibHVyIHRoYXQgbGluZSBhbmQgdHVybiBhIGxlYXJuaW5nIGVudmlyb25tZW50IGludG8gYSBzYWxlcyBmbG9vci4gQ2hpbGRyZW4gZGVzZXJ2ZSBhIHNwYWNlIHRoYXQgaXMgcHJvdGVjdGVkIGZyb20gY29uc3RhbnQgY29tbWVyY2lhbCBwcmVzc3VyZS4gTXkgc2Vjb25kLCBhbmQgc3Ryb25nZXN0LCByZWFzb24gaXMgdGhhdCBjaGlsZHJlbiBhcmUgdW5pcXVlbHkgdnVsbmVyYWJsZSB0byBhZHZlcnRpc2luZy4gQW4gYWR1bHQgY2FuIGxvb2sgYXQgYW4gYWQgYW5kIG1lbnRhbGx5IG5vdGUgdGhhdCBhIGNvbXBhbnkgaXMgc2ltcGx5IHRyeWluZyB0byBzZWxsIHRoZW0gc29tZXRoaW5nLCBidXQgYSB5b3VuZyBjaGlsZCBoYXMgbm90IHlldCBkZXZlbG9wZWQgdGhhdCBjcml0aWNhbCBmaWx0ZXI7IHRoZXkgdGVuZCB0byB0YWtlIHRoZSBtZXNzYWdlIGF0IGZhY2UgdmFsdWUgYW5kIHNpbXBseSB3YW50IHdoYXRldmVyIGlzIGJlaW5nIHB1c2hlZC4gRGVsaWJlcmF0ZWx5IHRhcmdldGluZyBhbiBhdWRpZW5jZSB0aGF0IGNhbm5vdCBkZWZlbmQgaXRzZWxmIHN0cmlrZXMgbWUgYXMgZnVuZGFtZW50YWxseSB1bmZhaXIuIFRoaXJkLCBjb25zaWRlciB3aGF0IHR5cGljYWxseSBnZXRzIG1hcmtldGVkLCBzdWdhcnkgc25hY2tzLCBmYXN0IGZvb2QsIGV4cGVuc2l2ZSBnYWRnZXRzLCBub25lIG9mIHdoaWNoIHNlcnZlIGNoaWxkcmVuIHdlbGw6IHRoZSBqdW5rIGZvb2QgaGFybXMgdGhlaXIgaGVhbHRoLCBhbmQgdGhlIHByaWNleSBpdGVtcyBxdWlldGx5IGh1bWlsaWF0ZSBzdHVkZW50cyB3aG9zZSBmYW1pbGllcyBjYW5ub3QgYWZmb3JkIHRoZW0sIGRlZXBlbmluZyB0aGUgZ2FwIGJldHdlZW4gcmljaCBhbmQgcG9vciBraWRzLiBOb3csIEkgd2lsbCByZWFkaWx5IGNvbmNlZGUgdGhlIGNvdW50ZXItYXJndW1lbnQ6IHNjaG9vbHMgYXJlIGNocm9uaWNhbGx5IHNob3J0IG9mIG1vbmV5LCBhbmQgY29ycG9yYXRlIGNhc2ggaXMgdGVtcHRpbmcuIEJ1dCB0aGUgc29sdXRpb24gY2Fubm90IGJlIHRvIHNlbGwgYWNjZXNzIHRvIG91ciBjaGlsZHJlbi4gUHJvcGVyIGdvdmVybm1lbnQgZnVuZGluZywgb3IgZXRoaWNhbCBzcG9uc29ycyB3aG8gZ2l2ZSBzdXBwb3J0IHdpdGhvdXQgcGxhc3RlcmluZyB0aGVpciBsb2dvcyBldmVyeXdoZXJlLCBhcmUgZmFyIGJldHRlciBhbnN3ZXJzLiBPbiBiYWxhbmNlLCB0aGUgY2xhc3Nyb29tIHNob3VsZCBzdGF5IG9mZi1saW1pdHMgdG8gYWR2ZXJ0aXNlcnMuIn0seyJrIjoidDgiLCJudW0iOjgsInR5cGVFbiI6IkRlc2NyaWJpbmcgYW4gVW51c3VhbCBTaXR1YXRpb24iLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiWW91IGFyZSB2aXNpdGluZyBhIHRveSBmYWN0b3J5IHRoYXQgaGFzIGFuIGF1dG9tYXRlZCBhc3NlbWJseSBsaW5lLiBDYWxsIHlvdXIgZnJpZW5kIEppbS4gRGVzY3JpYmUgaW4gZGV0YWlsIHdoYXQgeW91IHNlZSBhbmQgYXNrIEppbSBpZiBoZSB3b3VsZCBsaWtlIHRvIGNvbWUgYW5kIHNlZSBpdC4iLCJpbWciOiJ1bnVzdWFsIiwidGlwcyI6eyJidWxsZXRzIjpbIlRoaXMgaXMgYSBQSE9ORSBDQUxMOiBncmVldCB0aGUgcmlnaHQgcGVyc29uICh0aGUgcG9saWNlIC8geW91ciBmcmllbmQpLCB0aGVuIHNheSB3aGVyZSB5b3UgYXJlLiIsIkRlc2NyaWJlIGZyb20gZ2VuZXJhbCB0byBzcGVjaWZpYzsgdGhlIHBpY3R1cmUgaXMgbWVhbnQgdG8gYmUgc3RyYW5nZSBcdTIwMTQganVzdCBkZXNjcmliZSB3aGF0IHlvdSBzZWUsIHVzaW5nICdJdCBsb29rcyBsaWtlIC8gYXMgaWZcdTIwMjYnLiIsIkVuZCB3aXRoIGEgcmVxdWVzdCBmb3IgYWN0aW9uIChzZW5kIGEgcGF0cm9sIC8gYXNrIHdoZXJlIHRvIGJ1eSkuIiwiVGhpcyBpcyBhIHBob25lIGNhbGwgdG8geW91ciBmcmllbmQgSmltIGFib3V0IGFuIGFtYXppbmcgYXV0b21hdGVkIHRveSBmYWN0b3J5LiBEZXNjcmliZSB0aGUgYWN0dWFsIHBpY3R1cmU6IHJvYm90aWMgYXJtcyBvbiBhbiBhc3NlbWJseSBsaW5lIGFyZSBidWlsZGluZyB0b3lzIGVudGlyZWx5IGJ5IHRoZW1zZWx2ZXMuIEEgbGFyZ2UgcmVkIHJvYm90aWMgYXJtIHdpdGggYSBzaGlueSBzaWx2ZXIgYmFsbC1qb2ludCBpcyBwaWVjaW5nIHRvZ2V0aGVyIGEgbGl0dGxlIG9yYW5nZS1hbmQtcmVkIHRveSBhY3Rpb24gZmlndXJlIHRoYXQgc3RhbmRzIG9uIGEgbW92aW5nIGNvbnZleW9yIGJlbHQsIHdoaWxlIGEgYmx1ZSByb2JvdGljIGFybSB3aXRoIGdsb3dpbmcgZ3JlZW4gbGlnaHRzIGFuZCBhbm90aGVyIG1lY2hhbmljYWwgdG9vbCBoZWxwIGZyb20gdGhlIHNpZGUuIFNtYWxsIGJyb3duIHRveSBwYXJ0cyBhcmUgc2NhdHRlcmVkIGFsb25nIHRoZSBiZWx0LCBhbmQgYmVsb3cgc2l0cyBhIGJpZyBiaW4gb3ZlcmZsb3dpbmcgd2l0aCBmaW5pc2hlZCBvcmFuZ2UgdG95IHBpZWNlcy4gSW4gdGhlIGJhY2tncm91bmQgeW91IGNhbiBtYWtlIG91dCB0aGUgc2hhZG93eSBzaWxob3VldHRlcyBvZiBtb3JlIG1hY2hpbmVzLiBFbmQgYnkgYXNraW5nIEppbSBpZiBoZSB3b3VsZCBsaWtlIHRvIGNvbWUgYW5kIHNlZSBpdC4iXSwicGhyYXNlcyI6WyJJJ20gY2FsbGluZyB0byByZXBvcnRcdTIwMjYiLCJQaWN0dXJlIHRoaXM6IFx1MjAyNiIsIkl0IGxvb2tzIGFzIGlmXHUyMDI2IiwiQ291bGQgeW91IHNlbmRcdTIwMjYgLyBEbyB5b3Uga25vdyB3aGVyZVx1MjAyNj8iXX0sInM2IjoiSGV5IEppbSwgaXQncyBtZSEgWW91IHdpbGwgbm90IGJlbGlldmUgd2hlcmUgSSBhbSByaWdodCBub3csIEkgYW0gaW5zaWRlIGEgdG95IGZhY3RvcnksIGFuZCBpdCBpcyBhbWF6aW5nISBJdCBpcyBhbGwgYXV0b21hdGljLCB3aXRoIHJvYm90cywgYW5kIHlvdSBoYXZlIHRvIHNlZSB0aGlzLiBPa2F5LCBsZXQgbWUgZGVzY3JpYmUgaXQgZm9yIHlvdS4gSW4gZnJvbnQgb2YgbWUsIHRoZXJlIGlzIGEgYmlnIG1hY2hpbmUsIGFuIGFzc2VtYmx5IGxpbmUsIGFuZCBpdCBpcyBidWlsZGluZyB0b3lzIGFsbCBieSBpdHNlbGYsIHdpdGggbm8gcGVvcGxlISBUaGVyZSBpcyBhIGh1Z2UgcmVkIHJvYm90aWMgYXJtLCBhbmQgaXQgaGFzIGEgc2hpbnkgc2lsdmVyIGJhbGwgam9pbnQsIGxpa2UgYSBzaG91bGRlci4gVGhpcyByZWQgYXJtIGlzIHBpY2tpbmcgdXAgcGFydHMgYW5kIHB1dHRpbmcgdG9nZXRoZXIgYSBsaXR0bGUgdG95IGFjdGlvbiBmaWd1cmUuIFRoZSB0b3kgaXMgb3JhbmdlIGFuZCByZWQsIGxpa2UgYSBzbWFsbCByb2JvdCBtYW4sIGFuZCBpdCBpcyBzdGFuZGluZyBvbiBhIG1vdmluZyBiZWx0LCBhIGNvbnZleW9yIGJlbHQuIE9uIHRoZSBvdGhlciBzaWRlLCB0aGVyZSBpcyBhIGJsdWUgcm9ib3RpYyBhcm0gd2l0aCBncmVlbiBsaWdodHMgdGhhdCBhcmUgZ2xvd2luZywgYW5kIGl0IGlzIGhlbHBpbmcgdG8gYnVpbGQgdGhlIHRveSB0b28uIE9uIHRoZSBiZWx0LCBJIGNhbiBzZWUgc21hbGwgYnJvd24gdG95IHBpZWNlcyBldmVyeXdoZXJlLiBBbmQgdW5kZXIgdGhlIG1hY2hpbmUsIHRoZXJlIGlzIGEgYmlnIGJveCwgYW5kIGl0IGlzIGNvbXBsZXRlbHkgZnVsbCBvZiBmaW5pc2hlZCBvcmFuZ2UgdG95IHBhcnRzISBJbiB0aGUgYmFja2dyb3VuZCwgSSBjYW4gc2VlIHRoZSBzaGFkb3dzIG9mIGV2ZW4gbW9yZSBtYWNoaW5lcyB3b3JraW5nLiBJdCBpcyBsaWtlIHNvbWV0aGluZyBmcm9tIGEgc2NpZW5jZS1maWN0aW9uIG1vdmllISBJdCBpcyBzbyBjb29sLiBTbyBKaW0sIGRvIHlvdSB3YW50IHRvIGNvbWUgYW5kIHNlZSBpdCB3aXRoIG1lPyBJIHRoaW5rIHlvdSB3aWxsIGxvdmUgaXQuIENvbWUgcXVpY2tseSEiLCJzOSI6IkppbSwgaXQncyBtZSwgYW5kIHlvdSBob25lc3RseSBoYXZlIHRvIGhlYXIgd2hlcmUgSSBhbSBzdGFuZGluZyByaWdodCBub3csIEkgYW0gaW5zaWRlIGEgdG95IGZhY3RvcnksIGFuZCB0aGUgd2hvbGUgdGhpbmcgaXMgYXV0b21hdGVkLiBJdCBpcyBsaWtlIHN0ZXBwaW5nIGludG8gdGhlIGZ1dHVyZSwgYW5kIEkgaGFkIHRvIGNhbGwgeW91LiBMZXQgbWUgcGFpbnQgdGhlIHBpY3R1cmUuIFJpZ2h0IGluIGZyb250IG9mIG1lIGlzIGEgZnVsbCBhc3NlbWJseSBsaW5lIGJ1aWxkaW5nIHRveXMgZW50aXJlbHkgYnkgaXRzZWxmLCBub3QgYSBzaW5nbGUgaHVtYW4gaGFuZCBpbnZvbHZlZC4gVGhlIHN0YXIgb2YgdGhlIHNob3cgaXMgYW4gZW5vcm1vdXMgcmVkIHJvYm90aWMgYXJtIHdpdGggYSBnbGVhbWluZyBzaWx2ZXIgYmFsbC1qb2ludCwgbGlrZSBhIGdpYW50IG1ldGFsIHNob3VsZGVyLCBhbmQgaXQgaXMgZGVsaWNhdGVseSBwaWVjaW5nIHRvZ2V0aGVyIGEgbGl0dGxlIGFjdGlvbiBmaWd1cmUsIGFuIG9yYW5nZS1hbmQtcmVkIHRveSB0aGF0IGxvb2tzIGxpa2UgYSBzbWFsbCByb2JvdCBtYW4sIHN0YW5kaW5nIHRvIGF0dGVudGlvbiBvbiBhIG1vdmluZyBjb252ZXlvciBiZWx0LiBJdCBpcyBub3Qgd29ya2luZyBhbG9uZSwgZWl0aGVyOiBmcm9tIHRoZSBzaWRlLCBhIHNsZWVrIGJsdWUgcm9ib3RpYyBhcm0gc3R1ZGRlZCB3aXRoIGdsb3dpbmcgZ3JlZW4gbGlnaHRzIGxlYW5zIGluIHRvIGhlbHAsIGFsb25nIHdpdGggYW5vdGhlciBtZWNoYW5pY2FsIHRvb2wsIGFsbCBvZiB0aGVtIGNob3Jlb2dyYXBoZWQgdG9nZXRoZXIgbGlrZSBzb21lIGtpbmQgb2Ygcm9ib3QgYmFsbGV0LiBTY2F0dGVyZWQgYWxvbmcgdGhlIGJlbHQgYXJlIGRvemVucyBvZiBsaXR0bGUgYnJvd24gdG95IGNvbXBvbmVudHMgd2FpdGluZyB0byBiZSBhc3NlbWJsZWQsIGFuZCBkaXJlY3RseSBiZWxvdyB0aGUgbWFjaGluZSBzaXRzIGEgYmlnIGJpbiBhYnNvbHV0ZWx5IG92ZXJmbG93aW5nIHdpdGggZmluaXNoZWQgb3JhbmdlIHBhcnRzLiBBbmQgaWYgSSBwZWVyIGludG8gdGhlIGJhY2tncm91bmQsIEkgY2FuIGp1c3QgbWFrZSBvdXQgdGhlIHNoYWRvd3kgc2lsaG91ZXR0ZXMgb2YgZXZlbiBtb3JlIG1hY2hpbmVzIGh1bW1pbmcgYXdheSBpbiB0aGUgZ2xvb20uIEhvbmVzdGx5LCBpdCBpcyBsaWtlIGEgc2NlbmUgc3RyYWlnaHQgb3V0IG9mIGEgc2NpZW5jZS1maWN0aW9uIGZpbG0sIGFuZCBpdCBpcyBtZXNtZXJpc2luZyB0byB3YXRjaC4gU28gaGVyZSBpcyB0aGUgdGhpbmcsIEppbSwgd291bGQgeW91IGxpa2UgdG8gY29tZSBkb3duIGFuZCBzZWUgaXQgZm9yIHlvdXJzZWxmPyBJIHByb21pc2UgeW91IHdpbGwgYmUgZ2x1ZWQgdG8gdGhlIHNwb3QuIEdldCBvdmVyIGhlcmUhIn1dLCJ1aSI6eyJzdGFydFRlc3QiOiJTdGFydCB0aGUgdGVzdCIsIm1pY0VuYWJsZSI6IkVuYWJsZSBtaWNyb3Bob25lIiwibWljUmVhZHkiOiJNaWNyb3Bob25lIHJlYWR5IiwibWljQmxvY2tlZCI6Ik1pY3JvcGhvbmUgaXMgYmxvY2tlZCBvciB1bmF2YWlsYWJsZSBcdTIwMTQgdGhlIHBhZ2Ugd2lsbCBydW4gaW4gdGltZXItb25seSBtb2RlICh5b3UgY2FuIHN0aWxsIHByYWN0aXNlIHNwZWFraW5nIGFsb25nIHdpdGggdGhlIHRpbWVycykuIiwibWljTm90ZSI6IlJlY29yZGluZ3MgYXJlIHN0b3JlZCB0ZW1wb3JhcmlseSBpbiB5b3VyIGJyb3dzZXIgb25seSBcdTIwMTQgbm90aGluZyBpcyB1cGxvYWRlZCB0byBhbnkgc2VydmVyLiBUaGV5IGFyZSBsb3N0IHdoZW4geW91IGNsb3NlIHRoZSBwYWdlLCBzbyBkb3dubG9hZCBhbnkgeW91IHdhbnQgdG8ga2VlcC4iLCJwcmVwVGl0bGUiOiJQcmVwYXJhdGlvbiBUaW1lIiwicmVjVGl0bGUiOiJSZWNvcmRpbmciLCJzdGFydFByZXAiOiJcdTI1YjYgU3RhcnQgcHJlcGFyYXRpb24iLCJza2lwUHJlcCI6IlNraXAgXHUyMDE0IHJlY29yZCBub3cgXHUwMGJiIiwic3RvcFJlYyI6Ilx1MjVhMCBTdG9wIHJlY29yZGluZyIsInJlY29yZGVkIjoiUmVjb3JkZWQiLCJyZVJlY29yZCI6Ilx1MjFiYiBSZWNvcmQgYWdhaW4iLCJkb3dubG9hZCI6Ilx1MmIwNyBEb3dubG9hZCIsInRpbWVyT25seSI6IlRpbWVyLW9ubHkgbW9kZSAobm90IHJlY29yZGluZykiLCJzcGVha05vdyI6IlNQRUFLIE5PVyBcdTIwMTQgcmVjb3JkaW5nIHN0b3BzIGF1dG9tYXRpY2FsbHkgd2hlbiB0aW1lIGlzIHVwIiwibmV4dCI6Ik5FWFQiLCJjaG9vc2VIaW50IjoiQ2xpY2sgdG8gY2hvb3NlIG9uZSBvcHRpb24gXHUyMDE0IGlmIHRoZSA2MCBzZWNvbmRzIHJ1biBvdXQsIHRoZSBzeXN0ZW0gY2hvb3NlcyBmb3IgeW91IiwiY29uZmlybUNob2ljZSI6IkNvbmZpcm0gY2hvaWNlICYgY29udGludWUgXHUwMGJiIiwieW91ckNob2ljZSI6IllvdXIgQ2hvaWNlIiwidGlwc1RvZ2dsZSI6Ilx1ZDgzZFx1ZGNhMSBUaXBzICYgc2FtcGxlIGFuc3dlcnMgKG9wZW4gYWZ0ZXIgeW91IGZpbmlzaCBzcGVha2luZykiLCJ0YWJUaXBzIjoiT3V0bGluZSAmIHBocmFzZXMiLCJ0YWJTNiI6IlNhbXBsZSBDTEIgNiIsInRhYlM5IjoiU2FtcGxlIENMQiA5IiwidGFiUnVicmljIjoiU2VsZi1hc3Nlc3NtZW50IiwicnVicmljTm90ZSI6Ikxpc3RlbiB0byB5b3VyIHJlY29yZGluZywgdGhlbiByYXRlIHlvdXJzZWxmIDFcdTIwMTM1IG9uIGVhY2ggY3JpdGVyaW9uICh0aGUgNCBvZmZpY2lhbCBDRUxQSVAgcmF0aW5nIGRpbWVuc2lvbnMpOiIsInJ1YnJpY0NyaXQiOlsiQ29udGVudCAmIENvaGVyZW5jZSBcdTIwMTQgY29tcGxldGUgaWRlYXMsIGxvZ2ljYWwgZmxvdyIsIlZvY2FidWxhcnkgXHUyMDE0IHJhbmdlIGFuZCBwcmVjaXNpb24iLCJMaXN0ZW5hYmlsaXR5IFx1MjAxNCBwcm9udW5jaWF0aW9uLCBpbnRvbmF0aW9uLCBmbHVlbmN5IiwiVGFzayBGdWxmaWxsbWVudCBcdTIwMTQgYWRkcmVzc2VzIHRoZSB0YXNrLCBhcHByb3ByaWF0ZSBsZW5ndGgiXSwiZXN0aW1hdGUiOiJFc3RpbWF0ZWQgbGV2ZWwgKGZvciByZWZlcmVuY2UpOiIsImVzdERpc2NsYWltZXIiOiJTZWxmLWFzc2Vzc21lbnQgaXMgYSByb3VnaCBndWlkZSBvbmx5IFx1MjAxNCBpdCBkb2VzIG5vdCByZXBsYWNlIGFuIG9mZmljaWFsIHNjb3JlLiIsInVzZWZ1bFBocmFzZXMiOiJVc2VmdWwgcGhyYXNlcyIsImVuZFRpdGxlIjoiU3BlYWtpbmcgdGVzdCBjb21wbGV0ZSEiLCJlbmRTdWIiOiJSZXBsYXkgZWFjaCB0YXNrLCBjb21wYXJlIHlvdXIgYW5zd2VycyB3aXRoIHRoZSBDTEIgNiAvIENMQiA5IHNhbXBsZXMsIHRoZW4gcmF0ZSB5b3Vyc2VsZi4iLCJlbmROb1JlYyI6Im5vdCByZWNvcmRlZCIsImVuZFJlZG8iOiJcdTIxYmIgU3RhcnQgb3ZlciIsImVuZFQyIjoiQ29udGludWUgdG8gUHJhY3RpY2UgVGVzdCIsImVuZEh1YiI6Ilx1MjE5MCBCYWNrIHRvIENFTFBJUCBIdWIiLCJ3YXJtdXBCYWRnZSI6Ildhcm0tdXAgXHUyMDE0IG5vdCBzY29yZWQiLCJpbnRyb05vdGVzIjpbIkFuIGFjY3VyYXRlIHNpbXVsYXRpb24gb2YgdGhlIHJlYWwgQ0VMUElQIEdlbmVyYWwgU3BlYWtpbmcgdGVzdDogMSBwcmFjdGljZSAod2FybS11cCkgdGFzayArIDggc2NvcmVkIHRhc2tzLCBhYm91dCAyMCBtaW51dGVzIGluIHRvdGFsLiIsIkVhY2ggdGFzazogcmVhZCB0aGUgcHJvbXB0IFx1MjE5MiA8Yj5QcmVwYXJhdGlvbjwvYj4gY291bnRkb3duIFx1MjE5MiBzd2l0Y2hlcyBhdXRvbWF0aWNhbGx5IHRvIDxiPlJlY29yZGluZzwvYj4gKHdpdGggYSBiZWVwKSBcdTIxOTIgc3RvcHMgd2hlbiB0aW1lIGlzIHVwLiIsIk9uIHRoZSByZWFsIHRlc3QgeW91IGNhbm5vdCBnbyBiYWNrIHRvIGEgcHJldmlvdXMgdGFzay4gSW4gcHJhY3RpY2UgbW9kZSwgeW91IGNhbiBjbGljayB0aGUgbnVtYmVyZWQgY2hpcHMgYWJvdmUgdG8gcmV2aXNpdCBhbnkgdGFzay4iLCJBZnRlciBzcGVha2luZyBvbiBlYWNoIHRhc2ssIG9wZW4gPGI+VGlwcyAmIHNhbXBsZSBhbnN3ZXJzPC9iPiB0byBjb21wYXJlIHlvdXIgcmVzcG9uc2Ugd2l0aCB0aGUgQ0xCIDYgYW5kIENMQiA5IHNhbXBsZXMuIl0sImhlcm9UYWciOiJDRUxQSVAgR2VuZXJhbCBcdTIwMTQgU3BlYWtpbmciLCJoZXJvTWV0YSI6WyI4IHRhc2tzICsgd2FybS11cCIsIn4yMCBtaW51dGVzIiwiUmVjb3JkICYgcmVwbGF5IiwiQ0xCIDYgLyBDTEIgOSBzYW1wbGVzIl19fTsKLyogQ0VMUElQIFNwZWFraW5nIEVuZ2luZSB2MS4wIC0gQWxsRW5nbGlzaDRVIC0gdmFuaWxsYSBKUywgcHJlZml4IGNscC1zcGsgKi8KKGZ1bmN0aW9uKCl7CiJ1c2Ugc3RyaWN0IjsKdmFyIEQgPSB3aW5kb3cuQ0xQU1BLX0RBVEEsIFUgPSBELnVpOwp2YXIgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHAtc3BrLXJvb3QiKTsKaWYoIXJvb3QpIHJldHVybjsKCi8qIC0tLS0tLS0tLS0gc3R5bGUgLS0tLS0tLS0tLSAqLwp2YXIgQ1NTID0gIiIrCiIuY2xwLXNway13cmFwe21heC13aWR0aDoxMTQwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjAgMTRweCA2MHB4O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLEFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6IzIzMjcyZDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfSIrCiIuY2xwLXNway13cmFwICp7Ym94LXNpemluZzpib3JkZXItYm94fSIrCiIuY2xwLXNway1oZXJve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjN2YxZDFkIDAlLCNiOTFjMWMgNTUlLCNkYzI2MjYgMTAwJSk7Ym9yZGVyLXJhZGl1czoxOHB4O2NvbG9yOiNmZmY7cGFkZGluZzozMHB4IDMwcHggMjZweDttYXJnaW46MThweCAwIDIwcHg7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufSIrCiIuY2xwLXNway1oZXJvOmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTYwcHg7dG9wOi02MHB4O3dpZHRoOjIyMHB4O2hlaWdodDoyMjBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA4KX0iKwoiLmNscC1zcGstaGVybyAudGFne2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTYpO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMzUpO3BhZGRpbmc6M3B4IDEycHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTIuNXB4O2xldHRlci1zcGFjaW5nOi42cHg7Zm9udC13ZWlnaHQ6NjAwfSIrCiIuY2xwLXNway1oZXJvIGgxe21hcmdpbjoxMHB4IDAgNnB4O2ZvbnQtc2l6ZToyN3B4O2xpbmUtaGVpZ2h0OjEuMjU7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstaGVybyAubWV0YXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjhweDttYXJnaW4tdG9wOjEycHh9IisKIi5jbHAtc3BrLWhlcm8gLm1ldGEgc3BhbntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjIyKTtwYWRkaW5nOjRweCAxMnB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjEyLjVweH0iKwoiLmNscC1zcGstY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo3cHg7bWFyZ2luOjAgMCAxNHB4fSIrCiIuY2xwLXNway1jaGlwe21pbi13aWR0aDozOHB4O2hlaWdodDozNHB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjoxLjVweCBzb2xpZCAjZDNkOGRmO2JhY2tncm91bmQ6I2ZmZjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzLjVweDtjb2xvcjojNWI2NTcyO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MCAxMHB4fSIrCiIuY2xwLXNway1jaGlwLmN1cntiYWNrZ3JvdW5kOiMwYjU3ZDA7Ym9yZGVyLWNvbG9yOiMwYjU3ZDA7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstY2hpcC5kb25le2JhY2tncm91bmQ6I2U2ZjRlYTtib3JkZXItY29sb3I6IzdiYzM5NDtjb2xvcjojMWU3YjNlfSIrCiIuY2xwLXNway1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZDlkZGUzO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDJweCAxMHB4IHJnYmEoMzAsNDAsNjAsLjA2KX0iKwoiLmNscC1zcGstYmFye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7YmFja2dyb3VuZDojZWNlY2VlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkNWQ1ZDg7cGFkZGluZzo5cHggMTRweDtmbGV4LXdyYXA6d3JhcH0iKwoiLmNscC1zcGstYmFyIC50e2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTQuNXB4O2NvbG9yOiMzYzQwNDZ9IisKIi5jbHAtc3BrLWJhciAubXttYXJnaW4tbGVmdDphdXRvO2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6IzU1NTt3aGl0ZS1zcGFjZTpub3dyYXB9IisKIi5jbHAtc3BrLWJhciAubSBie2NvbG9yOiMyMzI3MmR9IisKIi5jbHAtc3BrLW5leHR7YmFja2dyb3VuZDojMTQ2N2M2O2NvbG9yOiNmZmY7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMi41cHg7bGV0dGVyLXNwYWNpbmc6LjhweDtwYWRkaW5nOjdweCAxOHB4O2N1cnNvcjpwb2ludGVyfSIrCiIuY2xwLXNway1uZXh0OmhvdmVye2JhY2tncm91bmQ6IzBmNTdhYn0iKwoiLmNscC1zcGstYm9keXtwYWRkaW5nOjE4cHggMjBweCAyMnB4fSIrCiIuY2xwLXNway1wcm9tcHR7ZGlzcGxheTpmbGV4O2dhcDo5cHg7Y29sb3I6IzBiNTM5NDtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjE1LjVweDtsaW5lLWhlaWdodDoxLjV9IisKIi5jbHAtc3BrLXByb21wdCAuaXtmbGV4OjAgMCBhdXRvO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojMmM3Y2IwO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6ODAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjJweH0iKwoiLmNscC1zcGstbGVhZHtjb2xvcjojMGI1Mzk0O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjRweH0iKwoiLmNscC1zcGstY2hvb3NlMXttYXJnaW46MTRweCAwIDA7cGFkZGluZzoxMnB4IDE2cHg7YmFja2dyb3VuZDojZjVmN2ZhO2JvcmRlcjoxcHggc29saWQgI2RmZTRlYTtib3JkZXItcmFkaXVzOjlweDtmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNTV9IisKIi5jbHAtc3BrLWNob29zZTEgLmV7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiM4YTFmMWY7bGV0dGVyLXNwYWNpbmc6LjRweH0iKwoiLmNscC1zcGstaW1ne2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjU0MHB4O3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjY2ZkNGRhO2JvcmRlci1yYWRpdXM6OHB4O21hcmdpbjoxNnB4IDAgNHB4fSIrCiIuY2xwLXNway1ub3Rle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4YTkyOWM7bWFyZ2luLXRvcDo2cHh9IisKIi5jbHAtc3BrLXRpbWVycm93e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDAgNnB4fSIrCiIuY2xwLXNway10aW1lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNnB4O2JhY2tncm91bmQ6I2U5ZWNlZjtib3JkZXI6MXB4IHNvbGlkICNkNmRhZGU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweCAyNnB4O21pbi13aWR0aDozMDBweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSIrCiIuY2xwLXNway10aW1lciAuaWN7d2lkdGg6NDRweDtoZWlnaHQ6NDRweDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiNmOGY5ZmE7Ym9yZGVyOjFweCBzb2xpZCAjZDZkYWRlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MjJweH0iKwoiLmNscC1zcGstdGltZXIgLmxie2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMzMzODNmO2ZvbnQtc2l6ZToxNXB4fSIrCiIuY2xwLXNway10aW1lciAubntmb250LXNpemU6MjZweDtmb250LXdlaWdodDo4MDA7Y29sb3I6IzBiNTdkMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7bWluLXdpZHRoOjUycHg7dGV4dC1hbGlnbjpjZW50ZXJ9IisKIi5jbHAtc3BrLXRpbWVyLnJlY3tiYWNrZ3JvdW5kOiNmZGVjZWI7Ym9yZGVyLWNvbG9yOiNmM2I2YjN9IisKIi5jbHAtc3BrLXRpbWVyLnJlYyAubntjb2xvcjojYzYyODI4fSIrCiIuY2xwLXNway10aW1lci5yZWMgLmlje2JhY2tncm91bmQ6I2ZmZjtib3JkZXItY29sb3I6I2YzYjZiM30iKwoiLmNscC1zcGstZG90e3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZTUzOTM1O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2FuaW1hdGlvbjpjbHBibGluayAxcyBpbmZpbml0ZX0iKwoiQGtleWZyYW1lcyBjbHBibGlua3swJSwxMDAle29wYWNpdHk6MX01MCV7b3BhY2l0eTouMjV9fSIrCiIuY2xwLXNway1jdHJ7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC13cmFwOndyYXA7bWFyZ2luOjE0cHggMCAycHh9IisKIi5jbHAtc3BrLWJ0bntib3JkZXI6MS41cHggc29saWQgI2M5Y2ZkNjtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzMzMzgzZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjlweCAxOHB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTMuNXB4O2N1cnNvcjpwb2ludGVyfSIrCiIuY2xwLXNway1idG46aG92ZXJ7Ym9yZGVyLWNvbG9yOiM5YWEzYWR9IisKIi5jbHAtc3BrLWJ0bi5wcml7YmFja2dyb3VuZDojMGI1N2QwO2JvcmRlci1jb2xvcjojMGI1N2QwO2NvbG9yOiNmZmZ9IisKIi5jbHAtc3BrLWJ0bi5wcmk6aG92ZXJ7YmFja2dyb3VuZDojMGE0Y2I1fSIrCiIuY2xwLXNway1idG4ud2FybntiYWNrZ3JvdW5kOiNjNjI4Mjg7Ym9yZGVyLWNvbG9yOiNjNjI4Mjg7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstc3BlYWtub3d7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2M2MjgyODtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXRvcDo4cHg7bGV0dGVyLXNwYWNpbmc6LjNweH0iKwoiLmNscC1zcGstcmV2aWV3e21hcmdpbjoxNnB4IGF1dG8gMDttYXgtd2lkdGg6NjQwcHg7YmFja2dyb3VuZDojZjJmOWYzO2JvcmRlcjoxcHggc29saWQgI2JmZTNjNjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4IDE4cHh9IisKIi5jbHAtc3BrLXJldmlldyAub2t7Y29sb3I6IzFlN2IzZTtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE0LjVweH0iKwoiLmNscC1zcGstcmV2aWV3IGF1ZGlve3dpZHRoOjEwMCU7bWFyZ2luOjEwcHggMCA4cHh9IisKIi5jbHAtc3BrLW1pY3ttYXJnaW46MTJweCBhdXRvIDA7bWF4LXdpZHRoOjY0MHB4O2JhY2tncm91bmQ6I2ZmZjhlNjtib3JkZXI6MXB4IHNvbGlkICNlY2Q5YTA7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM3YTViMTJ9IisKIi5jbHAtc3BrLW9wdHN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4O21hcmdpbjoxOHB4IDAgNHB4fSIrCiIuY2xwLXNway1jYXJke2JvcmRlcjoycHggc29saWQgI2Q1ZGFlMDtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxM3B4IDE1cHggMTVweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNmZmY7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE1c30iKwoiLmNscC1zcGstY2FyZDpob3Zlcntib3JkZXItY29sb3I6IzhmYjRlOH0iKwoiLmNscC1zcGstY2FyZC5zZWx7Ym9yZGVyLWNvbG9yOiMyZTllNGY7YmFja2dyb3VuZDojZWVmOWYwfSIrCiIuY2xwLXNway1jYXJkLnBsYWlue2N1cnNvcjpkZWZhdWx0fSIrCiIuY2xwLXNway1jYXJkIC5oZHt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojNmI3NDgwO2xldHRlci1zcGFjaW5nOi4zcHg7bWFyZ2luLWJvdHRvbTo4cHh9IisKIi5jbHAtc3BrLWNhcmQgaW1ne3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo3cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlNmVhfSIrCiIuY2xwLXNway1jYXJkIC50dHtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE1cHg7bWFyZ2luOjEwcHggMCA2cHg7Y29sb3I6IzIzMjcyZH0iKwoiLmNscC1zcGstY2FyZCB1bHttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MThweDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6IzNjNDM0Yn0iKwoiLmNscC1zcGstY2FyZCAucGlja3ttYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMyZTllNGY7Zm9udC1zaXplOjEzcHg7bWluLWhlaWdodDoxOHB4fSIrCiIuY2xwLXNway1oaW50e3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM2Yjc0ODA7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXRvcDoxMHB4fSIrCiIuY2xwLXNway1hY2N7bWFyZ2luLXRvcDoyMnB4O2JvcmRlcjoxcHggc29saWQgI2Q5ZGRlMztib3JkZXItcmFkaXVzOjExcHg7b3ZlcmZsb3c6aGlkZGVufSIrCiIuY2xwLXNway1hY2M+YnV0dG9ue3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQ6I2Y2ZjdmOTtib3JkZXI6MDtwYWRkaW5nOjEycHggMTZweDtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzNjNDA0NjtjdXJzb3I6cG9pbnRlcn0iKwoiLmNscC1zcGstYWNjYm9keXtkaXNwbGF5Om5vbmU7cGFkZGluZzoxNHB4IDE2cHggMThweDtiYWNrZ3JvdW5kOiNmZmZ9IisKIi5jbHAtc3BrLWFjYy5vcGVuIC5jbHAtc3BrLWFjY2JvZHl7ZGlzcGxheTpibG9ja30iKwoiLmNscC1zcGstdGFic3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjEycHh9IisKIi5jbHAtc3BrLXRhYntib3JkZXI6MS41cHggc29saWQgI2M5Y2ZkNjtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjZweCAxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTIuNXB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM0YTUyNWN9IisKIi5jbHAtc3BrLXRhYi5vbntiYWNrZ3JvdW5kOiMwYjU3ZDA7Ym9yZGVyLWNvbG9yOiMwYjU3ZDA7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstdGFicGFuZXtkaXNwbGF5Om5vbmU7Zm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjY1fSIrCiIuY2xwLXNway10YWJwYW5lLm9ue2Rpc3BsYXk6YmxvY2t9IisKIi5jbHAtc3BrLXRhYnBhbmUgdWx7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luOjhweCAwfSIrCiIuY2xwLXNway10YWJwYW5lIGxpe21hcmdpbjo1cHggMH0iKwoiLmNscC1zcGstc2FtcGxle2JhY2tncm91bmQ6I2Y4ZjlmYjtib3JkZXI6MXB4IHNvbGlkICNlM2U3ZWM7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICMwYjU3ZDA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxM3B4IDE2cHg7d2hpdGUtc3BhY2U6cHJlLXdyYXB9IisKIi5jbHAtc3BrLXNhbXBsZS5zNntib3JkZXItbGVmdC1jb2xvcjojZThhMTNjfSIrCiIuY2xwLXNway1waHJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo3cHg7bWFyZ2luLXRvcDoxMHB4fSIrCiIuY2xwLXNway1waHIgc3BhbntiYWNrZ3JvdW5kOiNlZWYzZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2RkZGY1O2NvbG9yOiMxNzRhOWM7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwfSIrCiIuY2xwLXNway1ydWJ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3dpZHRoOjEwMCU7Zm9udC1zaXplOjEzLjVweH0iKwoiLmNscC1zcGstcnViIHRke3BhZGRpbmc6N3B4IDZweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVmMGYzfSIrCiIuY2xwLXNway1zdGFye2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxOXB4O2NvbG9yOiNjOWNmZDY7cGFkZGluZzowIDFweDt1c2VyLXNlbGVjdDpub25lfSIrCiIuY2xwLXNway1zdGFyLm9ue2NvbG9yOiNmMGE3MWJ9IisKIi5jbHAtc3BrLWVzdHttYXJnaW4tdG9wOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZTdiM2V9IisKIi5jbHAtc3BrLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6I2ZmZjNjZDtib3JkZXI6MXB4IHNvbGlkICNlOGQ0OGI7Y29sb3I6IzdhNWIxMjtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjNweCAxMnB4O21hcmdpbi1ib3R0b206MTBweH0iKwoiLmNscC1zcGstaW50cm8gdWx7Zm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjc7cGFkZGluZy1sZWZ0OjIwcHh9IisKIi5jbHAtc3BrLWludHJvIGxpe21hcmdpbjo3cHggMH0iKwoiLmNscC1zcGstbWljcm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXA7YmFja2dyb3VuZDojZjZmN2Y5O2JvcmRlcjoxcHggc29saWQgI2UwZTRlOTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxM3B4IDE2cHg7bWFyZ2luOjE2cHggMH0iKwoiLmNscC1zcGstbWljc3R7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMy41cHh9IisKIi5jbHAtc3BrLW1pY3N0Lm9re2NvbG9yOiMxZTdiM2V9LmNscC1zcGstbWljc3QuYmFke2NvbG9yOiNjNjI4Mjh9IisKIi5jbHAtc3BrLWVuZCB0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7d2lkdGg6MTAwJTtmb250LXNpemU6MTRweH0iKwoiLmNscC1zcGstZW5kIHRkLC5jbHAtc3BrLWVuZCB0aHtwYWRkaW5nOjlweCA4cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VjZWZmMjt0ZXh0LWFsaWduOmxlZnR9IisKIi5jbHAtc3BrLWVuZCBhdWRpb3toZWlnaHQ6MzRweDttYXgtd2lkdGg6MjMwcHh9IisKIkBtZWRpYShtYXgtd2lkdGg6NzAwcHgpey5jbHAtc3BrLW9wdHN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0uY2xwLXNway1iYXIgLm17b3JkZXI6MzttYXJnaW4tbGVmdDowO3dpZHRoOjEwMCV9LmNscC1zcGstaGVybyBoMXtmb250LXNpemU6MjJweH0uY2xwLXNway1ib2R5e3BhZGRpbmc6MTRweCAxMnB4IDE4cHh9fSI7CnZhciBzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7IHN0LnRleHRDb250ZW50ID0gQ1NTOyBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0KTsKCi8qIC0tLS0tLS0tLS0gc3RhdGUgLS0tLS0tLS0tLSAqLwp2YXIgUyA9IHsKICBjdXI6IC0xLCAgICAgICAgICAgIC8qIC0xIGludHJvLCAwLi44IHRhc2tzLCA5OSBlbmQgKi8KICBtaWNTdGF0ZTogImlkbGUiLCAgIC8qIGlkbGV8b2t8YmFkICovCiAgc3RyZWFtOiBudWxsLCByZWNvcmRlcjogbnVsbCwgY2h1bmtzOiBbXSwKICB0aW1lcjogbnVsbCwgcGhhc2U6IHt9LCB0NWNob2ljZToge30sIHJlY3M6IHt9LCBydWJyaWM6IHt9LAogIG1pbWU6ICIiLCBleHQ6ICJ3ZWJtIgp9OwpELnRhc2tzLmZvckVhY2goZnVuY3Rpb24odCl7IFMucGhhc2VbdC5rXSA9IHQucGhhc2VkID8gImNob29zZS1pZGxlIiA6ICJpZGxlIjsgfSk7CgpmdW5jdGlvbiBwaWNrTWltZSgpewogIGlmKCF3aW5kb3cuTWVkaWFSZWNvcmRlcikgcmV0dXJuIG51bGw7CiAgdmFyIGNhbmRzID0gW1siYXVkaW8vd2VibTtjb2RlY3M9b3B1cyIsIndlYm0iXSxbImF1ZGlvL3dlYm0iLCJ3ZWJtIl0sWyJhdWRpby9tcDQiLCJtNGEiXSxbImF1ZGlvL29nZztjb2RlY3M9b3B1cyIsIm9nZyJdXTsKICBmb3IodmFyIGk9MDtpPGNhbmRzLmxlbmd0aDtpKyspeyB0cnl7IGlmKE1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkKGNhbmRzW2ldWzBdKSkgcmV0dXJuIGNhbmRzW2ldOyB9Y2F0Y2goZSl7fSB9CiAgcmV0dXJuIFsiIiwid2VibSJdOwp9CmZ1bmN0aW9uIGVuc3VyZU1pYyhjYil7CiAgaWYoUy5taWNTdGF0ZT09PSJvayIpIHJldHVybiBjYih0cnVlKTsKICBpZihTLm1pY1N0YXRlPT09ImJhZCIpIHJldHVybiBjYihmYWxzZSk7CiAgaWYoIW5hdmlnYXRvci5tZWRpYURldmljZXMgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhIHx8ICF3aW5kb3cuTWVkaWFSZWNvcmRlcil7IFMubWljU3RhdGU9ImJhZCI7IHJldHVybiBjYihmYWxzZSk7IH0KICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7YXVkaW86dHJ1ZX0pLnRoZW4oZnVuY3Rpb24oc3RyZWFtKXsKICAgIFMuc3RyZWFtID0gc3RyZWFtOyB2YXIgbSA9IHBpY2tNaW1lKCk7IFMubWltZSA9IG1bMF07IFMuZXh0ID0gbVsxXTsgUy5taWNTdGF0ZT0ib2siOyBjYih0cnVlKTsKICB9KS5jYXRjaChmdW5jdGlvbigpeyBTLm1pY1N0YXRlPSJiYWQiOyBjYihmYWxzZSk7IH0pOwp9CmZ1bmN0aW9uIGJlZXAobil7CiAgdHJ5ewogICAgdmFyIGN0eCA9IHdpbmRvdy5fX2NscEFDID0gd2luZG93Ll9fY2xwQUMgfHwgbmV3ICh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpOwogICAgdmFyIHQwID0gY3R4LmN1cnJlbnRUaW1lOwogICAgZm9yKHZhciBpPTA7aTxuO2krKyl7CiAgICAgIHZhciBvID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKSwgZyA9IGN0eC5jcmVhdGVHYWluKCk7CiAgICAgIG8uZnJlcXVlbmN5LnZhbHVlID0gODgwOyBvLmNvbm5lY3QoZyk7IGcuY29ubmVjdChjdHguZGVzdGluYXRpb24pOwogICAgICBnLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLHQwK2kqMC4yNSk7IGcuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMTgsdDAraSowLjI1KzAuMDIpOwogICAgICBnLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMDEsdDAraSowLjI1KzAuMTgpOwogICAgICBvLnN0YXJ0KHQwK2kqMC4yNSk7IG8uc3RvcCh0MCtpKjAuMjUrMC4yKTsKICAgIH0KICB9Y2F0Y2goZSl7fQp9CmZ1bmN0aW9uIHN0b3BUaW1lcigpeyBpZihTLnRpbWVyKXsgY2xlYXJJbnRlcnZhbChTLnRpbWVyKTsgUy50aW1lcj1udWxsOyB9IH0KZnVuY3Rpb24gY291bnRkb3duKHNlY3MsIG9uVGljaywgb25FbmQpewogIHN0b3BUaW1lcigpOwogIHZhciBlbmQgPSBEYXRlLm5vdygpICsgc2VjcyoxMDAwOwogIG9uVGljayhzZWNzKTsKICBTLnRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoZW5kLURhdGUubm93KCkpLzEwMDApKTsKICAgIG9uVGljayhsZWZ0KTsKICAgIGlmKGxlZnQ8PTApeyBzdG9wVGltZXIoKTsgb25FbmQoKTsgfQogIH0sIDI1MCk7Cn0KZnVuY3Rpb24gc3RvcFJlY29yZGluZygpewogIGlmKFMucmVjb3JkZXIgJiYgUy5yZWNvcmRlci5zdGF0ZSE9PSJpbmFjdGl2ZSIpeyB0cnl7IFMucmVjb3JkZXIuc3RvcCgpOyB9Y2F0Y2goZSl7fSB9CiAgUy5yZWNvcmRlciA9IG51bGw7Cn0KZnVuY3Rpb24gbGVhdmVDbGVhbnVwKCl7IHN0b3BUaW1lcigpOyBzdG9wUmVjb3JkaW5nKCk7IH0KCi8qIC0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIGVsKHRhZywgY2xzLCBodG1sKXsgdmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOyBpZihjbHMpZS5jbGFzc05hbWU9Y2xzOyBpZihodG1sIT1udWxsKWUuaW5uZXJIVE1MPWh0bWw7IHJldHVybiBlOyB9CmZ1bmN0aW9uIGZtdE1ldGEodCl7CiAgaWYodC5waGFzZWQpIHJldHVybiAiIjsKICByZXR1cm4gIlByZXBhcmF0aW9uOiA8Yj4iK3QucHJlcCsiIHNlY29uZHM8L2I+ICZuYnNwO1JlY29yZGluZzogPGI+Iit0LnJlYysiIHNlY29uZHM8L2I+IjsKfQpmdW5jdGlvbiB0YXNrVGl0bGUodCl7CiAgaWYodC53YXJtdXApIHJldHVybiBELmhlYWRlcisiIC0gU3BlYWtpbmcgUHJhY3RpY2UgVGFzayI7CiAgcmV0dXJuIEQuaGVhZGVyKyIgLSBTcGVha2luZyBUYXNrICIrdC5udW0rIjogIit0LnR5cGVFbjsKfQpmdW5jdGlvbiBlc3RUZXh0KGF2Zyl7CiAgaWYoYXZnPj00LjUpIHJldHVybiAiQ0xCIDkrIjsgaWYoYXZnPj0zLjUpIHJldHVybiAiQ0xCIDdcdTIwMTM4IjsgaWYoYXZnPj0yLjUpIHJldHVybiAiQ0xCIDVcdTIwMTM2IjsgcmV0dXJuICJDTEIgNCBvciBiZWxvdyI7Cn0KCi8qIC0tLS0tLS0tLS0gcmVuZGVyIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gcmVuZGVyKCl7CiAgbGVhdmVDbGVhbnVwKCk7CiAgcm9vdC5pbm5lckhUTUwgPSAiIjsKICB2YXIgd3JhcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXdyYXAiKTsKICB3cmFwLmFwcGVuZENoaWxkKGhlcm8oKSk7CiAgaWYoUy5jdXI+PTAgJiYgUy5jdXI8RC50YXNrcy5sZW5ndGgpIHdyYXAuYXBwZW5kQ2hpbGQoY2hpcHMoKSk7CiAgaWYoUy5jdXI9PT0tMSkgd3JhcC5hcHBlbmRDaGlsZChpbnRybygpKTsKICBlbHNlIGlmKFMuY3VyPT09OTkpIHdyYXAuYXBwZW5kQ2hpbGQoZW5kU2NyZWVuKCkpOwogIGVsc2Ugd3JhcC5hcHBlbmRDaGlsZCh0YXNrUGFuZWwoRC50YXNrc1tTLmN1cl0pKTsKICByb290LmFwcGVuZENoaWxkKHdyYXApOwogIHRyeXsgd2luZG93LnNjcm9sbFRvKHt0b3A6IHJvb3Qub2Zmc2V0VG9wLTEwLCBiZWhhdmlvcjoic21vb3RoIn0pOyB9Y2F0Y2goZSl7fQp9CmZ1bmN0aW9uIGhlcm8oKXsKICB2YXIgaCA9IGVsKCJkaXYiLCJjbHAtc3BrLWhlcm8iKTsKICBoLmFwcGVuZENoaWxkKGVsKCJzcGFuIiwidGFnIixVLmhlcm9UYWcpKTsKICBoLmFwcGVuZENoaWxkKGVsKCJoMSIsbnVsbCxELnRpdGxlLnNwbGl0KCJcdTIwMTQiKVsxXSA\/ICJTcGVha2luZyBcdTIwMTQiK0QudGl0bGUuc3BsaXQoIlx1MjAxNCIpWzFdIDogRC50aXRsZSkpOwogIHZhciBtID0gZWwoImRpdiIsIm1ldGEiKTsKICBVLmhlcm9NZXRhLmZvckVhY2goZnVuY3Rpb24oeCl7IG0uYXBwZW5kQ2hpbGQoZWwoInNwYW4iLG51bGwseCkpOyB9KTsKICBoLmFwcGVuZENoaWxkKG0pOwogIHJldHVybiBoOwp9CmZ1bmN0aW9uIGNoaXBzKCl7CiAgdmFyIGMgPSBlbCgiZGl2IiwiY2xwLXNway1jaGlwcyIpOwogIEQudGFza3MuZm9yRWFjaChmdW5jdGlvbih0LGkpewogICAgdmFyIGIgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1jaGlwIisoaT09PVMuY3VyPyIgY3VyIjooUy5yZWNzW3Qua10\/IiBkb25lIjoiIikpLCB0Lndhcm11cD8iVyI6U3RyaW5nKHQubnVtKSk7CiAgICBiLnRpdGxlID0gdC50eXBlRW47CiAgICBiLm9uY2xpY2sgPSBmdW5jdGlvbigpeyBTLmN1cj1pOyByZW5kZXIoKTsgfTsKICAgIGMuYXBwZW5kQ2hpbGQoYik7CiAgfSk7CiAgdmFyIGUgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1jaGlwIisoUy5jdXI9PT05OT8iIGN1ciI6IiIpLCJcdWQ4M2NcdWRmYzEiKTsKICBlLnRpdGxlID0gIkZpbmlzaCI7IGUub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyPTk5OyByZW5kZXIoKTsgfTsKICBjLmFwcGVuZENoaWxkKGUpOwogIHJldHVybiBjOwp9CmZ1bmN0aW9uIGludHJvKCl7CiAgdmFyIHAgPSBlbCgiZGl2IiwiY2xwLXNway1wYW5lbCBjbHAtc3BrLWludHJvIik7CiAgdmFyIGJhciA9IGVsKCJkaXYiLCJjbHAtc3BrLWJhciIpOwogIGJhci5hcHBlbmRDaGlsZChlbCgic3BhbiIsInQiLEQuaGVhZGVyKyIgLSBTcGVha2luZyIpKTsKICB2YXIgbnggPSBlbCgiYnV0dG9uIiwiY2xwLXNway1uZXh0IixVLm5leHQpOyBueC5zdHlsZS5tYXJnaW5MZWZ0PSJhdXRvIjsKICBueC5vbmNsaWNrID0gZnVuY3Rpb24oKXsgUy5jdXI9MDsgcmVuZGVyKCk7IH07CiAgYmFyLmFwcGVuZENoaWxkKG54KTsKICBwLmFwcGVuZENoaWxkKGJhcik7CiAgdmFyIGIgPSBlbCgiZGl2IiwiY2xwLXNway1ib2R5Iik7CiAgdmFyIHByID0gZWwoImRpdiIsImNscC1zcGstcHJvbXB0Iik7CiAgcHIuYXBwZW5kQ2hpbGQoZWwoInNwYW4iLCJpIiwiaSIpKTsgcHIuYXBwZW5kQ2hpbGQoZWwoInNwYW4iLG51bGwsIlNwZWFraW5nIFRlc3QgSW5zdHJ1Y3Rpb25zIikpOwogIGIuYXBwZW5kQ2hpbGQocHIpOwogIHZhciB1bCA9IGVsKCJ1bCIpOwogIFUuaW50cm9Ob3Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB1bC5hcHBlbmRDaGlsZChlbCgibGkiLG51bGwseCkpOyB9KTsKICBiLmFwcGVuZENoaWxkKHVsKTsKICB2YXIgbWljcm93ID0gZWwoImRpdiIsImNscC1zcGstbWljcm93Iik7CiAgdmFyIG1idG4gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4gcHJpIixVLm1pY0VuYWJsZSk7CiAgdmFyIG1zdCA9IGVsKCJzcGFuIiwiY2xwLXNway1taWNzdCIsIiIpOwogIG1idG4ub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICBtYnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgIGVuc3VyZU1pYyhmdW5jdGlvbihvayl7CiAgICAgIG1zdC5jbGFzc05hbWUgPSAiY2xwLXNway1taWNzdCAiKyhvaz8ib2siOiJiYWQiKTsKICAgICAgbXN0LmlubmVySFRNTCA9IG9rID8gIlx1MjcxNCAiK1UubWljUmVhZHkgOiAiXHUyNzE2ICIrVS5taWNCbG9ja2VkOwogICAgICBpZighb2spIG1idG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgIH0pOwogIH07CiAgbWljcm93LmFwcGVuZENoaWxkKG1idG4pOyBtaWNyb3cuYXBwZW5kQ2hpbGQobXN0KTsKICBiLmFwcGVuZENoaWxkKG1pY3Jvdyk7CiAgYi5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1ub3RlIixVLm1pY05vdGUpKTsKICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7CiAgdmFyIGdvID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHByaSIsVS5zdGFydFRlc3QrIiBcdTI1YjYiKTsKICBnby5zdHlsZS5mb250U2l6ZT0iMTVweCI7IGdvLnN0eWxlLnBhZGRpbmc9IjEycHggMjZweCI7CiAgZ28ub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyPTA7IHJlbmRlcigpOyB9OwogIGN0ci5hcHBlbmRDaGlsZChnbyk7CiAgYi5hcHBlbmRDaGlsZChjdHIpOwogIHAuYXBwZW5kQ2hpbGQoYik7CiAgcmV0dXJuIHA7Cn0KCi8qIC0tLS0tLS0tLS0gdGFzayBwYW5lbCAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIHRhc2tQYW5lbCh0KXsKICB2YXIgcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXBhbmVsIik7CiAgdmFyIGJhciA9IGVsKCJkaXYiLCJjbHAtc3BrLWJhciIpOwogIGJhci5hcHBlbmRDaGlsZChlbCgic3BhbiIsInQiLHRhc2tUaXRsZSh0KSkpOwogIHZhciBtZXRhID0gZWwoInNwYW4iLCJtIiwgdC5waGFzZWQgPyBwaGFzZWRNZXRhKHQpIDogZm10TWV0YSh0KSk7CiAgYmFyLmFwcGVuZENoaWxkKG1ldGEpOwogIHZhciBueCA9IGVsKCJidXR0b24iLCJjbHAtc3BrLW5leHQiLFUubmV4dCk7CiAgbngub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyID0gKFMuY3VyKzEgPCBELnRhc2tzLmxlbmd0aCkgPyBTLmN1cisxIDogOTk7IHJlbmRlcigpOyB9OwogIGJhci5hcHBlbmRDaGlsZChueCk7CiAgcC5hcHBlbmRDaGlsZChiYXIpOwogIHZhciBiID0gZWwoImRpdiIsImNscC1zcGstYm9keSIpOwogIGlmKHQud2FybXVwKSBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLWJhZGdlIixVLndhcm11cEJhZGdlKSk7CiAgaWYodC5waGFzZWQpIHJlbmRlclQ1KHQsYixtZXRhKTsKICBlbHNlIHJlbmRlclN0ZCh0LGIpOwogIGlmKHQudGlwcykgYi5hcHBlbmRDaGlsZChhY2NvcmRpb24odCkpOwogIHAuYXBwZW5kQ2hpbGQoYik7CiAgcmV0dXJuIHA7Cn0KZnVuY3Rpb24gcGhhc2VkTWV0YSh0KXsKICB2YXIgcGggPSBTLnBoYXNlW3Qua118fCIiOwogIGlmKHBoLmluZGV4T2YoImNob29zZSIpPT09MCkgcmV0dXJuICJQcmVwYXJhdGlvbjogPGI+Iit0LmNob29zZS5wcmVwKyIgc2Vjb25kczwvYj4iOwogIHJldHVybiAiUHJlcGFyYXRpb246IDxiPiIrdC5zcGVhay5wcmVwKyIgc2Vjb25kczwvYj4gJm5ic3A7UmVjb3JkaW5nOiA8Yj4iK3Quc3BlYWsucmVjKyIgc2Vjb25kczwvYj4iOwp9CmZ1bmN0aW9uIHByb21wdFJvdyh0ZXh0LCBsZWFkKXsKICB2YXIgYm94ID0gZWwoImRpdiIpOwogIGlmKGxlYWQpeyBib3guYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstbGVhZCIsbGVhZCkpOyB9CiAgdmFyIHByID0gZWwoImRpdiIsImNscC1zcGstcHJvbXB0Iik7CiAgcHIuYXBwZW5kQ2hpbGQoZWwoInNwYW4iLCJpIiwiaSIpKTsKICBwci5hcHBlbmRDaGlsZChlbCgic3BhbiIsbnVsbCx0ZXh0KSk7CiAgYm94LmFwcGVuZENoaWxkKHByKTsKICByZXR1cm4gYm94Owp9CmZ1bmN0aW9uIHJlbmRlclN0ZCh0LGIpewogIGIuYXBwZW5kQ2hpbGQocHJvbXB0Um93KHQucHJvbXB0LCB0LnByb21wdExlYWQpKTsKICBpZih0LmNob29zZU9uZSl7CiAgICB2YXIgYyA9IGVsKCJkaXYiLCJjbHAtc3BrLWNob29zZTEiLCI8ZGl2IGNsYXNzPSdlJz5DaG9vc2UgT05FOjwvZGl2PjxkaXYgY2xhc3M9J2UnIHN0eWxlPSdtYXJnaW4tdG9wOjZweCc+RUlUSEVSPC9kaXY+PGRpdj4iK3QuY2hvb3NlT25lWzBdKyI8L2Rpdj48ZGl2IGNsYXNzPSdlJyBzdHlsZT0nbWFyZ2luLXRvcDo2cHgnPk9SPC9kaXY+PGRpdj4iK3QuY2hvb3NlT25lWzFdKyI8L2Rpdj4iKTsKICAgIGIuYXBwZW5kQ2hpbGQoYyk7CiAgfQogIGlmKHQuaW1nICYmIEQuaW1nc1t0LmltZ10pewogICAgdmFyIGltID0gZWwoImltZyIsImNscC1zcGstaW1nIik7IGltLnNyYyA9IEQuaW1nc1t0LmltZ107IGltLmFsdCA9IHQudHlwZUVuOwogICAgYi5hcHBlbmRDaGlsZChpbSk7CiAgfQogIGIuYXBwZW5kQ2hpbGQodGltZXJCbG9jayh0LmssIHQucHJlcCwgdC5yZWMsICJ0IikpOwp9CmZ1bmN0aW9uIHJlbmRlclQ1KHQsYixtZXRhRWwpewogIHZhciBwaCA9IFMucGhhc2VbdC5rXTsKICBpZihwaC5pbmRleE9mKCJjaG9vc2UiKT09PTApewogICAgYi5hcHBlbmRDaGlsZChwcm9tcHRSb3codC5jaG9vc2Uuc2l0dWF0aW9uKSk7CiAgICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLW5vdGUiLHQuY2hvb3NlLm5vdGUpKTsKICAgIHZhciBncmlkID0gZWwoImRpdiIsImNscC1zcGstb3B0cyIpOwogICAgdC5jaG9vc2Uub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG8saWR4KXsKICAgICAgdmFyIGNhcmQgPSBlbCgiZGl2IiwiY2xwLXNway1jYXJkIisoUy50NWNob2ljZVt0LmtdPT09aWR4PyIgc2VsIjoiIikpOwogICAgICBjYXJkLmFwcGVuZENoaWxkKGltZ1RpdGxlQnVsbGV0cyhvKSk7CiAgICAgIHZhciBwayA9IGVsKCJkaXYiLCJwaWNrIiwgUy50NWNob2ljZVt0LmtdPT09aWR4ID8gIlx1MjcxNCBTZWxlY3RlZCIgOiAiIik7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQocGspOwogICAgICBjYXJkLm9uY2xpY2sgPSBmdW5jdGlvbigpewogICAgICAgIFMudDVjaG9pY2VbdC5rXSA9IGlkeDsKICAgICAgICBncmlkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jbHAtc3BrLWNhcmQiKS5mb3JFYWNoKGZ1bmN0aW9uKGNkLGopewogICAgICAgICAgY2QuY2xhc3NOYW1lID0gImNscC1zcGstY2FyZCIrKGo9PT1pZHg\/IiBzZWwiOiIiKTsKICAgICAgICAgIGNkLnF1ZXJ5U2VsZWN0b3IoIi5waWNrIikudGV4dENvbnRlbnQgPSAoaj09PWlkeCk\/Ilx1MjcxNCBTZWxlY3RlZCI6IiI7CiAgICAgICAgfSk7CiAgICAgICAgY2J0bi5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CiAgICAgIH07CiAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoY2FyZCk7CiAgICB9KTsKICAgIGIuYXBwZW5kQ2hpbGQoZ3JpZCk7CiAgICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLWhpbnQiLFUuY2hvb3NlSGludCkpOwogICAgLyogY291bnRkb3duIGZvciBjaG9vc2UgcGhhc2UgKi8KICAgIHZhciB0cm93ID0gZWwoImRpdiIsImNscC1zcGstdGltZXJyb3ciKTsKICAgIHZhciB0bSA9IGVsKCJkaXYiLCJjbHAtc3BrLXRpbWVyIik7CiAgICB0bS5hcHBlbmRDaGlsZChlbCgic3BhbiIsImljIiwiXHVkODNkXHVkZDUyIikpOwogICAgdmFyIGxiID0gZWwoImRpdiIpOyBsYi5hcHBlbmRDaGlsZChlbCgiZGl2IiwibGIiLFUucHJlcFRpdGxlKSk7CiAgICB0bS5hcHBlbmRDaGlsZChsYik7CiAgICB2YXIgbiA9IGVsKCJzcGFuIiwibiIsU3RyaW5nKHQuY2hvb3NlLnByZXApKTsKICAgIHRtLmFwcGVuZENoaWxkKG4pOwogICAgdHJvdy5hcHBlbmRDaGlsZCh0bSk7CiAgICBiLmFwcGVuZENoaWxkKHRyb3cpOwogICAgdmFyIGN0ciA9IGVsKCJkaXYiLCJjbHAtc3BrLWN0ciIpOwogICAgdmFyIHN0YXJ0ID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHByaSIsVS5zdGFydFByZXApOwogICAgdmFyIGNidG4gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLFUuY29uZmlybUNob2ljZSk7CiAgICBjYnRuLnN0eWxlLmRpc3BsYXkgPSAoUy50NWNob2ljZVt0LmtdIT1udWxsKT8iaW5saW5lLWJsb2NrIjoibm9uZSI7CiAgICB2YXIgZ29TcGVhayA9IGZ1bmN0aW9uKCl7CiAgICAgIHN0b3BUaW1lcigpOwogICAgICBpZihTLnQ1Y2hvaWNlW3Qua109PW51bGwpIFMudDVjaG9pY2VbdC5rXSA9IDA7CiAgICAgIFMucGhhc2VbdC5rXSA9ICJzcGVhayI7CiAgICAgIHJlbmRlcigpOwogICAgfTsKICAgIHN0YXJ0Lm9uY2xpY2sgPSBmdW5jdGlvbigpewogICAgICBzdGFydC5kaXNhYmxlZCA9IHRydWU7CiAgICAgIFMucGhhc2VbdC5rXSA9ICJjaG9vc2UtcnVuIjsKICAgICAgY291bnRkb3duKHQuY2hvb3NlLnByZXAsIGZ1bmN0aW9uKGxlZnQpeyBuLnRleHRDb250ZW50ID0gU3RyaW5nKGxlZnQpOyB9LCBnb1NwZWFrKTsKICAgIH07CiAgICBjYnRuLm9uY2xpY2sgPSBnb1NwZWFrOwogICAgY3RyLmFwcGVuZENoaWxkKHN0YXJ0KTsgY3RyLmFwcGVuZENoaWxkKGNidG4pOwogICAgYi5hcHBlbmRDaGlsZChjdHIpOwogICAgaWYoUy5waGFzZVt0LmtdPT09ImNob29zZS1ydW4iKXsKICAgICAgc3RhcnQuZGlzYWJsZWQgPSB0cnVlOwogICAgICBjb3VudGRvd24odC5jaG9vc2UucHJlcCwgZnVuY3Rpb24obGVmdCl7IG4udGV4dENvbnRlbnQ9U3RyaW5nKGxlZnQpOyB9LCBnb1NwZWFrKTsKICAgIH0KICB9IGVsc2UgewogICAgbWV0YUVsLmlubmVySFRNTCA9IHBoYXNlZE1ldGEodCk7CiAgICBiLmFwcGVuZENoaWxkKHByb21wdFJvdyh0LnNwZWFrLnByb21wdCkpOwogICAgdmFyIGdyaWQgPSBlbCgiZGl2IiwiY2xwLXNway1vcHRzIik7CiAgICB2YXIgb3RoZXIgPSBlbCgiZGl2IiwiY2xwLXNway1jYXJkIHBsYWluIik7CiAgICBvdGhlci5hcHBlbmRDaGlsZChlbCgiZGl2IiwiaGQiLHQuc3BlYWsub3RoZXJMYWJlbCkpOwogICAgb3RoZXIuYXBwZW5kQ2hpbGQoaW1nVGl0bGVCdWxsZXRzKHQuc3BlYWsub3RoZXIpKTsKICAgIGdyaWQuYXBwZW5kQ2hpbGQob3RoZXIpOwogICAgdmFyIGNob3NlbiA9IHQuY2hvb3NlLm9wdGlvbnNbUy50NWNob2ljZVt0LmtdIT1udWxsID8gUy50NWNob2ljZVt0LmtdIDogMF07CiAgICB2YXIgbWluZSA9IGVsKCJkaXYiLCJjbHAtc3BrLWNhcmQgcGxhaW4gc2VsIik7CiAgICBtaW5lLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJoZCIsVS55b3VyQ2hvaWNlKSk7CiAgICBtaW5lLmFwcGVuZENoaWxkKGltZ1RpdGxlQnVsbGV0cyhjaG9zZW4pKTsKICAgIGdyaWQuYXBwZW5kQ2hpbGQobWluZSk7CiAgICBiLmFwcGVuZENoaWxkKGdyaWQpOwogICAgYi5hcHBlbmRDaGlsZCh0aW1lckJsb2NrKHQuaywgdC5zcGVhay5wcmVwLCB0LnNwZWFrLnJlYywgInQ1cyIpKTsKICB9Cn0KZnVuY3Rpb24gaW1nVGl0bGVCdWxsZXRzKG8pewogIHZhciBib3ggPSBlbCgiZGl2Iik7CiAgaWYoby5pbWcgJiYgRC5pbWdzW28uaW1nXSl7IHZhciBpbSA9IGVsKCJpbWciKTsgaW0uc3JjID0gRC5pbWdzW28uaW1nXTsgaW0uYWx0ID0gby50aXRsZTsgYm94LmFwcGVuZENoaWxkKGltKTsgfQogIGJveC5hcHBlbmRDaGlsZChlbCgiZGl2IiwidHQiLG8udGl0bGUpKTsKICB2YXIgdWwgPSBlbCgidWwiKTsKICBvLmJ1bGxldHMuZm9yRWFjaChmdW5jdGlvbih4KXsgdWwuYXBwZW5kQ2hpbGQoZWwoImxpIixudWxsLHgpKTsgfSk7CiAgYm94LmFwcGVuZENoaWxkKHVsKTsKICByZXR1cm4gYm94Owp9CgovKiAtLS0tLS0tLS0tIHByZXAvcmVjb3JkIGJsb2NrIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gdGltZXJCbG9jayhrZXksIHByZXBTZWNzLCByZWNTZWNzLCBtb2RlKXsKICB2YXIgYm94ID0gZWwoImRpdiIpOwogIHZhciB0cm93ID0gZWwoImRpdiIsImNscC1zcGstdGltZXJyb3ciKTsKICB2YXIgdG0gPSBlbCgiZGl2IiwiY2xwLXNway10aW1lciIpOwogIHZhciBpYyA9IGVsKCJzcGFuIiwiaWMiLCJcdWQ4M2RcdWRkNTIiKTsKICB2YXIgbGIgPSBlbCgiZGl2Iik7IHZhciBsYnQgPSBlbCgiZGl2IiwibGIiLFUucHJlcFRpdGxlKTsgbGIuYXBwZW5kQ2hpbGQobGJ0KTsKICB2YXIgbiA9IGVsKCJzcGFuIiwibiIsU3RyaW5nKHByZXBTZWNzKSk7CiAgdG0uYXBwZW5kQ2hpbGQoaWMpOyB0bS5hcHBlbmRDaGlsZChsYik7IHRtLmFwcGVuZENoaWxkKG4pOwogIHRyb3cuYXBwZW5kQ2hpbGQodG0pOyBib3guYXBwZW5kQ2hpbGQodHJvdyk7CiAgdmFyIHNwZWFrbm93ID0gZWwoImRpdiIsImNscC1zcGstc3BlYWtub3ciLCIiKTsgYm94LmFwcGVuZENoaWxkKHNwZWFrbm93KTsKICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7IGJveC5hcHBlbmRDaGlsZChjdHIpOwogIHZhciByZXZpZXdTbG90ID0gZWwoImRpdiIpOyBib3guYXBwZW5kQ2hpbGQocmV2aWV3U2xvdCk7CiAgdmFyIG1pY25vdGUgPSBlbCgiZGl2Iik7IGJveC5hcHBlbmRDaGlsZChtaWNub3RlKTsKCiAgZnVuY3Rpb24gc2hvd0lkbGUoKXsKICAgIGN0ci5pbm5lckhUTUwgPSAiIjsgc3BlYWtub3cudGV4dENvbnRlbnQgPSAiIjsKICAgIHRtLmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRpbWVyIjsgbGJ0LnRleHRDb250ZW50ID0gVS5wcmVwVGl0bGU7IGljLnRleHRDb250ZW50ID0gIlx1ZDgzZFx1ZGQ1MiI7IG4udGV4dENvbnRlbnQgPSBTdHJpbmcocHJlcFNlY3MpOwogICAgdmFyIHN0YXJ0ID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHByaSIsVS5zdGFydFByZXApOwogICAgc3RhcnQub25jbGljayA9IHN0YXJ0UHJlcDsKICAgIGN0ci5hcHBlbmRDaGlsZChzdGFydCk7CiAgICBpZihTLnJlY3Nba2V5XSkgc2hvd1JldmlldyhmYWxzZSk7CiAgfQogIGZ1bmN0aW9uIHN0YXJ0UHJlcCgpewogICAgZW5zdXJlTWljKGZ1bmN0aW9uKCl7CiAgICAgIGN0ci5pbm5lckhUTUwgPSAiIjsKICAgICAgdmFyIHNraXAgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLFUuc2tpcFByZXApOwogICAgICBza2lwLm9uY2xpY2sgPSBmdW5jdGlvbigpeyBzdG9wVGltZXIoKTsgc3RhcnRSZWMoKTsgfTsKICAgICAgY3RyLmFwcGVuZENoaWxkKHNraXApOwogICAgICBjb3VudGRvd24ocHJlcFNlY3MsIGZ1bmN0aW9uKGxlZnQpeyBuLnRleHRDb250ZW50ID0gU3RyaW5nKGxlZnQpOyB9LCBmdW5jdGlvbigpeyBzdGFydFJlYygpOyB9KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBzdGFydFJlYygpewogICAgYmVlcCgyKTsKICAgIHRtLmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRpbWVyIHJlYyI7CiAgICBpYy5pbm5lckhUTUwgPSAiPHNwYW4gY2xhc3M9J2NscC1zcGstZG90Jz48L3NwYW4+IjsKICAgIG4udGV4dENvbnRlbnQgPSBTdHJpbmcocmVjU2Vjcyk7CiAgICBjdHIuaW5uZXJIVE1MID0gIiI7CiAgICB2YXIgc3RvcHBlZCA9IGZhbHNlOwogICAgdmFyIGhhdmVNaWMgPSAoUy5taWNTdGF0ZT09PSJvayIgJiYgUy5zdHJlYW0pOwogICAgbGJ0LnRleHRDb250ZW50ID0gaGF2ZU1pYyA\/IFUucmVjVGl0bGUgOiBVLnRpbWVyT25seTsKICAgIHNwZWFrbm93LnRleHRDb250ZW50ID0gVS5zcGVha05vdzsKICAgIG1pY25vdGUuaW5uZXJIVE1MID0gaGF2ZU1pYyA\/ICIiIDogIjxkaXYgY2xhc3M9J2NscC1zcGstbWljJz4iK1UubWljQmxvY2tlZCsiPC9kaXY+IjsKICAgIHZhciB0MCA9IERhdGUubm93KCk7CiAgICB2YXIgZmluaXNoID0gZnVuY3Rpb24oKXsKICAgICAgaWYoc3RvcHBlZCkgcmV0dXJuOyBzdG9wcGVkID0gdHJ1ZTsKICAgICAgc3RvcFRpbWVyKCk7IGJlZXAoMSk7CiAgICAgIHNwZWFrbm93LnRleHRDb250ZW50ID0gIiI7CiAgICAgIHZhciBzZWNzID0gTWF0aC5taW4ocmVjU2VjcywgTWF0aC5yb3VuZCgoRGF0ZS5ub3coKS10MCkvMTAwMCkpOwogICAgICBpZihoYXZlTWljICYmIFMucmVjb3JkZXIpewogICAgICAgIFMucmVjb3JkZXIub25zdG9wID0gZnVuY3Rpb24oKXsKICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoUy5jaHVua3MsIFMubWltZT97dHlwZTpTLm1pbWV9OnVuZGVmaW5lZCk7CiAgICAgICAgICBpZihTLnJlY3Nba2V5XSAmJiBTLnJlY3Nba2V5XS51cmwpeyB0cnl7IFVSTC5yZXZva2VPYmplY3RVUkwoUy5yZWNzW2tleV0udXJsKTsgfWNhdGNoKGUpe30gfQogICAgICAgICAgUy5yZWNzW2tleV0gPSB7IGJsb2I6IGJsb2IsIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgc2Vjczogc2VjcyB9OwogICAgICAgICAgUy5yZWNvcmRlciA9IG51bGw7CiAgICAgICAgICBzaG93SWRsZSgpOyBzaG93UmV2aWV3KHRydWUpOwogICAgICAgIH07CiAgICAgICAgdHJ5eyBTLnJlY29yZGVyLnN0b3AoKTsgfWNhdGNoKGUpeyBTLnJlY3Nba2V5XSA9IHtibG9iOm51bGwsdXJsOm51bGwsc2VjczpzZWNzfTsgc2hvd0lkbGUoKTsgc2hvd1Jldmlldyh0cnVlKTsgfQogICAgICB9IGVsc2UgewogICAgICAgIFMucmVjc1trZXldID0geyBibG9iOm51bGwsIHVybDpudWxsLCBzZWNzOiBzZWNzIH07CiAgICAgICAgc2hvd0lkbGUoKTsgc2hvd1Jldmlldyh0cnVlKTsKICAgICAgfQogICAgfTsKICAgIGlmKGhhdmVNaWMpewogICAgICBTLmNodW5rcyA9IFtdOwogICAgICB0cnl7CiAgICAgICAgUy5yZWNvcmRlciA9IFMubWltZSA\/IG5ldyBNZWRpYVJlY29yZGVyKFMuc3RyZWFtLHttaW1lVHlwZTpTLm1pbWV9KSA6IG5ldyBNZWRpYVJlY29yZGVyKFMuc3RyZWFtKTsKICAgICAgICBTLnJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IGZ1bmN0aW9uKGV2KXsgaWYoZXYuZGF0YSAmJiBldi5kYXRhLnNpemUpIFMuY2h1bmtzLnB1c2goZXYuZGF0YSk7IH07CiAgICAgICAgUy5yZWNvcmRlci5zdGFydCgpOwogICAgICB9Y2F0Y2goZSl7IFMucmVjb3JkZXIgPSBudWxsOyBoYXZlTWljID0gZmFsc2U7IGxidC50ZXh0Q29udGVudCA9IFUudGltZXJPbmx5OyB9CiAgICB9CiAgICB2YXIgc3RvcCA9IGVsKCJidXR0b24iLCJjbHAtc3BrLWJ0biB3YXJuIixVLnN0b3BSZWMpOwogICAgc3RvcC5vbmNsaWNrID0gZmluaXNoOwogICAgY3RyLmFwcGVuZENoaWxkKHN0b3ApOwogICAgY291bnRkb3duKHJlY1NlY3MsIGZ1bmN0aW9uKGxlZnQpeyBuLnRleHRDb250ZW50ID0gU3RyaW5nKGxlZnQpOyB9LCBmaW5pc2gpOwogIH0KICBmdW5jdGlvbiBzaG93UmV2aWV3KHNjcm9sbFRvKXsKICAgIHZhciByID0gUy5yZWNzW2tleV07IGlmKCFyKSByZXR1cm47CiAgICByZXZpZXdTbG90LmlubmVySFRNTCA9ICIiOwogICAgdmFyIHJ2ID0gZWwoImRpdiIsImNscC1zcGstcmV2aWV3Iik7CiAgICBydi5hcHBlbmRDaGlsZChlbCgiZGl2Iiwib2siLCJcdTI3MTQgIitVLnJlY29yZGVkKyIgKCIrci5zZWNzKyJzKSIpKTsKICAgIGlmKHIudXJsKXsKICAgICAgdmFyIGF1ID0gZWwoImF1ZGlvIik7IGF1LmNvbnRyb2xzID0gdHJ1ZTsgYXUuc3JjID0gci51cmw7CiAgICAgIHJ2LmFwcGVuZENoaWxkKGF1KTsKICAgICAgdmFyIHJvdyA9IGVsKCJkaXYiLCJjbHAtc3BrLWN0ciIpOwogICAgICB2YXIgZGwgPSBlbCgiYSIsImNscC1zcGstYnRuIixVLmRvd25sb2FkKTsKICAgICAgZGwuaHJlZiA9IHIudXJsOyBkbC5kb3dubG9hZCA9ICJjZWxwaXAtcyIrRC5zZXQrInQiK0QudGVzdCsiLXRhc2siKyhrZXk9PT0idyI\/IjAiOmtleS5yZXBsYWNlKCJ0IiwiIikpKyIuIitTLmV4dDsKICAgICAgcm93LmFwcGVuZENoaWxkKGRsKTsKICAgICAgcnYuYXBwZW5kQ2hpbGQocm93KTsKICAgIH0KICAgIHJldmlld1Nsb3QuYXBwZW5kQ2hpbGQocnYpOwogICAgaWYoc2Nyb2xsVG8peyB0cnl7IHJ2LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoiY2VudGVyIn0pOyB9Y2F0Y2goZSl7fSB9CiAgfQogIHNob3dJZGxlKCk7CiAgcmV0dXJuIGJveDsKfQoKLyogLS0tLS0tLS0tLSB0aXBzL3NhbXBsZXMgYWNjb3JkaW9uIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gYWNjb3JkaW9uKHQpewogIHZhciBhY2MgPSBlbCgiZGl2IiwiY2xwLXNway1hY2MiKTsKICB2YXIgYnRuID0gZWwoImJ1dHRvbiIsbnVsbCxVLnRpcHNUb2dnbGUpOwogIGJ0bi5vbmNsaWNrID0gZnVuY3Rpb24oKXsgYWNjLmNsYXNzTmFtZSA9IGFjYy5jbGFzc05hbWUuaW5kZXhPZigib3BlbiIpPi0xID8gImNscC1zcGstYWNjIiA6ICJjbHAtc3BrLWFjYyBvcGVuIjsgfTsKICBhY2MuYXBwZW5kQ2hpbGQoYnRuKTsKICB2YXIgYm9keSA9IGVsKCJkaXYiLCJjbHAtc3BrLWFjY2JvZHkiKTsKICB2YXIgdGFicyA9IGVsKCJkaXYiLCJjbHAtc3BrLXRhYnMiKTsKICB2YXIgcGFuZXMgPSBbXTsKICBmdW5jdGlvbiBhZGRUYWIobGFiZWwsIHBhbmVCdWlsZGVyKXsKICAgIHZhciBpID0gcGFuZXMubGVuZ3RoOwogICAgdmFyIHRiID0gZWwoImJ1dHRvbiIsImNscC1zcGstdGFiIisoaT09PTA\/IiBvbiI6IiIpLGxhYmVsKTsKICAgIHZhciBwbiA9IGVsKCJkaXYiLCJjbHAtc3BrLXRhYnBhbmUiKyhpPT09MD8iIG9uIjoiIikpOwogICAgcGFuZUJ1aWxkZXIocG4pOwogICAgdGIub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICAgIHRhYnMucXVlcnlTZWxlY3RvckFsbCgiLmNscC1zcGstdGFiIikuZm9yRWFjaChmdW5jdGlvbih4LGopeyB4LmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRhYiIrKGo9PT1pPyIgb24iOiIiKTsgfSk7CiAgICAgIGJvZHkucXVlcnlTZWxlY3RvckFsbCgiLmNscC1zcGstdGFicGFuZSIpLmZvckVhY2goZnVuY3Rpb24oeCxqKXsgeC5jbGFzc05hbWUgPSAiY2xwLXNway10YWJwYW5lIisoaj09PWk\/IiBvbiI6IiIpOyB9KTsKICAgIH07CiAgICB0YWJzLmFwcGVuZENoaWxkKHRiKTsgcGFuZXMucHVzaChwbik7CiAgfQogIGFkZFRhYihVLnRhYlRpcHMsIGZ1bmN0aW9uKHBuKXsKICAgIHZhciB1bCA9IGVsKCJ1bCIpOwogICAgdC50aXBzLmJ1bGxldHMuZm9yRWFjaChmdW5jdGlvbih4KXsgdWwuYXBwZW5kQ2hpbGQoZWwoImxpIixudWxsLHgpKTsgfSk7CiAgICBwbi5hcHBlbmRDaGlsZCh1bCk7CiAgICBwbi5hcHBlbmRDaGlsZChlbCgiZGl2IixudWxsLCI8Yj4iK1UudXNlZnVsUGhyYXNlcysiOjwvYj4iKSk7CiAgICB2YXIgcGggPSBlbCgiZGl2IiwiY2xwLXNway1waHIiKTsKICAgIHQudGlwcy5waHJhc2VzLmZvckVhY2goZnVuY3Rpb24oeCl7IHBoLmFwcGVuZENoaWxkKGVsKCJzcGFuIixudWxsLHgpKTsgfSk7CiAgICBwbi5hcHBlbmRDaGlsZChwaCk7CiAgfSk7CiAgaWYodC5zNikgYWRkVGFiKFUudGFiUzYsIGZ1bmN0aW9uKHBuKXsgcG4uYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstc2FtcGxlIHM2Iix0LnM2KSk7IH0pOwogIGlmKHQuczkpIGFkZFRhYihVLnRhYlM5LCBmdW5jdGlvbihwbil7IHBuLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLXNhbXBsZSIsdC5zOSkpOyB9KTsKICBpZighdC53YXJtdXApIGFkZFRhYihVLnRhYlJ1YnJpYywgZnVuY3Rpb24ocG4pewogICAgcG4uYXBwZW5kQ2hpbGQoZWwoImRpdiIsbnVsbCxVLnJ1YnJpY05vdGUpKTsKICAgIHZhciB0YiA9IGVsKCJ0YWJsZSIsImNscC1zcGstcnViIik7CiAgICBpZighUy5ydWJyaWNbdC5rXSkgUy5ydWJyaWNbdC5rXSA9IFswLDAsMCwwXTsKICAgIHZhciBlc3REID0gZWwoImRpdiIsImNscC1zcGstZXN0IiwiIik7CiAgICBVLnJ1YnJpY0NyaXQuZm9yRWFjaChmdW5jdGlvbihjcixjaSl7CiAgICAgIHZhciB0ciA9IGVsKCJ0ciIpOwogICAgICB0ci5hcHBlbmRDaGlsZChlbCgidGQiLG51bGwsY3IpKTsKICAgICAgdmFyIHRkID0gZWwoInRkIik7IHRkLnN0eWxlLndoaXRlU3BhY2UgPSAibm93cmFwIjsgdGQuc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgZm9yKHZhciBzMj0xO3MyPD01O3MyKyspewogICAgICAgIChmdW5jdGlvbihzdil7CiAgICAgICAgICB2YXIgc3AgPSBlbCgic3BhbiIsImNscC1zcGstc3RhciIrKFMucnVicmljW3Qua11bY2ldPj1zdj8iIG9uIjoiIiksIlx1MjYwNSIpOwogICAgICAgICAgc3Aub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIFMucnVicmljW3Qua11bY2ldID0gc3Y7CiAgICAgICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jbHAtc3BrLXN0YXIiKS5mb3JFYWNoKGZ1bmN0aW9uKHgsail7IHguY2xhc3NOYW1lID0gImNscC1zcGstc3RhciIrKGo8c3Y\/IiBvbiI6IiIpOyB9KTsKICAgICAgICAgICAgdXBkKCk7CiAgICAgICAgICB9OwogICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoc3ApOwogICAgICAgIH0pKHMyKTsKICAgICAgfQogICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgIHRiLmFwcGVuZENoaWxkKHRyKTsKICAgIH0pOwogICAgcG4uYXBwZW5kQ2hpbGQodGIpOwogICAgcG4uYXBwZW5kQ2hpbGQoZXN0RCk7CiAgICBwbi5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1ub3RlIixVLmVzdERpc2NsYWltZXIpKTsKICAgIGZ1bmN0aW9uIHVwZCgpewogICAgICB2YXIgYXJyID0gUy5ydWJyaWNbdC5rXTsgdmFyIGRvbmUgPSBhcnIuZXZlcnkoZnVuY3Rpb24oeCl7cmV0dXJuIHg+MDt9KTsKICAgICAgZXN0RC50ZXh0Q29udGVudCA9IGRvbmUgPyAoVS5lc3RpbWF0ZSsiICIrZXN0VGV4dChhcnIucmVkdWNlKGZ1bmN0aW9uKGEsYil7cmV0dXJuIGErYjt9LDApLzQpKSA6ICIiOwogICAgfQogICAgdXBkKCk7CiAgfSk7CiAgYm9keS5pbnNlcnRCZWZvcmUodGFicywgYm9keS5maXJzdENoaWxkKTsKICBwYW5lcy5mb3JFYWNoKGZ1bmN0aW9uKHBuKXsgYm9keS5hcHBlbmRDaGlsZChwbik7IH0pOwogIGFjYy5hcHBlbmRDaGlsZChib2R5KTsKICByZXR1cm4gYWNjOwp9CgovKiAtLS0tLS0tLS0tIGVuZCBzY3JlZW4gLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBlbmRTY3JlZW4oKXsKICB2YXIgcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXBhbmVsIGNscC1zcGstZW5kIik7CiAgdmFyIGJhciA9IGVsKCJkaXYiLCJjbHAtc3BrLWJhciIpOwogIGJhci5hcHBlbmRDaGlsZChlbCgic3BhbiIsInQiLEQuaGVhZGVyKyIgLSBTcGVha2luZyBcdTIwMTQgIitVLmVuZFRpdGxlKSk7CiAgcC5hcHBlbmRDaGlsZChiYXIpOwogIHZhciBiID0gZWwoImRpdiIsImNscC1zcGstYm9keSIpOwogIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsbnVsbCwiPGI+IitVLmVuZFRpdGxlKyI8L2I+ICIrVS5lbmRTdWIpKTsKICB2YXIgdGIgPSBlbCgidGFibGUiKTsKICB2YXIgdGhyID0gZWwoInRyIik7IFsiVGFzayIsIlR5cGUiLCJSZWNvcmRpbmciLCIiXS5mb3JFYWNoKGZ1bmN0aW9uKGgpeyB0aHIuYXBwZW5kQ2hpbGQoZWwoInRoIixudWxsLGgpKTsgfSk7CiAgdGIuYXBwZW5kQ2hpbGQodGhyKTsKICB2YXIgbnJlYyA9IDA7CiAgRC50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7CiAgICB2YXIgdHIgPSBlbCgidHIiKTsKICAgIHRyLmFwcGVuZENoaWxkKGVsKCJ0ZCIsbnVsbCwiPGI+IisodC53YXJtdXA\/IlciOnQubnVtKSsiPC9iPiIpKTsKICAgIHRyLmFwcGVuZENoaWxkKGVsKCJ0ZCIsbnVsbCx0LnR5cGVFbikpOwogICAgdmFyIHIgPSBTLnJlY3NbdC5rXTsKICAgIHZhciB0ZCA9IGVsKCJ0ZCIpOwogICAgaWYociAmJiByLnVybCl7IG5yZWMrKzsgdmFyIGF1ID0gZWwoImF1ZGlvIik7IGF1LmNvbnRyb2xzID0gdHJ1ZTsgYXUuc3JjID0gci51cmw7IHRkLmFwcGVuZENoaWxkKGF1KTsgfQogICAgZWxzZSBpZihyKXsgbnJlYysrOyB0ZC50ZXh0Q29udGVudCA9IHIuc2VjcysicyAoIitVLnRpbWVyT25seSsiKSI7IH0KICAgIGVsc2UgdGQuaW5uZXJIVE1MID0gIjxzcGFuIHN0eWxlPSdjb2xvcjojYzYyODI4Jz4iK1UuZW5kTm9SZWMrIjwvc3Bhbj4iOwogICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgdmFyIHRkMiA9IGVsKCJ0ZCIpOwogICAgdmFyIGdvID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIiwiXHUyMTkyIik7CiAgICBnby5vbmNsaWNrID0gZnVuY3Rpb24oKXsgUy5jdXI9aTsgcmVuZGVyKCk7IH07CiAgICB0ZDIuYXBwZW5kQ2hpbGQoZ28pOwogICAgdHIuYXBwZW5kQ2hpbGQodGQyKTsKICAgIHRiLmFwcGVuZENoaWxkKHRyKTsKICB9KTsKICBiLmFwcGVuZENoaWxkKHRiKTsKICAvKiBydWJyaWMgYXZnICovCiAgdmFyIHZhbHMgPSBbXTsKICBPYmplY3Qua2V5cyhTLnJ1YnJpYykuZm9yRWFjaChmdW5jdGlvbihrKXsgdmFyIGE9Uy5ydWJyaWNba107IGlmKGEgJiYgYS5ldmVyeShmdW5jdGlvbih4KXtyZXR1cm4geD4wO30pKSB2YWxzLnB1c2goYS5yZWR1Y2UoZnVuY3Rpb24oeCx5KXtyZXR1cm4geCt5O30sMCkvNCk7IH0pOwogIGlmKHZhbHMubGVuZ3RoKXsKICAgIHZhciBhdmcgPSB2YWxzLnJlZHVjZShmdW5jdGlvbihhLGMpe3JldHVybiBhK2M7fSwwKS92YWxzLmxlbmd0aDsKICAgIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstZXN0IixVLmVzdGltYXRlKyIgIitlc3RUZXh0KGF2ZykrIiAoIit2YWxzLmxlbmd0aCsiIHRhc2socykgc2VsZi1yYXRlZCkiKSk7CiAgICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLW5vdGUiLFUuZXN0RGlzY2xhaW1lcikpOwogIH0KICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7CiAgdmFyIHJlZG8gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLFUuZW5kUmVkbyk7CiAgcmVkby5vbmNsaWNrID0gZnVuY3Rpb24oKXsKICAgIE9iamVjdC5rZXlzKFMucmVjcykuZm9yRWFjaChmdW5jdGlvbihrKXsgaWYoUy5yZWNzW2tdJiZTLnJlY3Nba10udXJsKXsgdHJ5e1VSTC5yZXZva2VPYmplY3RVUkwoUy5yZWNzW2tdLnVybCk7fWNhdGNoKGUpe30gfSB9KTsKICAgIFMucmVjcyA9IHt9OyBTLnJ1YnJpYyA9IHt9OyBTLnQ1Y2hvaWNlID0ge307CiAgICBELnRhc2tzLmZvckVhY2goZnVuY3Rpb24odCl7IFMucGhhc2VbdC5rXSA9IHQucGhhc2VkPyJjaG9vc2UtaWRsZSI6ImlkbGUiOyB9KTsKICAgIFMuY3VyID0gLTE7IHJlbmRlcigpOwogIH07CiAgdmFyIHQyID0gZWwoImEiLCJjbHAtc3BrLWJ0biBwcmkiLFUuZW5kVDIrIiAiKyhELnRlc3Q9PT0xPzI6MSkrIiBcdTIxOTIiKTsgdDIuaHJlZiA9IEQub3RoZXJVcmw7CiAgdmFyIGh1YiA9IGVsKCJhIiwiY2xwLXNway1idG4iLFUuZW5kSHViKTsgaHViLmhyZWYgPSAiL2NlbHBpcC8iOwogIGN0ci5hcHBlbmRDaGlsZChyZWRvKTsgY3RyLmFwcGVuZENoaWxkKHQyKTsgY3RyLmFwcGVuZENoaWxkKGh1Yik7CiAgYi5hcHBlbmRDaGlsZChjdHIpOwogIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstbWljIixVLm1pY05vdGUpKTsKICBwLmFwcGVuZENoaWxkKGIpOwogIHJldHVybiBwOwp9CgovKiBleHBvc2UgZm9yIHRlc3RzICovCndpbmRvdy5DTFBTUEsgPSB7IHN0YXRlOiBTLCBkYXRhOiBELCBnb3RvOiBmdW5jdGlvbihpKXsgUy5jdXI9aTsgcmVuZGVyKCk7IH0sIHJlbmRlcjogcmVuZGVyIH07CnJlbmRlcigpOwp9KSgpOwo=\"));<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Speaking Set 12 Practice Test 2: all 8 official-style tasks with on-screen prep and recording timers, sample responses and self-assessment tips. Free, no sign-up.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-6471","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6471","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=6471"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6471\/revisions"}],"predecessor-version":[{"id":6506,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6471\/revisions\/6506"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6471"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}