{"id":6322,"date":"2026-07-10T13:56:49","date_gmt":"2026-07-10T13:56:49","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-4-test-2-reading\/"},"modified":"2026-07-12T03:24:47","modified_gmt":"2026-07-12T03:24:47","slug":"celpip-set-4-test-2-reading","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-4-test-2-reading\/","title":{"rendered":"CELPIP Reading \u2014 Set 4 \u00b7 Practice Test 2"},"content":{"rendered":"<div class=\"clpr-wrap\" id=\"clprWrap\">\n<section class=\"clpr-hero\">\n<div class=\"clpr-aurora\"><span><\/span><span><\/span><span><\/span><\/div>\n<div class=\"clpr-hero-badges\"> <span class=\"clpr-badge-brand\">AllEnglish4U<\/span> <span class=\"clpr-badge-set\">CELPIP General &middot; Set 4<\/span> <\/div>\n<h1>Reading Practice Test 2<\/h1>\n<p class=\"clpr-hero-sub\">4 parts &middot; 38 questions &middot; about 55 minutes. Read each passage and choose the best option for every drop-down. Official Paragon question set with verified answer key.<\/p>\n<div class=\"clpr-hero-chips\"> <span class=\"clpr-chip\">Part 1 &middot; Correspondence<\/span> <span class=\"clpr-chip\">Part 2 &middot; Apply a Diagram<\/span> <span class=\"clpr-chip\">Part 3 &middot; Information<\/span> <span class=\"clpr-chip\">Part 4 &middot; Viewpoints<\/span> <\/div>\n<p> <button class=\"clpr-cta\" id=\"clprStart\">Start the Reading Test<\/button> <\/section>\n<div class=\"clpr-toolbar\" id=\"clprToolbar\" hidden> <span class=\"clpr-score-chip\" id=\"clprScoreChip\">0 \/ 38 answered<\/span> <span class=\"clpr-toolbar-spacer\"><\/span> <button class=\"clpr-tbtn\" id=\"clprReset\">Reset<\/button> <button class=\"clpr-tbtn clpr-tbtn-check\" id=\"clprCheck\">Check answers<\/button> <\/div>\n<div class=\"clpr-sim\" id=\"clprSim\" hidden>\n<div class=\"clpr-dots\" id=\"clprDots\"><\/div>\n<div class=\"clpr-cat\" id=\"clprCat\"><\/div>\n<\/p><\/div>\n<div class=\"clpr-results\" id=\"clprResults\" hidden><\/div>\n<\/p><\/div>\n<p><script>eval(atob(\"J3VzZSBzdHJpY3QnOwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ0VMUElQIFJlYWRpbmcgXHUyMDE0IFByYWN0aWNlIFRlc3QgMiAoU2V0IDEpCiAgIFNvdXJjZTogUGFyYWdvbiBvZmZpY2lhbCAiUHJhY3RpY2UgVGVzdCAyIFNldCAxIC0gUmVhZGluZyIgKDM3IHBwKS4KICAgQWxsIHN0ZW1zLCBvcHRpb25zIGFuZCBrZXlzIHZlcmlmaWVkIGFnYWluc3QgdGhlIHByaW50ZWQgQW5zd2VyIEtleS4KICAgRGF0YSBtb2RlbDogcGFydHNbXSAtPiB7IHBhc3NhZ2UobGVmdCkgLCBibG9ja3NbXShyaWdodCkgfQogICAgIGJsb2NrLnR5cGU6ICdzdGVtbGlzdCcgfCAnY2xvemUnIHwgJ21hdGNoJwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KdmFyIFJEQVRBID0geyJ0ZXN0TGFiZWwiOiJQcmFjdGljZSBUZXN0IDIiLCJwYXJ0cyI6W3siaWQiOjEsIm5hbWUiOiJSZWFkaW5nIFBhcnQgMTogUmVhZGluZyBDb3JyZXNwb25kZW5jZSIsInRpbWUiOiIxMCBtaW51dGVzIiwicGFzc2FnZSI6eyJ0eXBlIjoidGV4dCIsImxhYmVsIjoiUmVhZCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UuIiwiaHRtbCI6IjxwPkRlYXIgUGV0ZXIsPC9wPjxwPkkgZmVlbCBiYWQgYWJvdXQgbm90IGJlaW5nIHRoZXJlIGZvciBteSBsaXR0bGUgYnJvdGhlciZyc3F1bztzIGJpZyBkYXkgdG9kYXkmbWRhc2g7eW91JnJzcXVvO3JlIGZpbmFsbHkgc2l4dGVlbiEgQXQgbGFzdCB5b3UgY2FuIGxlYXJuIHRvIGRyaXZlISBZb3UmcnNxdW87bGwgc29vbiBiZSByZWNlaXZpbmcgYSBwYWNrYWdlIGluIHRoZSBtYWlsIHRoYXQgd2lsbCBob3BlZnVsbHkgbWFrZSB1cCBmb3IgbXkgYWJzZW5jZS4gSSB3b24mcnNxdW87dCBydWluIHRoZSBzdXJwcmlzZSwgYnV0IGl0JnJzcXVvO3Mgc29tZXRoaW5nIHRvIGRvIHdpdGggbXVzaWMuIEkgZm91bmQgaXQgZHVyaW5nIG15IHRyYXZlbHMgaW4gU291dGggQW1lcmljYS48L3A+PHA+U3BlYWtpbmcgb2YgbXVzaWMsIE1vbSBhbmQgRGFkIHNhaWQgeW91JnJzcXVvO3JlIGdldHRpbmcgcmVhbGx5IGdvb2QgYXQgZ3VpdGFyISBJIGd1ZXNzIHRob3NlIGxlc3NvbnMgcGFpZCBvZmYuIEkgYWx3YXlzIHdhbnRlZCB0byBsZWFybiBhcyB3ZWxsLCBidXQgSSB3YXMgbmV2ZXIgYXMgcGFzc2lvbmF0ZSBhYm91dCBtdXNpYyBhcyB5b3UuIFlvdSZyc3F1bztsbCBoYXZlIHRvIHRlYWNoIG1lIHNvbWUgY2hvcmRzIHdoZW4gSSBnZXQgYmFjayBob21lIG5leHQgbW9udGguPC9wPjxwPkFzIGZvciBtZSwgdHJhdmVsaW5nIGhhcyBiZWVuIGluY3JlZGlibGUuIEkmcnNxdW87dmUganVzdCBzcGVudCB0aGUgcGFzdCB3ZWVrIGV4cGxvcmluZyB0aGUgRWN1YWRvcmlhbiBBbWF6b24gd2l0aCBsb2NhbCBndWlkZXMuIFRoZSByYWluZm9yZXN0IGdyb3dzIG9uIHlvdS4gQXQgZmlyc3QsIEkgZm91bmQgaXQgYSBiaXQgaW50aW1pZGF0aW5nIHdpdGggdGhlIGRlYWRseSBpbnNlY3RzIGFuZCBpbnRlbnNlIHdlYXRoZXIgY2hhbmdlcy4gQnV0IHNvb24gSSBzdGFydGVkIHNlZWluZyB0aGUgYmVhdXR5IG9mIGl0IGFsbDsgSSBjb3VsZCBwZWVyIHVuZGVyIGEgbGVhZiBhbmQgY29tZSBhY3Jvc3MgcmFpbmJvdy1jb2xvdXJlZCBpbnNlY3RzLCBhbmQsIHdoZW4gbG9va2luZyBvdmVyaGVhZCwgSSBjb3VsZCBzZWUgYSBmbG9jayBvZiBiZWF1dGlmdWwsIGNvbG91cmZ1bCBwYXJyb3RzIHBhc3NpbmcgYnkuIEV2ZXJ5dGhpbmcgaGFzIGJlZW4gZ3JlYXQgc28gZmFyLCBleGNlcHQgd2hlbiBJIHdhcyBiaXR0ZW4gYnkgYSBibGFjayBhbnQgdGhlIHNpemUgb2YgbXkgdGh1bWIuIEFwcGFyZW50bHkgaXQmcnNxdW87cyBjYWxsZWQgYSBCdWxsZXQgQW50IGJlY2F1c2UgYmVpbmcgYml0dGVuIGZlZWxzIGxpa2UgZ2V0dGluZyBzaG90ISBJdCBjZXJ0YWlubHkgd2FzIHRoZSB3b3JzdCBwYWluIEkmcnNxdW87dmUgZXZlciBleHBlcmllbmNlZC4gU3RpbGwsIEkgdG9vayBhIHBpY3R1cmUgb2YgaXQgYW55d2F5IGFuZCBhbHNvIG9uZSBvZiBteSBzd29sbGVuIGFybS4gSSZyc3F1bzttIGZpbmUgbm93IGFuZCByZWFkeSBmb3IgbW9yZSBhZHZlbnR1cmVzLjwvcD48cD5JJnJzcXVvO20gY3VycmVudGx5IGluIFF1aXRvLCB0aGUgY2FwaXRhbCBjaXR5IG9mIEVjdWFkb3IgYW5kIGFsc28gbXkgZmluYWwgc3RvcC4gSXQgd2FzIG9ubHkgYSAyMC1taW51dGUgcGxhbmUgcmlkZSBmcm9tIHRoZSByYWluZm9yZXN0LiBUaGUgd2VhdGhlciBpcyBwbGVhc2FudGx5IGRpZmZlcmVudDogZHJ5IGFuZCBjb29sLiBUaGUgcGVvcGxlIGFyZSBhbWF6aW5nISBFdmVyeW9uZSBpcyB2ZXJ5IHdlbGNvbWluZyBhbmQgaGVscGZ1bC4gV2hlbiBJIGZpcnN0IGdvdCBoZXJlLCBJIGRpZG4mcnNxdW87dCBoYXZlIGEgbWFwLCBzbyBJIHdhbGtlZCBpbnRvIGEgc3RvcmUgYW5kIGFza2VkIHRoZSBzaG9wIG93bmVyIHdoZXJlIG15IGhvc3RlbCB3YXMuIFNoZSBjb3VsZG4mcnNxdW87dCByZWFsbHkgc3BlYWsgRW5nbGlzaCwgc28gc2hlIGxvY2tlZCB1cCBoZXIgc2hvcCBhbmQgdG9vayBtZSBhbGwgdGhlIHdheSB0aGVyZSwgd2hpY2ggd2FzIDIga2lsb21ldHJlcyBhd2F5ISBBbWF6aW5nISBJZiBvbmx5IHBlb3BsZSB3ZXJlIGxpa2UgdGhhdCBiYWNrIGhvbWUhPC9wPjxwPkkgY2FuJnJzcXVvO3Qgd2FpdCB0byBzZWUgeW91LiBJIHByb21pc2Ugd2UmcnNxdW87bGwgY2VsZWJyYXRlIHlvdXIgYmlydGhkYXkgcHJvcGVybHkgd2hlbiBJIHJldHVybiE8L3A+PHA+U3VzaWU8L3A+In0sImJsb2NrcyI6W3sidHlwZSI6InN0ZW1saXN0IiwiaW5zdHIiOiJVc2luZyB0aGUgZHJvcC1kb3duIG1lbnUgKCAmIzk2NjI7ICksIGNob29zZSB0aGUgYmVzdCBvcHRpb24gYWNjb3JkaW5nIHRvIHRoZSBpbmZvcm1hdGlvbiBnaXZlbiBpbiB0aGUgbWVzc2FnZS4iLCJpdGVtcyI6W3sibiI6MSwicHJlIjoiU3VzaWUiLCJvcHRpb25zIjpbIndpbGwgYmUgYmFjayBmb3IgUGV0ZXJcdTIwMTlzIGJpcnRoZGF5LiIsInNlbnQgUGV0ZXIgYSBiaXJ0aGRheSBnaWZ0LiIsIndpbGwgdHJhdmVsIHRvIFNvdXRoIEFtZXJpY2EuIiwiZm9yZ290IFBldGVyXHUyMDE5cyBiaXJ0aGRheS4iXSwia2V5IjoyfSx7Im4iOjIsInByZSI6IlBldGVyIiwib3B0aW9ucyI6WyJoYXMgaGFkIHNvbWUgZ3VpdGFyIGxlc3NvbnMuIiwiaXMgdGVhY2hpbmcgZ3VpdGFyIGxlc3NvbnMuIiwiaG9wZXMgdG8gcGxheSB0aGUgZ3VpdGFyLiIsImdvdCBhIGd1aXRhciBmcm9tIGhpcyBwYXJlbnRzLiJdLCJrZXkiOjF9LHsibiI6MywicHJlIjoiU3VzaWUiLCJvcHRpb25zIjpbInZpc2l0ZWQgdGhlIGp1bmdsZSB3aXRoIEVjdWFkb3JpYW4gZ3VpZGVzLiIsImlzIHRyYXZlbGluZyB3aXRoIGZyaWVuZHMgdG8gdGhlIGxvY2FsIGp1bmdsZS4iLCJlbmpveWVkIHRoZSB3YXJtIGp1bmdsZSB3ZWF0aGVyLiIsIndhcyBzaG90IGR1cmluZyBoZXIgdHJpcCB0byB0aGUgcmFpbmZvcmVzdC4iXSwia2V5IjoxfSx7Im4iOjQsInByZSI6IlN1c2llIiwib3B0aW9ucyI6WyJmZWxsIGluc3RhbnRseSBpbiBsb3ZlIHdpdGggdGhlIHJhaW5mb3Jlc3QuIiwiZW5qb3llZCB0aGUgcmFpbmZvcmVzdFx1MjAxOXMgd2VhdGhlci4iLCJkZWxpZ2h0ZWQgaW4gdGhlIHNvdW5kcyBvZiB0aGUgcmFpbmZvcmVzdC4iLCJiZWdhbiB0byBlbmpveSB0aGUgcmFpbmZvcmVzdC4iXSwia2V5Ijo0fSx7Im4iOjUsInByZSI6IlN1c2llIGlzIG5vdyIsIm9wdGlvbnMiOlsicGFja2luZyB0byByZXR1cm4gaG9tZS4iLCJlbmpveWluZyB0aGUgbGFzdCBwYXJ0IG9mIGhlciB0cmlwLiIsImZseWluZyB0byB0aGUgY2FwaXRhbCBjaXR5LiIsImV4cGxvcmluZyB0aGUgRWN1YWRvcmlhbiBqdW5nbGUuIl0sImtleSI6Mn0seyJuIjo2LCJwcmUiOiJJbiBRdWl0bywgU3VzaWUgd2FzIHN1cnByaXNlZCBieSB0aGUiLCJvcHRpb25zIjpbInBlb3BsZVx1MjAxOXMgZ29vZHdpbGwuIiwiZGlzdGFuY2UgdG8gdGhlIGhvc3RlbC4iLCJjb29sZXIgd2VhdGhlci4iLCJhdmFpbGFiaWxpdHkgb2YgbWFwcy4iXSwia2V5IjoxfV19LHsidHlwZSI6ImNsb3plIiwiaW5zdHIiOiJIZXJlIGlzIGEgcmVzcG9uc2UgdG8gdGhlIG1lc3NhZ2UuIENvbXBsZXRlIHRoZSByZXNwb25zZSBieSBmaWxsaW5nIGluIHRoZSBibGFua3MuIFNlbGVjdCB0aGUgYmVzdCBjaG9pY2UgZm9yIGVhY2ggYmxhbmsgZnJvbSB0aGUgZHJvcC1kb3duIG1lbnUgKCAmIzk2NjI7ICkuIiwiYm9keSI6WyJIZXkgU3VzaWUsXG5cbllvdVx1MjAxOXJlIHJpZ2h0IHRoYXQgSSAiLHsiYiI6Nywib3B0aW9ucyI6WyJ3YW50IHRvIHZpc2l0IEVjdWFkb3IiLCJhbSBsZWFybmluZyBndWl0YXIiLCJjYW4gbGVhcm4gdG8gZHJpdmUiLCJhbSBjZWxlYnJhdGluZyBteSBiaXJ0aGRheSJdLCJrZXkiOjN9LCIgbm93LiBUaGUgdHJvdWJsZSBpcyB0aGF0IGl0XHUyMDE5cyByZWFsbHkgZXhwZW5zaXZlLiBTaW5jZSB5b3VcdTIwMTlsbCBiZSBob21lIHNvb24sIEkgZmlndXJlZCBvdXQgYSBncmVhdCBzb2x1dGlvbi4gWW91IGNhbiB0ZWFjaCBtZSBpbiBleGNoYW5nZSBmb3IgdGhlICIseyJiIjo4LCJvcHRpb25zIjpbImRyaXZpbmcgbGVzc29ucyIsInBhY2thZ2UiLCJndWl0YXIgbGVzc29ucyIsImZvcmVpZ24gYWR2ZW50dXJlcyJdLCJrZXkiOjN9LCIgeW91IHdhbnQuXG5cbklcdTIwMTltIHNvcnJ5IHRvIGhlYXIgYWJvdXQgeW91ciBuYXN0eSBleHBlcmllbmNlIGluIHRoZSBqdW5nbGUuIEkganVzdCBnb29nbGVkIHRoZSBhbnQhIEl0IGxvb2tzIGh1Z2UsIGFuZCBJIHJlYWQgdGhhdCBpdHMgYml0ZSBjYW4gYmUgIix7ImIiOjksIm9wdGlvbnMiOlsiaGFybWZ1bCIsImhhcm1sZXNzIiwiaXRjaHkiLCJpbnNpZ25pZmljYW50Il0sImtleSI6MX0sIi4gWW91IG1heSB3YW50IHRvIHNlZSBhIGRvY3RvciB3aGVuIHlvdSBnZXQgaG9tZS5cblxuQnkgdGhlIHdheSwgSSB3b25kZXIgaWYgdGhhdCBFY3VhZG9yaWFuIHNob3BrZWVwZXIgd2FzIGp1c3QgIix7ImIiOjEwLCJvcHRpb25zIjpbImJlaW5nIGZyaWVuZGx5Iiwic2VsbGluZyBhIG1hcCIsImFza2luZyBmb3IgaGVscCIsImJlaW5nIHVuY29vcGVyYXRpdmUiXSwia2V5IjoxfSwiIGJlY2F1c2UgeW91IHdlcmUgYSBmb3JlaWduZXIuIERvIHlvdSB0aGluayBzaGUgd291bGQgc2h1dCB1cCBoZXIgYnVzaW5lc3MgYW5kICIseyJiIjoxMSwib3B0aW9ucyI6WyJzaG93IHRoZSB3YXkiLCJnaXZlIGRpcmVjdGlvbnMiLCJ0YWtlIGEgcmVzdCIsImZpbmQgYSBtYXAiXSwia2V5IjoxfSwiIGlmIHlvdSBsaXZlZCBpbiBRdWl0bz9cblxuRmluYWxseSwgTW9tIHNheXMgdG8gZW1haWwgaGVyIGFuZCB0ZWxsIGhlciB3aGVuIHlvdXIgZmxpZ2h0IGdldHMgaW4uXG5cbkxvdmUsXG5QZXRlciJdfV19LHsiaWQiOjIsIm5hbWUiOiJSZWFkaW5nIFBhcnQgMjogUmVhZGluZyB0byBBcHBseSBhIERpYWdyYW0iLCJ0aW1lIjoiOCBtaW51dGVzIiwicGFzc2FnZSI6eyJ0eXBlIjoidGV4dCIsImxhYmVsIjoiUmVhZCB0aGUgZm9sbG93aW5nIGRpYWdyYW0uIiwiaHRtbCI6IjxzdHlsZT4uYWUtcmVzdW1le2JvcmRlcjoxcHggc29saWQgI2QxYzRiMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjAgMCAxNHB4O2ZvbnQtc2l6ZToxNHB4O292ZXJmbG93OmhpZGRlbn0uYWUtcnpoZWFke2JhY2tncm91bmQ6IzZkNWE0Yjtjb2xvcjojZmZmO3BhZGRpbmc6MTJweCAxNnB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXJ9LmFlLXJ6aGVhZCBoM3ttYXJnaW46MDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjYwMH0uYWUtcnpkYXRle2JhY2tncm91bmQ6I2M4NzYzYztjb2xvcjojZmZmO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czozcHg7Zm9udC1zaXplOjEzcHg7d2hpdGUtc3BhY2U6bm93cmFwfS5hZS1yZXN1bWU+KntwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHh9LmFlLXJ6Y29udGFjdHttYXJnaW46MTBweCAwO2NvbG9yOiMzMzN9LmFlLXJlc3VtZSBoNHtjb2xvcjojYzg3NjNjO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzoxcHg7Zm9udC1zaXplOjE0cHg7bWFyZ2luOjEycHggMCA0cHh9LmFlLXJlc3VtZSB1bHttYXJnaW46NHB4IDA7cGFkZGluZy1sZWZ0OjM0cHh9LmFlLXJlc3VtZSBsaXttYXJnaW46MnB4IDB9LmFlLXJlc3VtZSBwe21hcmdpbjo0cHggMDtsaW5lLWhlaWdodDoxLjR9LmFlLXJ6cmVme2NvbG9yOiNjODc2M2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOjFweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLXRvcDoxMnB4fTwvc3R5bGU+PGRpdiBjbGFzcz1cImFlLXJlc3VtZVwiPjxkaXYgY2xhc3M9XCJhZS1yemhlYWRcIj48aDM+TWljaGFlbCBBZGFtIEplbnNvbjwvaDM+PHNwYW4gY2xhc3M9XCJhZS1yemRhdGVcIj41LzMwLzIwMTU8L3NwYW4+PC9kaXY+PHAgY2xhc3M9XCJhZS1yemNvbnRhY3RcIj42OTE5IDE4MiBTdHJlZXQsIE9ha3JpZGdlLCBCcml0aXNoIENvbHVtYmlhPGJyPjc4OS01NTUtMTIzNDxicj5tYWplbnNvbkBlbWFpbC5jb208L3A+PGg0Pk9iamVjdGl2ZXM8L2g0PjxwPlRvIG9idGFpbiBhIGZ1bGwtdGltZSBwb3NpdGlvbiBhcyBhIGNhc2hpZXIsIHdoaWNoIHdpbGwgYWxsb3cgbWUgdG8gZ2FpbiBleHBlcmllbmNlLCBleHBhbmQgbXkgc2tpbGwgc2V0LCBhbmQgcHVyc3VlIGxlYWRlcnNoaXAgb3Bwb3J0dW5pdGllcy48L3A+PGg0PlNraWxscyBQcm9maWxlPC9oND48dWw+PGxpPk1vcmUgdGhhbiA1IHllYXJzIG9mIGV4cGVyaWVuY2UgaW4gY3VzdG9tZXIgc2VydmljZTwvbGk+PGxpPlByb3ZlbiByZWNvcmQgb2YgYWNjdXJhdGVseSBjb21wbGV0aW5nIGNhc2ggdHJhbnNhY3Rpb25zPC9saT48bGk+RXhwZXJpZW5jZWQgaW4gb3BlcmF0aW5nIHBvaW50IG9mIHNhbGUgc3lzdGVtczwvbGk+PGxpPkV4Y2VsbGVudCB2ZXJiYWwgYW5kIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBza2lsbHM8L2xpPjwvdWw+PGg0PkVkdWNhdGlvbjwvaDQ+PHA+PHN0cm9uZz5VcHBlciBIZWlnaHRzIEhpZ2ggU2Nob29sLCBNYWdnaWV2aWxsZSwgQWxiZXJ0YTwvc3Ryb25nPiAmbWRhc2g7IEp1bmUgMjAwNTwvcD48dWw+PGxpPkRvZ3dvb2QgSGlnaCBTY2hvb2wgRGlwbG9tYSwgR1BBIDMuMjwvbGk+PGxpPkV4dHJhY3VycmljdWxhciBBY3Rpdml0aWVzOiBJbnRyYW11cmFsIFZvbGxleWJhbGwsIFRoZWF0cmljYWwgQ2x1YiwgWWVhcmJvb2sgQ29tbWl0dGVlPC9saT48L3VsPjxoND5SZWNlbnQgRXhwZXJpZW5jZTwvaDQ+PHA+PHN0cm9uZz5DYXNoaWVyIHwgQ2l0eSBGb29kcywgT2FrcmlkZ2UsIEJDPC9zdHJvbmc+ICZtZGFzaDsgTWF5IDIwMDkgJm5kYXNoOyBQcmVzZW50PC9wPjx1bD48bGk+Q29tcGxldGVkIGdyb2NlcnkgdHJhbnNhY3Rpb25zIGVmZmljaWVudGx5IHdoaWxlIG1haW50YWluaW5nIGEgY2xlYW4gd29yayBhcmVhIHRvIG1lZXQgRm9vZFNhZmUgc3RhbmRhcmRzLjwvbGk+PGxpPlJlY2VpdmVkIGFuIGF3YXJkIGZvciBzdXJwYXNzaW5nIHdlZWtseSBzYWxlcyB0YXJnZXRzIGZvciB0aGUgJmxkcXVvO0RlYWwgb2YgdGhlIFdlZWsuJnJkcXVvOzwvbGk+PC91bD48cD48c3Ryb25nPkNhc2hpZXIgfCBXaWxsb3cgVmlkZW8sIE9ha3JpZGdlLCBCQzwvc3Ryb25nPiAmbWRhc2g7IEZlYnJ1YXJ5IDIwMDUgJm5kYXNoOyBBcHJpbCAyMDA5PC9wPjx1bD48bGk+UGVyZm9ybWVkIGNhc2gsIGRlYml0LCBhbmQgY3JlZGl0IHRyYW5zYWN0aW9ucyB3aGlsZSBncmVldGluZyBndWVzdHMgYW5kIHByb3ZpZGluZyBleGNlbGxlbnQgY3VzdG9tZXIgc2VydmljZS48L2xpPjxsaT5Qcm9tb3RlZCB0aGUgY29tcGFueSZyc3F1bztzIGN1c3RvbWVyIGxveWFsdHkgcHJvZ3JhbSBhcyB3ZWxsIGFzIG9mZmVycyBhbmQgc2FsZXMuPC9saT48L3VsPjxoND5BY3Rpdml0aWVzPC9oND48dWw+PGxpPlZvbHVudGVlcmluZyBhdCB0aGUgT2FrcmlkZ2UgUmVkIENyb3NzLjwvbGk+PGxpPkxlYXJuaW5nIG5ldyBsYW5ndWFnZXMsIGluY2x1ZGluZyBGcmVuY2ggYW5kIEdlcm1hbi48L2xpPjxsaT5SZWd1bGFyIHBhcnRpY2lwYW50IG9mIHRoZSBPYWtyaWRnZSBsaWJyYXJ5IGJvb2sgY2x1Yi48L2xpPjxsaT5NZW1iZXIgb2YgdGhlIHJlZ2lvbmFsIHN5bmNocm9uaXplZCBzd2ltbWluZyB0ZWFtLjwvbGk+PC91bD48cCBjbGFzcz1cImFlLXJ6cmVmXCI+UmVmZXJlbmNlcyBhdmFpbGFibGUgdXBvbiByZXF1ZXN0PC9wPjwvZGl2PiJ9LCJibG9ja3MiOlt7InR5cGUiOiJjbG96ZSIsImluc3RyIjoiUmVhZCB0aGUgZm9sbG93aW5nIGVtYWlsIG1lc3NhZ2UgYWJvdXQgdGhlIGRpYWdyYW0gb24gdGhlIGxlZnQuIENvbXBsZXRlIHRoZSBlbWFpbCBieSBmaWxsaW5nIGluIHRoZSBibGFua3MuIFNlbGVjdCB0aGUgYmVzdCBjaG9pY2UgZm9yIGVhY2ggYmxhbmsgZnJvbSB0aGUgZHJvcC1kb3duIG1lbnUgKCAmIzk2NjI7ICkuIiwiYm9keSI6WyJTdWJqZWN0OiBKb2IgQXBwbGljYXRpb25cblRvOiBNaWNoYWVsIEplbnNvblxuRnJvbTogQWxmb25zbyBDb3BlbGxpXG5cbkRlYXIgTWljaGFlbCxcblxuSXQgd2FzIGEgcGxlYXN1cmUgdG8gbWVldCB5b3UgeWVzdGVyZGF5LiBUaGFuayB5b3UgZm9yIGRyb3BwaW5nIG9mZiB5b3VyICIseyJiIjoxLCJvcHRpb25zIjpbImNvbnRhY3QiLCJpbnZpdGF0aW9uIiwiYXBwbGljYXRpb24iLCJhZHZlcnRpc2VtZW50Il0sImtleSI6M30sIiBmb3IgdGhlIHBvc2l0aW9uIG9mIGNhc2hpZXIgYXQgQWxmb25zb1x1MjAxOXMgR3JvY2VyaWVzLiBCYXNlZCBvbiB5b3VyIHByaW9yICIseyJiIjoyLCJvcHRpb25zIjpbImN1c3RvbWVyIHNlcnZpY2UiLCJlbXBsb3llZSB0cmFpbmluZyIsInNhbGVzIG1hcmtldGluZyIsImFjdGl2ZSB2b2x1bnRlZXJpbmciXSwia2V5IjoxfSwiIGV4cGVyaWVuY2UsIElcdTIwMTlkIGxpa2UgdG8gaW52aXRlIHlvdSBmb3IgYW4gaW50ZXJ2aWV3LlxuXG5NeSBjb21wYW55IHdpbGwgc29vbiBiZSBvcGVuaW5nIHR3byBtb3JlIGxvY2F0aW9ucywgYW5kIEkgbmVlZCB0byBpbmNyZWFzZSBteSB0ZWFtLiBJXHUyMDE5bSBzZWVraW5nIGFuIGVtcGxveWVlIHdobyBpcyBhbHJlYWR5IGZhbWlsaWFyIHdpdGggIix7ImIiOjMsIm9wdGlvbnMiOlsiY2FzaCByZWdpc3RlcnMiLCJjb21tZXJjaWFsIHBvbGljaWVzIiwiZ3JvY2VyeSBzdG9jayIsImltcG9ydGVkIHByb2R1Y3RzIl0sImtleSI6MX0sIiwgaXMgYSBxdWljayBsZWFybmVyLCBhbmQgaGFzIGdvb2QgaW50ZXJwZXJzb25hbCBza2lsbHMuIEkgYW0gYWxzbyBsb29raW5nIGZvciBwZW9wbGUgd2hvIGFyZSBnb29kIGF0ICIseyJiIjo0LCJvcHRpb25zIjpbImFkZGl0aW9uYWwgbGFuZ3VhZ2VzIiwibWFuYWdpbmcgb3RoZXJzIiwibWFya2V0aW5nIHJlcG9ydHMiLCJ1c2luZyBjb21wdXRlcnMiXSwia2V5IjoxfSwiLCB3aGljaCBtYXkgY29tZSBpbiBoYW5keSB3aGVuIGdyZWV0aW5nIGN1c3RvbWVycy5cblxuQ291bGQgeW91IHBsZWFzZSBwcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIGZvciB5b3VyIGN1cnJlbnQgc3VwZXJ2aXNvciBhdCAiLHsiYiI6NSwib3B0aW9ucyI6WyJDaXR5IEZvb2RzIiwiRHJ1bXdvb2QgSGlnaCIsIkZvb2RTYWZlIiwiV2lsbG93IFZpZGVvIl0sImtleSI6MX0sIiBmb3IgYSByZWZlcmVuY2U\/IEkgd2lsbCBiZSBob2xkaW5nIGludGVydmlld3MgbmV4dCBUdWVzZGF5IGFmdGVybm9vbiBiZXR3ZWVuIDE6MDAgcC5tLiAtIDY6MDAgcC5tLiBQbGVhc2UgbGV0IG1lIGtub3cgd2hhdCB0aW1lIGlzIG1vc3QgY29udmVuaWVudCBmb3IgeW91LiBUaGUgaW50ZXJ2aWV3IHdpbGwgbGlrZWx5IGxhc3QgMzAgdG8gNDUgbWludXRlcy5cblxuS2luZCByZWdhcmRzLFxuQWxmb25zbyBDb3BlbGxpIl19LHsidHlwZSI6InN0ZW1saXN0IiwiaW5zdHIiOiJVc2luZyB0aGUgZHJvcC1kb3duIG1lbnUgKCAmIzk2NjI7ICksIGNob29zZSB0aGUgYmVzdCBvcHRpb24uIiwiaXRlbXMiOlt7Im4iOjYsInByZSI6Ik1pY2hhZWwgYXBwbGllZCBmb3IgdGhlIGpvYiIsIm9wdGlvbnMiOlsiaW4gcGVyc29uLiIsIm9ubGluZS4iLCJ0aHJvdWdoIGEgZnJpZW5kLiIsInRocm91Z2ggYSByZWNydWl0ZXIuIl0sImtleSI6MX0seyJuIjo3LCJwcmUiOiJBbGZvbnNvXHUyMDE5cyBHcm9jZXJpZXMgaXMiLCJvcHRpb25zIjpbInJlb3JnYW5pemluZy4iLCJleHBhbmRpbmcuIiwicmVsb2NhdGluZy4iLCJkb3duc2l6aW5nLiJdLCJrZXkiOjJ9LHsibiI6OCwicHJlIjoiVGhlIHB1cnBvc2Ugb2YgdGhlIGVtYWlsIGlzIHRvIiwib3B0aW9ucyI6WyJhcnJhbmdlIGFuIGludGVydmlldy4iLCJkaXNjdXNzIGEgbmV3IHJlZmVyZW5jZS4iLCJpbnF1aXJlIGFib3V0IGEgc2VydmljZS4iLCJvZmZlciBzb21lb25lIGEgam9iLiJdLCJrZXkiOjF9XX1dfSx7ImlkIjozLCJuYW1lIjoiUmVhZGluZyBQYXJ0IDM6IFJlYWRpbmcgZm9yIEluZm9ybWF0aW9uIiwidGltZSI6IjkgbWludXRlcyIsInBhc3NhZ2UiOnsidHlwZSI6InRleHQiLCJsYWJlbCI6IlJlYWQgdGhlIGZvbGxvd2luZyBwYXNzYWdlLiIsImh0bWwiOiI8cD48c3Ryb25nPkEuPC9zdHJvbmc+IFRoZXJlIGFyZSBtYW55IE5hdGlvbmFsIEhpc3RvcmljIFNpdGVzIGluIENhbmFkYSwgYnV0IGZldyBhcmUgYXMgcG9wdWxhciBhcyB0aGUgRm9ydHJlc3Mgb2YgTG91aXNib3VyZyBpbiBDYXBlIEJyZXRvbiwgTm92YSBTY290aWEuIEl0JnJzcXVvO3MgdGhlIHRoaXJkIG1vc3QgcG9wdWxhciBQYXJrcyBDYW5hZGEgc2l0ZSBpbiB0aGUgQXRsYW50aWMgUHJvdmluY2VzLCBhbmQgdGhlIHRlbnRoIENhbmFkYSB3aWRlLiBMb3Vpc2JvdXJnIGF0dHJhY3RzIGFsbW9zdCAyMDAsMDAwIHZpc2l0b3JzIGFubnVhbGx5LCBwYXJ0bHkgYmVjYXVzZSBvZiBpdHMgbG9jYXRpb24gbmVhciB0aGUgd29ybGQtZmFtb3VzIENhcGUgQnJldG9uIEhpZ2hsYW5kcyBOYXRpb25hbCBQYXJrLCBidXQgYWxzbyBiZWNhdXNlIG9mIGl0cyBoaXN0b3J5LiBJbiB0aGUgMTd0aCBhbmQgMTh0aCBjZW50dXJpZXMsIHRoZSBGcmVuY2ggYW5kIEJyaXRpc2ggY29tcGV0ZWQgZm9yIGNvbnRyb2wgb2YgQXRsYW50aWMgQ2FuYWRhIGFuZCBpdHMgdGhyaXZpbmcgY29kIGZpc2hlcmllcyBiYXNlZCBpbiBMb3Vpc2JvdXJnLiBBdCB0aGlzIHRpbWUsIExvdWlzYm91cmcgd2FzIGEgY2VudHJlIG9mIGNvbW1lcmNlIHRoYXQgdHJhZGVkIGNvZCBmb3IgbWFudWZhY3R1cmVkIGdvb2RzIGZyb20gRnJhbmNlLCBOZXcgRW5nbGFuZCwgYW5kIHRoZSBXZXN0IEluZGllcywgbWFraW5nIHRoaXMgbWFyaXRpbWUgcmVzb3VyY2UgdGhlIHJlZ2lvbiZyc3F1bztzIHByaW1hcnkgZHJpdmVyIGZvciBlY29ub21pYyBncm93dGguPC9wPjxwPjxzdHJvbmc+Qi48L3N0cm9uZz4gQ29uc3RydWN0aW9uIG9mIHRoZSBmb3J0aWZpZWQgc2VhcG9ydCBvZiBMb3Vpc2JvdXJnIGJlZ2FuIGluIDE3MTMuIEl0IGJlY2FtZSBhbiBpbXBvcnRhbnQgbWlsaXRhcnkgYmFzZSB3aXRoIGEgcGVybWFuZW50IGdhcnJpc29uIGFuZCBhIHNldHRsZWQgRnJlbmNoIHBvcHVsYXRpb24gb2YgYWJvdXQgOCwwMDAgYnkgMTc0NC4gSG93ZXZlciwgaXQga2VwdCBjaGFuZ2luZyBoYW5kcyBiZXR3ZWVuIEZyYW5jZSBhbmQgQnJpdGFpbiwgZGVwZW5kaW5nIG9uIHdoaWNoIGNvdW50cnkgd29uIHRoZSBtb3N0IHJlY2VudCB3YXIuIEluIDE3NDUgdGhlIEJyaXRpc2ggd29uLCBhbmQgdGhlIEZyZW5jaCBwb3B1bGF0aW9uIHJldHVybmVkIHRvIEZyYW5jZS4gVGhyZWUgeWVhcnMgbGF0ZXIsIExvdWlzYm91cmcgcmV2ZXJ0ZWQgdG8gRnJhbmNlLCBhbmQgdGhlIEZyZW5jaCBwb3B1bGF0aW9uIHJldHVybmVkIHRvIExvdWlzYm91cmcuIEluIDE3NTggdGhlIEJyaXRpc2ggYXR0YWNrZWQgeWV0IGFnYWluLCByZS1jYXB0dXJpbmcgdGhlIGZvcnRyZXNzIGluIG9ubHkgc2V2ZW4gd2Vla3MuIFRoaXMgdGltZSBCcml0aXNoIGRvbWluYXRpb24gd2FzIHBlcm1hbmVudC4gVGhlIGZvcnRpZmljYXRpb25zIHdlcmUgZGVzdHJveWVkIGFuZCB0aGUgdG93biBhYmFuZG9uZWQuIFRoaXMsIHBsdXMgdGhlIGNhcHR1cmUgb2YgUXVlYmVjIGluIDE3NTkgYW5kIE1vbnRyZWFsIGluIDE3NjAsIGVuZGVkIEZyYW5jZSZyc3F1bztzIHBvd2VyIGluIE5vcnRoIEFtZXJpY2EuPC9wPjxwPjxzdHJvbmc+Qy48L3N0cm9uZz4gSW4gdGhlIGVhcmx5IDE5NjBzLCB0aGUgR292ZXJubWVudCBvZiBDYW5hZGEgYmVnYW4gYSAkMjUgbWlsbGlvbiBwcm9qZWN0IHRvIHJlY29uc3RydWN0IGFib3V0IG9uZS1xdWFydGVyIG9mIHRoZSBvcmlnaW5hbCBMb3Vpc2JvdXJnIHRvd24gYW5kIGZvcnRpZmljYXRpb25zLiBUaGUgYnVpbGRpbmdzLCB5YXJkcywgZ2FyZGVucywgYW5kIHN0cmVldHMgd2VyZSByZWNyZWF0ZWQgYXMgdGhleSB3ZXJlIGluIDE3NDQuIEF0IGZpcnN0IHRoZXJlIHdhcyBleHRlbnNpdmUgYXJjaGFlb2xvZ2ljYWwgZXhjYXZhdGlvbiwgdW5jb3ZlcmluZyBtaWxsaW9ucyBvZiBhcnRpZmFjdHMgYXMgd2VsbCBhcyB0aGUgcnVpbnMgb2YgZm9ydGlmaWNhdGlvbnMgYW5kIGJ1aWxkaW5ncy4gRW5vdWdoIGluZm9ybWF0aW9uIHdhcyB1bmNvdmVyZWQgb24gc2l0ZSBhbmQgZGlzY292ZXJlZCBpbiBhcmNoaXZlcyBpbiBGcmFuY2UsIEJyaXRhaW4sIHRoZSBVbml0ZWQgU3RhdGVzLCBhbmQgQ2FuYWRhIHRvIHJlY3JlYXRlIHRoZSBmb3J0cmVzcyB3aXRoIGFjY3VyYWN5LiBMb3Vpc2JvdXJnIGlzIE5vcnRoIEFtZXJpY2EmcnNxdW87cyBsYXJnZXN0IGhpc3RvcmljIHJlY29uc3RydWN0aW9uLjwvcD48cD48c3Ryb25nPkQuPC9zdHJvbmc+IE5vd2FkYXlzIHRvdXJpc3RzIGNhbiBlbmpveSB0aGUgbGF2aXNobHkgcmVjb25zdHJ1Y3RlZCBmb3J0cmVzcy4gSW4gdGhlIHN1bW1lciwgMTUwIGNvc3R1bWVkIGFjdG9ycyBhcmUgb25zaXRlLiBNZW4sIHdvbWVuLCBhbmQgY2hpbGRyZW4gaW4gdGhlaXIgcGVyaW9kLXN0eWxlIGNsb3RoZXMgYWN0IG91dCBhY3Rpdml0aWVzIHJlcHJlc2VudGluZyBzb2NpZXR5IGZyb20gcG9vciBsYWJvdXJlcnMgdG8gdGhlIHZlcnkgcmljaC4gVGhlcmUgYXJlIGVuZ2luZWVycywgbXVzaWNpYW5zLCBzb2xkaWVycywgbWVyY2hhbnRzLCBzdHJlZXQgdmVuZG9ycywgYmFrZXJzLCBzZXJ2YW50cywgYW5kIGZpc2hlcm1lbi4gVmlzaXRvcnMgY2FuIGxpc3RlbiB0byBtdXNpYyBhbmQgc3Rvcmllcywgd2F0Y2ggZGFuY2VzLCBhbmQgb2JzZXJ2ZSBhY3Rpdml0aWVzIHN1Y2ggYXMgbGFjZS1tYWtpbmcsIGNvb2tpbmcsIGdhcmRlbmluZywgYW5kIGFuaW1hbCBjYXJlLiBUaGV5IGNhbiB3YXRjaCBzb2xkaWVycyBsb2FkIGFuZCBzaG9vdCBhIG11c2tldCBvciBmaXJlIGEgY2Fubm9uLiBWaXNpdGluZyBMb3Vpc2JvdXJnIGlzIHN0ZXBwaW5nIGJhY2sgMjUwIHllYXJzIGluIGhpc3RvcnkuPC9wPjxwPjxzdHJvbmc+RS48L3N0cm9uZz4gTm90IGdpdmVuIGluIGFueSBvZiB0aGUgYWJvdmUgcGFyYWdyYXBocy48L3A+In0sImJsb2NrcyI6W3sidHlwZSI6Im1hdGNoIiwiaW5zdHIiOiJEZWNpZGUgd2hpY2ggcGFyYWdyYXBoLCBBIHRvIEQsIGhhcyB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gaW4gZWFjaCBzdGF0ZW1lbnQgYmVsb3cuIFNlbGVjdCBFIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBub3QgZ2l2ZW4gaW4gYW55IG9mIHRoZSBwYXJhZ3JhcGhzLiIsImxldHRlcnMiOlsiQSIsIkIiLCJDIiwiRCIsIkUiXSwiaXRlbXMiOlt7Im4iOjEsInRleHQiOiJUb2RheVx1MjAxOXMgTG91aXNib3VyZyBhY2N1cmF0ZWx5IHJlY29uc3RydWN0cyB3aGF0IGxpZmUgd2FzIGxpa2UgdGhlcmUgaW4gMTc0NC4iLCJrZXkiOjR9LHsibiI6MiwidGV4dCI6IkluIHRoZSAxOHRoIGNlbnR1cnksIGJvdGggRnJhbmNlIGFuZCBCcml0YWluIHdhbnRlZCB0byBjb250cm9sIExvdWlzYm91cmcuIiwia2V5IjoyfSx7Im4iOjMsInRleHQiOiJMb3Vpc2JvdXJnIGlzIHRoZSBtb3N0IHBvcHVsYXIgaGlzdG9yaWNhbCBzaXRlIGluIENhbmFkYS4iLCJrZXkiOjV9LHsibiI6NCwidGV4dCI6IlRvZGF5XHUyMDE5cyB2aXNpdG9ycyBhcmUgZW50ZXJ0YWluZWQgYnkgbnVtZXJvdXMgcmUtZW5hY3RtZW50cy4iLCJrZXkiOjR9LHsibiI6NSwidGV4dCI6IkZpc2ggd2FzIHRoZSBtb3N0IGltcG9ydGFudCBjb21tb2RpdHkgb2YgMTh0aCBjZW50dXJ5IExvdWlzYm91cmcuIiwia2V5IjoxfSx7Im4iOjYsInRleHQiOiJUaGUgQnJpdGlzaCBmaW5hbGx5IGRlc3Ryb3llZCBMb3Vpc2JvdXJnIHRvIHJlbW92ZSB0aGUgRnJlbmNoIGZyb20gdGhlIGFyZWEuIiwia2V5IjoyfSx7Im4iOjcsInRleHQiOiJWaXNpdG9ycyB0byB0aGUgc2l0ZSBjYW4gcGFydGljaXBhdGUgaW4gdGhlIDI1MC15ZWFyIG9sZCBhY3Rpdml0aWVzLiIsImtleSI6NH0seyJuIjo4LCJ0ZXh0IjoiTG91aXNib3VyZyB3YXMgdGhlIGxhcmdlc3QgRnJlbmNoIHNldHRsZW1lbnQgaW4gTm9ydGggQW1lcmljYSBpbiB0aGUgMTcwMHMuIiwia2V5Ijo1fSx7Im4iOjksInRleHQiOiJMZXNzIHRoYW4gaGFsZiBvZiB0aGUgb3JpZ2luYWwgTG91aXNib3VyZyBmb3J0cmVzcyBoYXMgYmVlbiByZXN0b3JlZC4iLCJrZXkiOjN9XX1dfSx7ImlkIjo0LCJuYW1lIjoiUmVhZGluZyBQYXJ0IDQ6IFJlYWRpbmcgZm9yIFZpZXdwb2ludHMiLCJ0aW1lIjoiMTIgbWludXRlcyIsInBhc3NhZ2UiOnsidHlwZSI6InRleHQiLCJsYWJlbCI6IlJlYWQgdGhlIGZvbGxvd2luZyBhcnRpY2xlIGZyb20gYSB3ZWJzaXRlLiIsImh0bWwiOiI8cD5JdCZyc3F1bztzIGEgdHJhZGl0aW9uLiBUaG91c2FuZHMgb2YgQ2FuYWRpYW4gY2hpbGRyZW4gZG9uIHNrYXRlcyBhbmQgdHJhaW4gaW4gbWlub3IgaG9ja2V5IGxlYWd1ZXMsIHNvbWUgZnJvbSB0aGUgdGltZSB0aGV5IGxlYXJuIHRvIHdhbGsuIEdvb2Qgc3BvcnRzbWFuc2hpcCBhbmQgdGVhbXdvcmsgYXJlIHN1cHBvc2VkIHRvIGJlIHRoZSBtYWluIGxlc3NvbnMgbGVhcm5lZCwgYnV0IHRoZXkmcnNxdW87dmUgcmVjZW50bHkgYmVlbiBvdmVyc2hhZG93ZWQgYnkgdGhlIGRyaXZlIHRvIHdpbiBhdCBhbnkgY29zdC4gTm93YWRheXMsIGJlbGxpZ2VyZW50IHBhcmVudHMsIHNvbWV0aW1lcyBjYXB0dXJlZCBvbiBZb3VUdWJlLCB5ZWxsIGF0IHRoZWlyIG9mZnNwcmluZyB0byAmbGRxdW87aGl0IGhhcmRlciZyZHF1bzsgb24gdGhlIGljZSB3aGlsZSB0aGV5IGZpZ2h0IGFtb25nc3QgdGhlbXNlbHZlcyBpbiB0aGUgc3RhbmRzLiBQYXJlbnRzIGV4Y2hhbmdlIGluc3VsdHMsIHNob3ZlcywgcHVuY2hlcywgc2xhcHMsIGFuZCB0aHJlYXRzLiBIb21pY2lkZXMgaGF2ZSBldmVuIG9jY3VycmVkLjwvcD48cD5Pbmx5IGEgc21hbGwgZnJhY3Rpb24gb2YgcGFyZW50cyBhcmUgZ3VpbHR5IG9mIHRoaXMgaG9ja2V5IG1hZG5lc3MsIGJ1dCB0aGVpciBhY3Rpb25zIGNhcnJ5IGJyb2FkIHJlcGVyY3Vzc2lvbnMsIGluY2x1ZGluZyBjb3N0bHkgbGl0aWdhdGlvbiwgd2FzdGVkIHJlc291cmNlcywgYW5kIGRhbWFnZSB0byB0aGUgcmVwdXRhdGlvbiBvZiBhIHRpbWUtaG9ub3VyZWQgc3BvcnQuIE5vdyBtaW5vciBob2NrZXkgb3JnYW5pemF0aW9ucyBpbiBtb3N0IHByb3ZpbmNlcyB0cnkgdG8gc2FmZWd1YXJkIHBsYXllcnMmcnNxdW87IGVudGh1c2lhc20gYnkgbWFraW5nIHBhcmVudHMgcGFzcyBhICZsZHF1bztyZXNwZWN0IGluIHNwb3J0cyZyZHF1bzsgY291cnNlIGJlZm9yZSB0aGVpciBraWRzIGhpdCB0aGUgaWNlLjwvcD48cD5BdCBhIHJlY2VudCBjb21tdW5pdHkgYXdhcmVuZXNzIGV2ZW50IGhvc3RlZCBieSBTcG9ydHM0S2lkcywgbW9zdCBwYXJlbnRzIGludGVydmlld2VkIGJlbW9hbmVkIHRoZSBjdXJyZW50IHN0YXRlIG9mIG1pbm9yIGhvY2tleSwgaW5zaXN0aW5nIHRoYXQgcHJvYmxlbXMgY2F1c2VkIGJ5IGEgZmV3IHdlcmUgcnVpbmluZyB0aGluZ3MgZm9yIGV2ZXJ5b25lLiBGcmVkZXJpY3RvbiBwYXJlbnQgSmFuaXMgRmFuc2hhdyBzYWlkIGJvdGggaGVyIHNvbnMgc3RhcnRlZCBwbGF5aW5nIGF0IGFnZSA1LCBidXJuZWQgb3V0IGFmdGVyIG11bHRpcGxlIGluanVyaWVzLCBhbmQgbm93LCB0byBoZXIgZGlzYXBwb2ludG1lbnQsIHNodW4gYWxsIHRlYW0gc3BvcnRzLiBTaGUgYmxhbWVzIGhlciBzb25zJnJzcXVvOyBpbmp1cmllcyBvbiAmbGRxdW87aG9ja2V5IHBhcmVudHMgd2hvIGJ1bGxpZWQgdGhlaXIga2lkcyB0byBidWxseSBtaW5lLiZyZHF1bzsgRm9ybWVyIGhvY2tleSBwYXJlbnQgTWVnIE5ha2FtdXJhIGZlbHQgaGVyIGRhdWdodGVyIGhhZCBhIG1pbGRlciBleHBlcmllbmNlIHdpdGggYnVsbGllcywgYnV0IGEgZmFpciBiaXQgb2YgcGVlciBwcmVzc3VyZS4gJmxkcXVvO1NoZSBldmVudHVhbGx5IHR1cm5lZCB0byBzb2NjZXIgaW5zdGVhZCwmcmRxdW87IE5ha2FtdXJhIHJlY2FsbGVkLjwvcD48cD5BZGRyZXNzaW5nIHRoZSAxMDAgYXR0ZW5kZWVzLCBTcG9ydHM0S2lkcyBkaXJlY3RvciBMdWlnaSBQdWJuaWNvIG9mZmVyZWQgdGhpcyBhZHZpY2UgdG8gcGFyZW50czogJmxkcXVvO0xldCBraWRzIGNob29zZSB0aGVpciBvd24gc3BvcnRzLiBUaGV5JnJzcXVvO2xsIG5vdCBvbmx5IGdldCBvZmYgdGhlIGNvdWNoIGFuZCBnZXQgbW92aW5nLCB0aGV5JnJzcXVvO2xsIGV4Y2VsIGF0IGRvaW5nIHdoYXQgdGhleSBsb3ZlLiBKdXN0IGRvbiZyc3F1bzt0IGxldCB0aGVtIGRldmVsb3AgYmlnIGVnb3MmbWRhc2g7dGhleSZyc3F1bztyZSBhIGxpZmVsb25nIGhpbmRyYW5jZS4mcmRxdW87IEluIHRoZSBzdWJzZXF1ZW50IG9wZW4tbWljIGRpc2N1c3Npb24sIG9uZSBwYXJlbnQsIEpvc2UgQWxkYW5hLCBpbnNpc3RlZCB0aGF0IGV2ZW4gcmVsdWN0YW50bHkgcGxheWluZyBhbnkgY29tcGV0aXRpdmUgc3BvcnQgd2lsbCBnaXZlIGtpZHMgdGhlIHNlbGYtZGlzY2lwbGluZSB0aGV5IG5lZWQgdG8gc3VjY2VlZCBpbiBsaWZlLiBIb3dldmVyLCBzZWxmLWRlc2NyaWJlZCAmbGRxdW87cmVjb3ZlcmluZyBob2NrZXkgZGFkJnJkcXVvOyBTdGV2ZSBLb3NpbnNraSBzYWlkLCAmbGRxdW87T3JnYW5pemVkIHNwb3J0cyBkZXN0cm95IGEga2lkJnJzcXVvO3Mgc3Bpcml0IGFuZCBicmluZyBvdXQgdGhlIHdvcnN0IGluIHBhcmVudHMuIEp1c3QgZm9yZ2V0IG9yZ2FuaXplZCBzcG9ydHMgZW50aXJlbHkgdW50aWwgeW91ciBraWQmcnNxdW87cyBhdCBsZWFzdCBlaWdodGVlbi4mcmRxdW87PC9wPiJ9LCJibG9ja3MiOlt7InR5cGUiOiJzdGVtbGlzdCIsImluc3RyIjoiVXNpbmcgdGhlIGRyb3AtZG93biBtZW51ICggJiM5NjYyOyApLCBjaG9vc2UgdGhlIGJlc3Qgb3B0aW9uIGFjY29yZGluZyB0byB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gb24gdGhlIHdlYnNpdGUuIiwiaXRlbXMiOlt7Im4iOjEsInByZSI6IkFjY29yZGluZyB0byB0aGUgYXJ0aWNsZSwgbWlub3IgaG9ja2V5IGltcHJvdmVzIHBsYXllcnNcdTIwMTkiLCJvcHRpb25zIjpbImFjdGl2aXR5IGxldmVsLiIsInNlbGYtZXN0ZWVtLiIsInBlZXIgcmVsYXRpb25zaGlwcy4iLCJzZWxmLWRpc2NpcGxpbmUuIl0sImtleSI6M30seyJuIjoyLCJwcmUiOiJXaGF0IGlzIG9uZSByZXN1bHQgb2YgaG9ja2V5IG1hZG5lc3M\/Iiwib3B0aW9ucyI6WyJmcmF1ZHVsZW50IGxhd3N1aXRzIiwiaW5qdXJlZCBob2NrZXkgY29hY2hlcyIsInBhcmVudGFsIHRyYWluaW5nIiwibW9yZSBzb2NjZXIgdGVhbXMiXSwia2V5IjozfSx7Im4iOjMsInByZSI6IkFjY29yZGluZyB0byB0aGUgd3JpdGVyLCB3aGF0IGlzIHRoZSBwcmltYXJ5IHNvdXJjZSBvZiBwZWVyIHByZXNzdXJlPyIsIm9wdGlvbnMiOlsiYWdncmVzc2l2ZSBndWFyZGlhbnMiLCJlZ290aXN0aWNhbCBjb2FjaGVzIiwiY29tcGV0aXRpdmUgc2libGluZ3MiLCJvcmdhbml6ZWQgc3BvcnRzIl0sImtleSI6MX0seyJuIjo0LCJwcmUiOiJXaG8gd291bGQgbW9zdCB3YW50IGhvY2tleSBwYXJlbnRzIHRvIHRha2UgdGhlIGNvdXJzZT8iLCJvcHRpb25zIjpbIkphbmljZSBGYW5zaGF3IiwiU3RldmUgS29zaW5za2kiLCJNZWcgTmFrYW11cmEiLCJMdWlnaSBQdWJuaWNvIl0sImtleSI6MX0seyJuIjo1LCJwcmUiOiJIb2NrZXkgbWFkbmVzcyBjYW4gaGFybSBhIGNoaWxkXHUyMDE5cyIsIm9wdGlvbnMiOlsicGVyc29uYWwgcmVwdXRhdGlvbi4iLCJjb21wZXRpdGl2ZSBzcGlyaXQuIiwibW90aXZhdGlvbiB0byBleGVyY2lzZS4iLCJwYXNzaW9uIGZvciBzcG9ydHMuIl0sImtleSI6NH1dfSx7InR5cGUiOiJjbG96ZSIsImluc3RyIjoiVGhlIGZvbGxvd2luZyBpcyBhIGNvbW1lbnQgYnkgYSB2aXNpdG9yIHRvIHRoZSB3ZWJzaXRlIHBhZ2UuIENvbXBsZXRlIHRoZSBjb21tZW50IGJ5IGNob29zaW5nIHRoZSBiZXN0IG9wdGlvbiB0byBmaWxsIGluIGVhY2ggYmxhbmsuIiwiYm9keSI6WyJJIHdhcyBvbmUgb2YgdGhlIHBhcmVudHMgYXQgdGhlIG1lZXRpbmcsIGFuZCwgYXMgb25lIGNhbiBnbGVhbiBmcm9tIHRoZSBhcnRpY2xlLCB0aGUgbWFqb3JpdHkgb2YgcGFyZW50cyB3aG8gc3Bva2UgIix7ImIiOjYsIm9wdGlvbnMiOlsiYXJndWVkIGluIHN1cHBvcnQgb2YiLCJmZWx0IGZydXN0cmF0ZWQgd2l0aCIsInJlZ3JldHRlZCB0aGVpciByb2xlIGluIiwid2VyZSB1bnN1cmUgaG93IHRvIGZpeCJdLCJrZXkiOjJ9LCIgbWlub3IgaG9ja2V5XHUyMDE5cyBwcmVzZW50IHN0YXRlLiBUaGlzIGJlaW5nIHNhaWQsIGl0XHUyMDE5cyBoYXJkIHRvIGJ1eSBpbnRvIEtvc2luc2tpXHUyMDE5cyAiLHsiYiI6Nywib3B0aW9ucyI6WyJzcGl0ZWZ1bCBwcmVkaWN0aW9ucyIsImFuZ3J5IGFjY3VzYXRpb25zIiwicGVzc2ltaXN0aWMgb3V0bG9vayIsInZlbmdlZnVsIHBlcnNwZWN0aXZlIl0sImtleSI6M30sIi4gTWlub3IgaG9ja2V5IHdhcyBhIGRpc2FzdGVyIGZvciBteSBraWRzLiBIb3dldmVyLCBjb25zaXN0ZW50IHdpdGggd2hhdCB0aGUgU3BvcnRzNEtpZHMgcmVwcmVzZW50YXRpdmUgc2F5cywgSSB0aGluayB0aGF0XHUyMDE5cyBiZWNhdXNlIHRoZXkgIix7ImIiOjgsIm9wdGlvbnMiOlsiaGFkIGRpZmZpY3VsdHkgY2hvb3NpbmcgYSIsIndlcmUgbW9kZXN0IGFib3V0IHRoZWlyIiwid2FudGVkIHRvIHBsYXkgYSBkaWZmZXJlbnQiLCJuZWVkZWQgYSBsZXNzIGNvbXBldGl0aXZlIl0sImtleSI6M30sIiBzcG9ydC4gSW4gY29udHJhc3QsIEkgY29tcGxldGVseSBkaXNhZ3JlZSB3aXRoIG9uZSBvZiBoaXMgcG9pbnRzIGFuZCB3b3VsZCBhcmd1ZSB0aGF0IGl0XHUyMDE5cyBlbnRpcmVseSBwb3NzaWJsZSBmb3Iga2lkcyB0byAiLHsiYiI6OSwib3B0aW9ucyI6WyJjaG9vc2UgaG9ja2V5IGJ1dCBzdGlsbCBiZSBidWxsaWVkIiwiZGV2ZWxvcCBlZ29zIGJ1dCBzdGlsbCBzdWNjZWVkIiwibWFrZSBjaG9pY2VzIG9uIHRoZWlyIG93biIsInBsYXkgd2VsbCBidXQgc3RpbGwgd2FudCB0byBxdWl0Il0sImtleSI6Mn0sIi4gTXkgb3ZlcmFsbCB0YWtlYXdheSBmcm9tIHRoZSBhcnRpY2xlIGlzIHRoYXQgcGFyZW50cyBzaG91bGQgc3RyaXZlIHRvIGJlICIseyJiIjoxMCwib3B0aW9ucyI6WyJhZ2dyZXNzaXZlIGZhbnMiLCJzaWRlbGluZSBjb2FjaGVzIiwic3VwcG9ydGl2ZSBzcGVjdGF0b3JzIiwibGVhZGVycyBpbiB0aGUgY29tbXVuaXR5Il0sImtleSI6M30sIi4iXX1dfV19OwoKZnVuY3Rpb24gY2xiRXN0aW1hdGVSKHJhdyl7CiAgaWYgKHJhdyA+PSAzNSkgcmV0dXJuIHsgbGV2ZWw6J0NFTFBJUCAxMFx1MjAxMzEyJywgbm90ZTonQWR2YW5jZWQgcHJvZmljaWVuY3knIH07CiAgaWYgKHJhdyA+PSAzMCkgcmV0dXJuIHsgbGV2ZWw6J0NFTFBJUCA5JywgIG5vdGU6J0VmZmVjdGl2ZSBwcm9maWNpZW5jeScgfTsKICBpZiAocmF3ID49IDI3KSByZXR1cm4geyBsZXZlbDonQ0VMUElQIDgnLCAgbm90ZTonR29vZCBwcm9maWNpZW5jeScgfTsKICBpZiAocmF3ID49IDIyKSByZXR1cm4geyBsZXZlbDonQ0VMUElQIDcnLCAgbm90ZTonQWRlcXVhdGUgcHJvZmljaWVuY3knIH07CiAgaWYgKHJhdyA+PSAxNykgcmV0dXJuIHsgbGV2ZWw6J0NFTFBJUCA2JywgIG5vdGU6J0RldmVsb3BpbmcgcHJvZmljaWVuY3knIH07CiAgaWYgKHJhdyA+PSAxMSkgcmV0dXJuIHsgbGV2ZWw6J0NFTFBJUCA1JywgIG5vdGU6J0FjcXVpcmluZyBwcm9maWNpZW5jeScgfTsKICByZXR1cm4geyBsZXZlbDonQ0VMUElQIDQgb3IgYmVsb3cnLCBub3RlOidLZWVwIHByYWN0aWNpbmchJyB9Owp9CgooZnVuY3Rpb24oKXsKICAvKiAtLS0tIGluamVjdCBzY29wZWQgQ1NTIChXb3JkUHJlc3Mtc2FmZTogPHN0eWxlPiBpbiBjb250ZW50IGNhbiBiZSBzdHJpcHBlZCkgLS0tLSAqLwogIHZhciBDU1MgPSBgCi5jbHByLXdyYXB7LS1uYXZ5OiMwNTBFMjA7LS1iOTAwOiMwRDIzNTI7LS1iNzAwOiMxMjQ1QTg7LS1iNTAwOiMyNTYzRUI7LS1iNDAwOiMzQjgyRjY7LS1iMjAwOiM5M0M1RkQ7LS1iMTAwOiNEQkVBRkU7LS1iNTA6I0VGRjZGRjstLXRlYWw6IzBEOTQ4ODstLWN5YW46IzA2QjZENDstLWdyZWVuOiMxMEI5ODE7LS1ncmVlbjUwOiNFQ0ZERjU7LS1yb3NlOiNGNDNGNUU7LS10ZXh0OiMwRjE3MkE7LS1tdXRlZDojNDc1NTY5Oy0tc3VidGxlOiM5NEEzQjg7LS1ib3JkZXI6I0UyRThGMDstLWJhci1iZzojRThFQkVGOy0tYmFyLWJvcmRlcjojRDNEOUUwOy0tYmFyLXRleHQ6IzFGMjkzNzstLXBhbmVsLXAtYmc6I0Y0RjVGNzstLXBhbmVsLXAtYm9yZGVyOiNFM0U2RUE7LS1wYW5lbC1xLWJnOiNFOUY0Rjc7LS1wYW5lbC1xLWJvcmRlcjojRDZFOEVEOy0tZGQtb3Blbi1iZzojQ0JFQkY0O2ZvbnQtZmFtaWx5OidQbHVzIEpha2FydGEgU2Fucycsc3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sU2Vnb2UgVUksUm9ib3RvLHNhbnMtc2VyaWY7Y29sb3I6dmFyKC0tdGV4dCk7bWF4LXdpZHRoOjExODBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MTZweCAxNnB4IDU2cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc2l6ZToxNnB4O30KLmNscHItd3JhcCAqLC5jbHByLXdyYXAgKjo6YmVmb3JlLC5jbHByLXdyYXAgKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94O30KLmNscHItd3JhcCBidXR0b257Zm9udC1mYW1pbHk6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjt9Ci5jbHByLXdyYXAgaDEsLmNscHItd3JhcCBoMiwuY2xwci13cmFwIGgzLC5jbHByLXdyYXAgcHttYXJnaW46MDt9Ci5jbHByLWhlcm97cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6MjJweDtiYWNrZ3JvdW5kOnZhcigtLW5hdnkpO2NvbG9yOiNmZmY7cGFkZGluZzozNHB4IDM4cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTNweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JveC1zaGFkb3c6MCAyMHB4IDQwcHggLTIwcHggcmdiYSg1LDE0LDMyLC40NSk7fQouY2xwci1hdXJvcmF7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtwb2ludGVyLWV2ZW50czpub25lO30KLmNscHItYXVyb3JhIHNwYW57cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztib3JkZXItcmFkaXVzOjUwJTtmaWx0ZXI6Ymx1cig0NnB4KTtvcGFjaXR5Oi41NTt9Ci5jbHByLWF1cm9yYSBzcGFuOm50aC1jaGlsZCgxKXt3aWR0aDo0MjBweDtoZWlnaHQ6NDIwcHg7bGVmdDotMTIwcHg7dG9wOi0yMDBweDtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsIzEyNDVBOCAwJSx0cmFuc3BhcmVudCA3MCUpO30KLmNscHItYXVyb3JhIHNwYW46bnRoLWNoaWxkKDIpe3dpZHRoOjM4MHB4O2hlaWdodDozODBweDtyaWdodDotODBweDt0b3A6LTE2MHB4O2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjMEQ5NDg4IDAlLHRyYW5zcGFyZW50IDcwJSk7fQouY2xwci1hdXJvcmEgc3BhbjpudGgtY2hpbGQoMyl7d2lkdGg6MzQwcHg7aGVpZ2h0OjM0MHB4O3JpZ2h0OjIyJTtib3R0b206LTI0MHB4O2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjMjU2M0VCIDAlLHRyYW5zcGFyZW50IDcwJSk7fQouY2xwci1oZXJvLWJhZGdlc3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO3Bvc2l0aW9uOnJlbGF0aXZlO30KLmNscHItYmFkZ2UtYnJhbmR7YmFja2dyb3VuZDojZmZmO2NvbG9yOnZhcigtLWI5MDApO2ZvbnQtd2VpZ2h0OjgwMDtmb250LXNpemU6MTNweDtwYWRkaW5nOjRweCAxMXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7bGV0dGVyLXNwYWNpbmc6LjAxZW07fQouY2xwci1iYWRnZS1zZXR7Y29sb3I6dmFyKC0tYjIwMCk7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO30KLmNscHItaGVybyBoMXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6Y2xhbXAoMjZweCw0dncsNDBweCk7Zm9udC13ZWlnaHQ6ODAwO2xldHRlci1zcGFjaW5nOi0uMDJlbTtsaW5lLWhlaWdodDoxLjEyO30KLmNscHItaGVyby1zdWJ7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6I0M3RDJFMztmb250LXNpemU6MTQuNXB4O21heC13aWR0aDo3NjBweDt9Ci5jbHByLWhlcm8tY2hpcHN7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7cG9zaXRpb246cmVsYXRpdmU7fQouY2xwci1jaGlwe2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiNFNUVFRkI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xNik7cGFkZGluZzo1cHggMTFweDtib3JkZXItcmFkaXVzOjk5OXB4O30KLmNscHItY3Rhe3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6NnB4O2JhY2tncm91bmQ6dmFyKC0tYjUwMCk7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE1cHg7cGFkZGluZzoxMnB4IDIycHg7Ym9yZGVyLXJhZGl1czoxMnB4O2JveC1zaGFkb3c6MCAxMnB4IDI0cHggLTEwcHggcmdiYSgzNyw5OSwyMzUsLjgpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMsYmFja2dyb3VuZCAuMTVzO30KLmNscHItY3RhOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpO2JhY2tncm91bmQ6dmFyKC0tYjQwMCk7fQouY2xwci10b29sYmFye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLXRvcDoxOHB4O3BhZGRpbmc6MTBweCAxNHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7Ym9yZGVyLXJhZGl1czoxNHB4O2JveC1zaGFkb3c6MCA2cHggMThweCAtMTJweCByZ2JhKDE1LDIzLDQyLC4yNSk7cG9zaXRpb246c3RpY2t5O3RvcDo4cHg7ei1pbmRleDozMDt9Ci5jbHByLXRvb2xiYXJbaGlkZGVuXXtkaXNwbGF5Om5vbmU7fQouY2xwci10b29sYmFyLXNwYWNlcntmbGV4OjE7fQouY2xwci1zY29yZS1jaGlwe2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1iOTAwKTtiYWNrZ3JvdW5kOnZhcigtLWI1MCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1iMTAwKTtwYWRkaW5nOjZweCAxMnB4O2JvcmRlci1yYWRpdXM6OTk5cHg7fQouY2xwci10YnRue2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7Y29sb3I6dmFyKC0tdGV4dCk7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OHB4IDE1cHg7Ym9yZGVyLXJhZGl1czoxMHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xMnMsYm94LXNoYWRvdyAuMTJzO30KLmNscHItdGJ0bjpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMXB4KTtib3gtc2hhZG93OjAgNnB4IDE0cHggLThweCByZ2JhKDE1LDIzLDQyLC4zKTt9Ci5jbHByLXRidG4tY2hlY2t7YmFja2dyb3VuZDp2YXIoLS1ncmVlbik7Ym9yZGVyLWNvbG9yOnZhcigtLWdyZWVuKTtjb2xvcjojZmZmO30KLmNscHItdGJ0bi1jaGVjazpob3ZlcntiYWNrZ3JvdW5kOiMwY2E2Nzg7fQouY2xwci10YnRuW2Rpc2FibGVkXXtvcGFjaXR5Oi41O2N1cnNvcjpub3QtYWxsb3dlZDt0cmFuc2Zvcm06bm9uZTtib3gtc2hhZG93Om5vbmU7fQouY2xwci1zaW17bWFyZ2luLXRvcDoxNnB4O30KLmNscHItc2ltW2hpZGRlbl17ZGlzcGxheTpub25lO30KLmNscHItZG90c3tkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW46MCAwIDEycHggMnB4O2ZsZXgtd3JhcDp3cmFwO30KLmNscHItZG90e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo3cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tbXV0ZWQpO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7cGFkZGluZzo2cHggMTJweDtib3JkZXItcmFkaXVzOjk5OXB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4xNXM7fQouY2xwci1kb3QgYntkaXNwbGF5OmlubGluZS1mbGV4O3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDp2YXIoLS1iMTAwKTtjb2xvcjp2YXIoLS1iOTAwKTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MTFweDt9Ci5jbHByLWRvdC5jbHByLWN1cntiYWNrZ3JvdW5kOnZhcigtLWI1MDApO2JvcmRlci1jb2xvcjp2YXIoLS1iNTAwKTtjb2xvcjojZmZmO30KLmNscHItZG90LmNscHItY3VyIGJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4yNSk7Y29sb3I6I2ZmZjt9Ci5jbHByLWRvdC5jbHByLWRvbmUgYntiYWNrZ3JvdW5kOnZhcigtLWdyZWVuKTtjb2xvcjojZmZmO30KLmNscHItY2F0e2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJhci1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDEwcHggMzBweCAtMThweCByZ2JhKDE1LDIzLDQyLC40KTt9Ci5jbHByLWJhcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O3BhZGRpbmc6MTFweCAxNnB4O2JhY2tncm91bmQ6dmFyKC0tYmFyLWJnKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1iYXItYm9yZGVyKTt9Ci5jbHByLWJhci10aXRsZXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tYmFyLXRleHQpO2ZsZXg6MTttaW4td2lkdGg6MDt9Ci5jbHByLWJhci10aW1lcntmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1iYXItdGV4dCk7d2hpdGUtc3BhY2U6bm93cmFwO30KLmNscHItYmFyLXRpbWVyIGJ7Zm9udC13ZWlnaHQ6ODAwO30KLmNscHItY29sc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjA7fQouY2xwci1wYXNzYWdle3BhZGRpbmc6MjBweCAyMnB4O2JhY2tncm91bmQ6dmFyKC0tcGFuZWwtcC1iZyk7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCB2YXIoLS1wYW5lbC1wLWJvcmRlcik7bWF4LWhlaWdodDoxMjAwcHg7b3ZlcmZsb3c6YXV0bzt9Ci5jbHByLXFjb2x7cGFkZGluZzoxOHB4IDIycHg7YmFja2dyb3VuZDp2YXIoLS1wYW5lbC1xLWJnKTttYXgtaGVpZ2h0OjEyMDBweDtvdmVyZmxvdzphdXRvO30KLmNscHItcGxhYmVsLC5jbHByLWluc3Rye2Rpc3BsYXk6ZmxleDtnYXA6OXB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWI5MDApO21hcmdpbi1ib3R0b206MTJweDt9Ci5jbHByLXBsYWJlbDo6YmVmb3JlLC5jbHByLWluc3RyOjpiZWZvcmV7Y29udGVudDoiaSI7ZmxleDpub25lO3dpZHRoOjE3cHg7aGVpZ2h0OjE3cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDp2YXIoLS1iNTAwKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjgwMDtmb250LXN0eWxlOml0YWxpYztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxcHg7fQouY2xwci1wYXNzYWdlIHB7Zm9udC1zaXplOjE0LjVweDtjb2xvcjojMWUyYTNhO21hcmdpbi1ib3R0b206MTFweDtsaW5lLWhlaWdodDoxLjcyO30KLmNscHItcGltZ3t3aWR0aDoxMDAlO2hlaWdodDphdXRvO2JvcmRlcjoxcHggc29saWQgdmFyKC0tcGFuZWwtcC1ib3JkZXIpO2JvcmRlci1yYWRpdXM6OHB4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmJsb2NrO30KLmNscHItYmxvY2t7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tcGFuZWwtcS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE2cHggMTZweDttYXJnaW4tYm90dG9tOjE2cHg7fQouY2xwci1zdGVte2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDtmb250LXNpemU6MTVweDtjb2xvcjp2YXIoLS10ZXh0KTtwYWRkaW5nOjlweCAwO2xpbmUtaGVpZ2h0OjEuNzt9Ci5jbHByLXN0ZW0gKyAuY2xwci1zdGVte2JvcmRlci10b3A6MXB4IGRhc2hlZCAjRTZFREYxO30KLmNscHItc251bXtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tYjcwMCk7fQouY2xwci1jbG96ZXtmb250LXNpemU6MTVweDtjb2xvcjp2YXIoLS10ZXh0KTtsaW5lLWhlaWdodDoyLjE1O30KLmNscHItY2xvemUgLmNscHItcGFyYXttYXJnaW4tYm90dG9tOjEycHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7fQouY2xwci1tYXRjaC1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjEycHg7cGFkZGluZzoxMXB4IDA7Zm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjY7fQouY2xwci1tYXRjaC1yb3cgKyAuY2xwci1tYXRjaC1yb3d7Ym9yZGVyLXRvcDoxcHggZGFzaGVkICNFNkVERjE7fQouY2xwci1tYXRjaC1yb3cgLmNscHItc251bXttYXJnaW4tdG9wOjVweDt9Ci8qIGRyb3Bkb3duIHdpZGdldCAqLwouY2xwci1kZHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46MnB4IDJweDt9Ci5jbHByLWRkLWJ0bntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21pbi13aWR0aDo2NHB4O21heC13aWR0aDozNDBweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjQjdDMkNFO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NXB4IDlweDtmb250LXNpemU6MTMuNXB4O2NvbG9yOnZhcigtLXRleHQpO2xpbmUtaGVpZ2h0OjEuMzU7dGV4dC1hbGlnbjpsZWZ0O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGJvcmRlci1jb2xvciAuMTJzO30KLmNscHItZGQtYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYjUwKTtib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7fQouY2xwci1kZC5jbHByLW9wZW4gLmNscHItZGQtYnRue2JhY2tncm91bmQ6dmFyKC0tZGQtb3Blbi1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWI0MDApO30KLmNscHItZGQtdHh0e2ZsZXg6MTttaW4td2lkdGg6MDt9Ci5jbHByLWRkLXR4dC5jbHByLWVtcHR5e2NvbG9yOnZhcigtLXN1YnRsZSk7bGV0dGVyLXNwYWNpbmc6M3B4O30KLmNscHItZGQtY2FyZXR7Zm9udC1zaXplOjlweDtjb2xvcjp2YXIoLS1iNzAwKTtmbGV4Om5vbmU7fQouY2xwci1kZC1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6NjA7dG9wOmNhbGMoMTAwJSArIDRweCk7bGVmdDowO21pbi13aWR0aDoyNDBweDttYXgtd2lkdGg6MzYwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI0M2RDBEQTtib3JkZXItcmFkaXVzOjhweDtib3gtc2hhZG93OjAgMTZweCAzNHB4IC0xMnB4IHJnYmEoMTUsMjMsNDIsLjQpO3BhZGRpbmc6NXB4O2Rpc3BsYXk6bm9uZTt9Ci5jbHByLWRkLmNscHItb3BlbiAuY2xwci1kZC1tZW51e2Rpc3BsYXk6YmxvY2s7fQouY2xwci1kZC1vcHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjlweDtwYWRkaW5nOjhweCA5cHg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS10ZXh0KTtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDoxLjQ7fQouY2xwci1kZC1vcHQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iNTApO30KLmNscHItZGQtb3B0IC5jbHByLXJhZGlve2ZsZXg6bm9uZTt3aWR0aDoxNXB4O2hlaWdodDoxNXB4O2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxLjVweCBzb2xpZCAjOUFBN0I0O21hcmdpbi10b3A6MXB4O30KLmNscHItZGQtb3B0LmNscHItc2VsIC5jbHByLXJhZGlve2JvcmRlci1jb2xvcjp2YXIoLS1iNTAwKTtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsIzI1NjNFQiA0MiUsI2ZmZiA0NyUpO30KLmNscHItZGQuY2xwci1yaWdodCAuY2xwci1kZC1idG57YmFja2dyb3VuZDp2YXIoLS1ncmVlbjUwKTtib3JkZXI6MnB4IHNvbGlkIHZhcigtLWdyZWVuKTtjb2xvcjojMDQ3ODU3O30KLmNscHItZGQuY2xwci13cm9uZyAuY2xwci1kZC1idG57YmFja2dyb3VuZDojRkZGMUYyO2JvcmRlcjoycHggc29saWQgdmFyKC0tcm9zZSk7Y29sb3I6I0JFMTIzQzt9Ci5jbHByLXNvbHZlZHtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6N3B4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMwNDc4NTc7fQouY2xwci1kZC5jbHByLXdyb25nIC5jbHByLXNvbHZlZHtkaXNwbGF5OmlubGluZTt9Ci5jbHByLW5hdntkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzoxNHB4IDE4cHg7YmFja2dyb3VuZDp2YXIoLS1iYXItYmcpO2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWJhci1ib3JkZXIpO30KLmNscHItbmF2YnRue2JhY2tncm91bmQ6dmFyKC0tYjkwMCk7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzLjVweDtwYWRkaW5nOjlweCAyMHB4O2JvcmRlci1yYWRpdXM6OXB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xMnMsYmFja2dyb3VuZCAuMTJzO30KLmNscHItbmF2YnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYjcwMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTFweCk7fQouY2xwci1uYXZidG4uY2xwci1naG9zdHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tbXV0ZWQpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYmFyLWJvcmRlcik7fQouY2xwci1uYXZidG5bZGlzYWJsZWRde29wYWNpdHk6LjQ7Y3Vyc29yOm5vdC1hbGxvd2VkO3RyYW5zZm9ybTpub25lO30KLmNscHItcmVzdWx0c3ttYXJnaW4tdG9wOjE4cHg7fQouY2xwci1yZXN1bHRzW2hpZGRlbl17ZGlzcGxheTpub25lO30KLmNscHItcmVzLWNhcmR7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtib3JkZXItcmFkaXVzOjE4cHg7cGFkZGluZzoyNHB4IDI2cHg7Ym94LXNoYWRvdzowIDE2cHggNDBweCAtMjJweCByZ2JhKDE1LDIzLDQyLC40KTt9Ci5jbHByLXJlcy10b3B7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MjBweDtmbGV4LXdyYXA6d3JhcDt9Ci5jbHByLXJlcy1zY29yZXtmb250LXNpemU6NDRweDtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tYjcwMCk7bGluZS1oZWlnaHQ6MTt9Ci5jbHByLXJlcy1zY29yZSBzcGFue2ZvbnQtc2l6ZToyMHB4O2NvbG9yOnZhcigtLXN1YnRsZSk7fQouY2xwci1yZXMtY2xie2JhY2tncm91bmQ6dmFyKC0tYjUwKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWIxMDApO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHggMTZweDt9Ci5jbHByLXJlcy1jbGIgYntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxOHB4O2NvbG9yOnZhcigtLWI5MDApO30KLmNscHItcmVzLWNsYiBzbWFsbHtjb2xvcjp2YXIoLS1tdXRlZCk7fQouY2xwci1yZXMtYnJlYWt7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi10b3A6MTZweDt9Ci5jbHByLXJlcy1waWxse2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1tdXRlZCk7YmFja2dyb3VuZDojRjFGNUY5O2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo2cHggMTNweDt9Ci5jbHByLXJlcy1hY3Rpb25ze2Rpc3BsYXk6ZmxleDtnYXA6MTBweDttYXJnaW4tdG9wOjE4cHg7ZmxleC13cmFwOndyYXA7fQpAbWVkaWEobWF4LXdpZHRoOjgyMHB4KXsuY2xwci1jb2xze2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7fS5jbHByLXBhc3NhZ2V7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tcGFuZWwtcC1ib3JkZXIpO21heC1oZWlnaHQ6bm9uZTt9LmNscHItcWNvbHttYXgtaGVpZ2h0Om5vbmU7fX0KYDsKICB2YXIgc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOyBzdC50ZXh0Q29udGVudCA9IENTUzsgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdCk7CiAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwcldyYXAnKTsKICB2YXIgc3RhcnRCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwclN0YXJ0Jyk7CiAgdmFyIHRvb2xiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xwclRvb2xiYXInKTsKICB2YXIgc2ltID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscHJTaW0nKTsKICB2YXIgZG90c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscHJEb3RzJyk7CiAgdmFyIGNhdEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscHJDYXQnKTsKICB2YXIgcmVzdWx0c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscHJSZXN1bHRzJyk7CiAgdmFyIHNjb3JlQ2hpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHByU2NvcmVDaGlwJyk7CiAgdmFyIGNoZWNrQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NscHJDaGVjaycpOwogIHZhciByZXNldEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHByUmVzZXQnKTsKCiAgdmFyIFEgPSBbXTsKICB2YXIgY3VyUGFydCA9IDA7CiAgdmFyIGNoZWNrZWQgPSBmYWxzZTsKCiAgZnVuY3Rpb24gZWwodGFnLCBjbHMsIGh0bWwpeyB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7IGlmKGNscyllLmNsYXNzTmFtZT1jbHM7IGlmKGh0bWwhPW51bGwpZS5pbm5lckhUTUw9aHRtbDsgcmV0dXJuIGU7IH0KCiAgLyogQnVpbGQgdGhlIHBlcnNpc3RlbnQgcXVlc3Rpb24gbGlzdCBPTkNFOyBhdHRhY2ggLl9xIHRvIGVhY2ggaXRlbS9ibGFuayBzbwogICAgIHJlLXJlbmRlcmluZyBhIHBhcnQgcmV1c2VzIHRoZSBzYW1lIHN0YXRlIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQuICovCiAgZnVuY3Rpb24gaW5pdFF1ZXN0aW9ucygpewogICAgUSA9IFtdOwogICAgUkRBVEEucGFydHMuZm9yRWFjaChmdW5jdGlvbihwYXJ0KXsKICAgICAgcGFydC5ibG9ja3MuZm9yRWFjaChmdW5jdGlvbihibGspewogICAgICAgIGlmKGJsay50eXBlPT09J2Nsb3plJyl7CiAgICAgICAgICBibGsuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKHRvayl7IGlmKHR5cGVvZiB0b2s9PT0nb2JqZWN0Jyl7IHRvay5fcT17c2VsOm51bGwsa2V5OnRvay5rZXksbjp0b2suYixwYXJ0OnBhcnQuaWR9OyBRLnB1c2godG9rLl9xKTsgfSB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYmxrLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXQpeyBpdC5fcT17c2VsOm51bGwsa2V5Oml0LmtleSxuOml0Lm4scGFydDpwYXJ0LmlkfTsgUS5wdXNoKGl0Ll9xKTsgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gbWFrZURyb3Bkb3duKG9wdGlvbnMsIHFyZWYpewogICAgdmFyIGRkID0gZWwoJ3NwYW4nLCdjbHByLWRkJyk7CiAgICB2YXIgYnRuID0gZWwoJ2J1dHRvbicsJ2NscHItZGQtYnRuJyk7CiAgICB2YXIgdHh0ID0gZWwoJ3NwYW4nLCdjbHByLWRkLXR4dCBjbHByLWVtcHR5JywnICAgJyk7CiAgICB2YXIgY2FyZXQgPSBlbCgnc3BhbicsJ2NscHItZGQtY2FyZXQnLCdcdTI1YmUnKTsKICAgIGJ0bi5hcHBlbmRDaGlsZCh0eHQpOyBidG4uYXBwZW5kQ2hpbGQoY2FyZXQpOwogICAgdmFyIHNvbHZlZCA9IGVsKCdzcGFuJywnY2xwci1zb2x2ZWQnLCcnKTsKICAgIHZhciBtZW51ID0gZWwoJ3NwYW4nLCdjbHByLWRkLW1lbnUnKTsKICAgIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvcHQsIGkpewogICAgICB2YXIgbyA9IGVsKCdzcGFuJywnY2xwci1kZC1vcHQnKTsKICAgICAgby5hcHBlbmRDaGlsZChlbCgnc3BhbicsJ2NscHItcmFkaW8nKSk7CiAgICAgIG8uYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLG51bGwsb3B0KSk7CiAgICAgIG8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldil7CiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgaWYoY2hlY2tlZCkgcmV0dXJuOwogICAgICAgIHFyZWYuc2VsID0gaSsxOwogICAgICAgIHR4dC50ZXh0Q29udGVudCA9IG9wdDsgdHh0LmNsYXNzTmFtZT0nY2xwci1kZC10eHQnOwogICAgICAgIG1lbnUucXVlcnlTZWxlY3RvckFsbCgnLmNscHItZGQtb3B0JykuZm9yRWFjaChmdW5jdGlvbih4KXt4LmNsYXNzTGlzdC5yZW1vdmUoJ2NscHItc2VsJyk7fSk7CiAgICAgICAgby5jbGFzc0xpc3QuYWRkKCdjbHByLXNlbCcpOwogICAgICAgIGNsb3NlQWxsKCk7CiAgICAgICAgdXBkYXRlU2NvcmVDaGlwKCk7CiAgICAgIH0pOwogICAgICBtZW51LmFwcGVuZENoaWxkKG8pOwogICAgfSk7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldil7CiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBpZihjaGVja2VkKSByZXR1cm47CiAgICAgIHZhciB3YXNPcGVuID0gZGQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjbHByLW9wZW4nKTsKICAgICAgY2xvc2VBbGwoKTsKICAgICAgaWYoIXdhc09wZW4pIGRkLmNsYXNzTGlzdC5hZGQoJ2NscHItb3BlbicpOwogICAgfSk7CiAgICBkZC5hcHBlbmRDaGlsZChidG4pOyBkZC5hcHBlbmRDaGlsZChzb2x2ZWQpOyBkZC5hcHBlbmRDaGlsZChtZW51KTsKICAgIHFyZWYuZGRFbCA9IGRkOyBxcmVmLnR4dEVsID0gdHh0OyBxcmVmLnNvbHZlZEVsID0gc29sdmVkOyBxcmVmLm9wdGlvbnMgPSBvcHRpb25zOwogICAgaWYocXJlZi5zZWwhPW51bGwpewogICAgICB0eHQudGV4dENvbnRlbnQgPSBvcHRpb25zW3FyZWYuc2VsLTFdOyB0eHQuY2xhc3NOYW1lPSdjbHByLWRkLXR4dCc7CiAgICAgIHZhciBzbyA9IG1lbnUucXVlcnlTZWxlY3RvckFsbCgnLmNscHItZGQtb3B0JylbcXJlZi5zZWwtMV07IGlmKHNvKSBzby5jbGFzc0xpc3QuYWRkKCdjbHByLXNlbCcpOwogICAgfQogICAgcmV0dXJuIGRkOwogIH0KICBmdW5jdGlvbiBjbG9zZUFsbCgpeyB3cmFwLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jbHByLWRkLmNscHItb3BlbicpLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5jbGFzc0xpc3QucmVtb3ZlKCdjbHByLW9wZW4nKTt9KTsgfQogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2VBbGwpOwoKICBmdW5jdGlvbiBidWlsZFBhcnQocGkpewogICAgdmFyIHBhcnQgPSBSREFUQS5wYXJ0c1twaV07CiAgICBjYXRFbC5pbm5lckhUTUw9Jyc7CiAgICB2YXIgYmFyID0gZWwoJ2RpdicsJ2NscHItYmFyJyk7CiAgICBiYXIuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsJ2NscHItYmFyLXRpdGxlJywgJ1ByYWN0aWNlIFRlc3QgMiBcdTIwMTMgJytwYXJ0Lm5hbWUpKTsKICAgIGJhci5hcHBlbmRDaGlsZChlbCgnZGl2JywnY2xwci1iYXItdGltZXInLCdTdWdnZXN0ZWQgdGltZTogPGI+JytwYXJ0LnRpbWUrJzwvYj4nKSk7CiAgICBjYXRFbC5hcHBlbmRDaGlsZChiYXIpOwogICAgdmFyIGNvbHMgPSBlbCgnZGl2JywnY2xwci1jb2xzJyk7CiAgICB2YXIgbGVmdCA9IGVsKCdkaXYnLCdjbHByLXBhc3NhZ2UnKTsKICAgIGxlZnQuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsJ2NscHItcGxhYmVsJywgcGFydC5wYXNzYWdlLmxhYmVsKSk7CiAgICBpZihwYXJ0LnBhc3NhZ2UudHlwZT09PSdpbWFnZScpewogICAgICB2YXIgaW1nID0gZWwoJ2ltZycsJ2NscHItcGltZycpOyBpbWcuc3JjID0gcGFydC5wYXNzYWdlLnNyYzsgaW1nLmFsdCA9IHBhcnQucGFzc2FnZS5hbHR8fCcnOyBsZWZ0LmFwcGVuZENoaWxkKGltZyk7CiAgICB9IGVsc2UgewogICAgICBsZWZ0LmFwcGVuZENoaWxkKGVsKCdkaXYnLG51bGwsIHBhcnQucGFzc2FnZS5odG1sKSk7CiAgICB9CiAgICB2YXIgcmlnaHQgPSBlbCgnZGl2JywnY2xwci1xY29sJyk7CiAgICBwYXJ0LmJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uKGJsb2NrKXsgcmlnaHQuYXBwZW5kQ2hpbGQoYnVpbGRCbG9jayhibG9jaywgcGFydCkpOyB9KTsKICAgIGNvbHMuYXBwZW5kQ2hpbGQobGVmdCk7IGNvbHMuYXBwZW5kQ2hpbGQocmlnaHQpOwogICAgY2F0RWwuYXBwZW5kQ2hpbGQoY29scyk7CiAgICB2YXIgbmF2ID0gZWwoJ2RpdicsJ2NscHItbmF2Jyk7CiAgICB2YXIgcHJldiA9IGVsKCdidXR0b24nLCdjbHByLW5hdmJ0biBjbHByLWdob3N0JywnXHUyMTkwIFByZXZpb3VzIHBhcnQnKTsKICAgIHZhciBuZXh0ID0gZWwoJ2J1dHRvbicsJ2NscHItbmF2YnRuJywnTmV4dCBwYXJ0IFx1MjE5MicpOwogICAgcHJldi5kaXNhYmxlZCA9IChwaT09PTApOyBuZXh0LmRpc2FibGVkID0gKHBpPT09UkRBVEEucGFydHMubGVuZ3RoLTEpOwogICAgcHJldi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGlmKHBpPjApIGdvKHBpLTEpOyB9KTsKICAgIG5leHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBpZihwaTxSREFUQS5wYXJ0cy5sZW5ndGgtMSkgZ28ocGkrMSk7IH0pOwogICAgbmF2LmFwcGVuZENoaWxkKHByZXYpOyBuYXYuYXBwZW5kQ2hpbGQobmV4dCk7CiAgICBjYXRFbC5hcHBlbmRDaGlsZChuYXYpOwogICAgaWYoY2hlY2tlZCkgYXBwbHlNYXJrcygpOwogIH0KCiAgZnVuY3Rpb24gYnVpbGRCbG9jayhibG9jaywgcGFydCl7CiAgICB2YXIgd3JhcEIgPSBlbCgnZGl2JywnY2xwci1ibG9jaycpOwogICAgd3JhcEIuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsJ2NscHItaW5zdHInLCBibG9jay5pbnN0cikpOwogICAgaWYoYmxvY2sudHlwZT09PSdzdGVtbGlzdCcpewogICAgICBibG9jay5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0KXsKICAgICAgICB2YXIgcm93ID0gZWwoJ2RpdicsJ2NscHItc3RlbScpOwogICAgICAgIHJvdy5hcHBlbmRDaGlsZChlbCgnc3BhbicsJ2NscHItc251bScsIGl0Lm4rJy4nKSk7CiAgICAgICAgcm93LmFwcGVuZENoaWxkKGVsKCdzcGFuJyxudWxsLCBpdC5wcmUrJyAnKSk7CiAgICAgICAgcm93LmFwcGVuZENoaWxkKG1ha2VEcm9wZG93bihpdC5vcHRpb25zLCBpdC5fcSkpOwogICAgICAgIHdyYXBCLmFwcGVuZENoaWxkKHJvdyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmKGJsb2NrLnR5cGU9PT0nY2xvemUnKXsKICAgICAgdmFyIGJveCA9IGVsKCdkaXYnLCdjbHByLWNsb3plJyk7CiAgICAgIGJsb2NrLmJvZHkuZm9yRWFjaChmdW5jdGlvbih0b2spewogICAgICAgIGlmKHR5cGVvZiB0b2s9PT0nc3RyaW5nJyl7CiAgICAgICAgICB2YXIgc2VncyA9IHRvay5zcGxpdCgnXG5cbicpOwogICAgICAgICAgc2Vncy5mb3JFYWNoKGZ1bmN0aW9uKHNlZywgaWR4KXsKICAgICAgICAgICAgaWYoaWR4PjApeyBib3guYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLG51bGwsJzxicj48YnI+JykpOyB9CiAgICAgICAgICAgIGJveC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzZWcpKTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBib3guYXBwZW5kQ2hpbGQobWFrZURyb3Bkb3duKHRvay5vcHRpb25zLCB0b2suX3EpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB3cmFwQi5hcHBlbmRDaGlsZChib3gpOwogICAgfSBlbHNlIGlmKGJsb2NrLnR5cGU9PT0nbWF0Y2gnKXsKICAgICAgYmxvY2suaXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdCl7CiAgICAgICAgdmFyIHJvdyA9IGVsKCdkaXYnLCdjbHByLW1hdGNoLXJvdycpOwogICAgICAgIHJvdy5hcHBlbmRDaGlsZChtYWtlRHJvcGRvd24oYmxvY2subGV0dGVycywgaXQuX3EpKTsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCdjbHByLXNudW0nLCBpdC5uKycuJykpOwogICAgICAgIHJvdy5hcHBlbmRDaGlsZChlbCgnc3BhbicsbnVsbCwgaXQudGV4dCkpOwogICAgICAgIHdyYXBCLmFwcGVuZENoaWxkKHJvdyk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHdyYXBCOwogIH0KCiAgZnVuY3Rpb24gYnVpbGREb3RzKCl7CiAgICBkb3RzRWwuaW5uZXJIVE1MPScnOwogICAgUkRBVEEucGFydHMuZm9yRWFjaChmdW5jdGlvbihwLCBpKXsKICAgICAgdmFyIGQgPSBlbCgnYnV0dG9uJywnY2xwci1kb3QnKyhpPT09Y3VyUGFydD8nIGNscHItY3VyJzonJykpOwogICAgICBkLmFwcGVuZENoaWxkKGVsKCdiJyxudWxsLChpKzEpKSk7CiAgICAgIGQuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLG51bGwsWydDb3JyZXNwb25kZW5jZScsJ0FwcGx5IGEgRGlhZ3JhbScsJ0luZm9ybWF0aW9uJywnVmlld3BvaW50cyddW2ldKSk7CiAgICAgIGQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBnbyhpKTsgfSk7CiAgICAgIGRvdHNFbC5hcHBlbmRDaGlsZChkKTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBnbyhwaSl7IGN1clBhcnQ9cGk7IGJ1aWxkRG90cygpOyBidWlsZFBhcnQocGkpOyBjYXRFbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCcsYmxvY2s6J3N0YXJ0J30pOyB9CgogIGZ1bmN0aW9uIHVwZGF0ZVNjb3JlQ2hpcCgpewogICAgdmFyIGFucyA9IFEuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxLnNlbCE9bnVsbDt9KS5sZW5ndGg7CiAgICBzY29yZUNoaXAudGV4dENvbnRlbnQgPSBjaGVja2VkID8gKFEuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxLnNlbD09PXEua2V5O30pLmxlbmd0aCsnIC8gJytRLmxlbmd0aCsnIGNvcnJlY3QnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChhbnMrJyAvICcrUS5sZW5ndGgrJyBhbnN3ZXJlZCcpOwogIH0KCiAgZnVuY3Rpb24gYXBwbHlNYXJrcygpewogICAgUS5mb3JFYWNoKGZ1bmN0aW9uKHEpewogICAgICBpZighcS5kZEVsKSByZXR1cm47CiAgICAgIHEuZGRFbC5jbGFzc0xpc3QucmVtb3ZlKCdjbHByLXJpZ2h0JywnY2xwci13cm9uZycpOwogICAgICBpZihxLnNlbD09PXEua2V5KXsgcS5kZEVsLmNsYXNzTGlzdC5hZGQoJ2NscHItcmlnaHQnKTsgfQogICAgICBlbHNlIHsKICAgICAgICBxLmRkRWwuY2xhc3NMaXN0LmFkZCgnY2xwci13cm9uZycpOwogICAgICAgIGlmKHEuc29sdmVkRWwpIHEuc29sdmVkRWwudGV4dENvbnRlbnQgPSAnXHUyNzEzICcrcS5vcHRpb25zW3Eua2V5LTFdOwogICAgICAgIGlmKHEuc2VsPT1udWxsICYmIHEudHh0RWwpeyBxLnR4dEVsLnRleHRDb250ZW50PScobm8gYW5zd2VyKSc7IHEudHh0RWwuY2xhc3NOYW1lPSdjbHByLWRkLXR4dCc7IH0KICAgICAgfQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBkb0NoZWNrKCl7CiAgICBjaGVja2VkID0gdHJ1ZTsKICAgIGFwcGx5TWFya3MoKTsKICAgIHZhciBjb3JyZWN0ID0gUS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuc2VsPT09cS5rZXk7fSkubGVuZ3RoOwogICAgdXBkYXRlU2NvcmVDaGlwKCk7CiAgICBjaGVja0J0bi5kaXNhYmxlZCA9IHRydWU7CiAgICB2YXIgYnlQYXJ0ID0ge307CiAgICBRLmZvckVhY2goZnVuY3Rpb24ocSl7IGJ5UGFydFtxLnBhcnRdPWJ5UGFydFtxLnBhcnRdfHx7YzowLHQ6MH07IGJ5UGFydFtxLnBhcnRdLnQrKzsgaWYocS5zZWw9PT1xLmtleSlieVBhcnRbcS5wYXJ0XS5jKys7IH0pOwogICAgdmFyIGVzdCA9IGNsYkVzdGltYXRlUihjb3JyZWN0KTsKICAgIHZhciBwaWxscyA9IFJEQVRBLnBhcnRzLm1hcChmdW5jdGlvbihwKXsgdmFyIGI9YnlQYXJ0W3AuaWRdfHx7YzowLHQ6MH07IHJldHVybiAnPHNwYW4gY2xhc3M9ImNscHItcmVzLXBpbGwiPlBhcnQgJytwLmlkKyc6ICcrYi5jKycvJytiLnQrJzwvc3Bhbj4nOyB9KS5qb2luKCcnKTsKICAgIHJlc3VsdHNFbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iY2xwci1yZXMtY2FyZCI+JwogICAgICArICc8ZGl2IGNsYXNzPSJjbHByLXJlcy10b3AiPicKICAgICAgKyAnPGRpdiBjbGFzcz0iY2xwci1yZXMtc2NvcmUiPicrY29ycmVjdCsnPHNwYW4+LycrUS5sZW5ndGgrJzwvc3Bhbj48L2Rpdj4nCiAgICAgICsgJzxkaXYgY2xhc3M9ImNscHItcmVzLWNsYiI+PGI+Jytlc3QubGV2ZWwrJzwvYj48c21hbGw+Jytlc3Qubm90ZSsnICZtaWRkb3Q7IGVzdGltYXRlZCBSZWFkaW5nIGJhbmQ8L3NtYWxsPjwvZGl2PicKICAgICAgKyAnPC9kaXY+JwogICAgICArICc8ZGl2IGNsYXNzPSJjbHByLXJlcy1icmVhayI+JytwaWxscysnPC9kaXY+JwogICAgICArICc8ZGl2IGNsYXNzPSJjbHByLXJlcy1hY3Rpb25zIj48YnV0dG9uIGNsYXNzPSJjbHByLW5hdmJ0biBjbHByLWdob3N0IiBpZD0iY2xwclJldmlldyI+UmV2aWV3IGFuc3dlcnMgaW4gZWFjaCBwYXJ0PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iY2xwci1uYXZidG4iIGlkPSJjbHByUmV0cnkiPlRyeSBhZ2FpbjwvYnV0dG9uPjwvZGl2PicKICAgICAgKyAnPHAgc3R5bGU9Im1hcmdpbi10b3A6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLW11dGVkKSI+RXN0aW1hdGVkIGJhbmQgaXMgYSBzdHVkeSBndWlkZSBvbmx5LCBub3QgYW4gb2ZmaWNpYWwgQ0VMUElQIHNjb3JlLiBDb3JyZWN0IGFuc3dlcnMgYXJlIHNob3duIHdpdGggYSBncmVlbiBjaGVjayBvbiBlYWNoIGRyb3AtZG93biB5b3UgYW5zd2VyZWQgaW5jb3JyZWN0bHkuPC9wPicKICAgICAgKyAnPC9kaXY+JzsKICAgIHJlc3VsdHNFbC5oaWRkZW4gPSBmYWxzZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHByUmV0cnknKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlc2V0QWxsKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbHByUmV2aWV3JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBnbygwKTsgfSk7CiAgICByZXN1bHRzRWwuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOidzbW9vdGgnLGJsb2NrOidzdGFydCd9KTsKICB9CgogIGZ1bmN0aW9uIHJlc2V0QWxsKCl7CiAgICBjaGVja2VkPWZhbHNlOyBpbml0UXVlc3Rpb25zKCk7IGN1clBhcnQ9MDsKICAgIGNoZWNrQnRuLmRpc2FibGVkPWZhbHNlOwogICAgcmVzdWx0c0VsLmhpZGRlbj10cnVlOyByZXN1bHRzRWwuaW5uZXJIVE1MPScnOwogICAgYnVpbGREb3RzKCk7IGJ1aWxkUGFydCgwKTsKICAgIHVwZGF0ZVNjb3JlQ2hpcCgpOwogICAgc2ltLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJyxibG9jazonc3RhcnQnfSk7CiAgfQoKICBzdGFydEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICB3cmFwLnF1ZXJ5U2VsZWN0b3IoJy5jbHByLWhlcm8nKS5zdHlsZS5kaXNwbGF5PSdub25lJzsKICAgIHRvb2xiYXIuaGlkZGVuPWZhbHNlOyBzaW0uaGlkZGVuPWZhbHNlOwogICAgaW5pdFF1ZXN0aW9ucygpOyBjdXJQYXJ0PTA7IGNoZWNrZWQ9ZmFsc2U7CiAgICBidWlsZERvdHMoKTsgYnVpbGRQYXJ0KDApOyB1cGRhdGVTY29yZUNoaXAoKTsKICB9KTsKICBjaGVja0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRvQ2hlY2spOwogIHJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVzZXRBbGwpOwp9KSgpOw==\"))<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Reading Set 4 Practice Test 2: 4 parts, 38 questions in the real exam format with instant scoring and answer key. About 55 minutes. 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-6322","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6322","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=6322"}],"version-history":[{"count":2,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6322\/revisions"}],"predecessor-version":[{"id":6573,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6322\/revisions\/6573"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}